summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLizzy Hunt <elizabeth.hunt@simponic.xyz>2023-03-15 14:05:47 -0600
committerLizzy Hunt <elizabeth.hunt@simponic.xyz>2023-03-15 14:05:47 -0600
commit21090101aa81a9c64f46f5db1132d5a1f01a205c (patch)
treead00c0843a112424c3ef0dc9030e50d32559aba6
parent763529e6c3077e8edb8b15886ae4ff25395f22d7 (diff)
downloadchessh-21090101aa81a9c64f46f5db1132d5a1f01a205c.tar.gz
chessh-21090101aa81a9c64f46f5db1132d5a1f01a205c.zip
Add uci menu and fix previous game viewer wrap around move index
-rw-r--r--front/src/routes/man_pages.jsx22
-rw-r--r--lib/chessh/ssh/client/game/previous_game.ex43
2 files changed, 52 insertions, 13 deletions
diff --git a/front/src/routes/man_pages.jsx b/front/src/routes/man_pages.jsx
index 2d988d8..ea03c2a 100644
--- a/front/src/routes/man_pages.jsx
+++ b/front/src/routes/man_pages.jsx
@@ -56,11 +56,29 @@ export const ManPages = () => {
<ul>
<li>Ctrl + b / Escape to return to the main menu.</li>
<li>Ctrl + c / Ctrl + d to exit CheSSH at any point.</li>
- <li>Arrow keys / hjkl keybinds to move around the board.</li>
<li>
- Select a piece with "enter", and move it to a square by pressing
+ Arrow keys / vim (hjkl) keybinds to move around the board and
+ menus.
+ </li>
+ <li>Select menu options with "enter".</li>
+ <li>
+ Select a game piece "enter", and move it to a square by pressing
"enter" again.
</li>
+ <li>
+ In the "Previous Games" viewer, use h/l or left/right to view the
+ previous/next move.
+ </li>
+
+ <li>In a game board use "f" to flip the board.</li>
+ <li>
+ In the "Previous Games" viewer, use "m" to show the game's move
+ history in UCI notation (which you may convert to PGN{" "}
+ <a href="https://www.dcode.fr/uci-chess-notation" target="_blank">
+ here
+ </a>
+ ).
+ </li>
</ul>
</div>
</div>
diff --git a/lib/chessh/ssh/client/game/previous_game.ex b/lib/chessh/ssh/client/game/previous_game.ex
index 38172fd..73de868 100644
--- a/lib/chessh/ssh/client/game/previous_game.ex
+++ b/lib/chessh/ssh/client/game/previous_game.ex
@@ -13,7 +13,8 @@ defmodule Chessh.SSH.Client.PreviousGame do
binbo_pid: nil,
game: %Game{},
client_pid: nil,
- flipped: false
+ flipped: false,
+ viewing_uci: false
end
use Chessh.SSH.Client.Screen
@@ -59,6 +60,7 @@ defmodule Chessh.SSH.Client.PreviousGame do
%State{
move_idx: move_idx,
flipped: flipped,
+ viewing_uci: viewing_uci,
game: %Game{
moves: num_moves
}
@@ -67,10 +69,10 @@ defmodule Chessh.SSH.Client.PreviousGame do
new_move_idx =
case action do
:left ->
- Utils.wrap_around(move_idx, -1, num_moves)
+ Utils.wrap_around(move_idx, -1, num_moves + 1)
:right ->
- Utils.wrap_around(move_idx, 1, num_moves)
+ Utils.wrap_around(move_idx, 1, num_moves + 1)
_ ->
move_idx
@@ -79,7 +81,8 @@ defmodule Chessh.SSH.Client.PreviousGame do
new_state = %State{
state
| move_idx: new_move_idx,
- flipped: if(action == "f", do: !flipped, else: flipped)
+ flipped: if(action == "f", do: !flipped, else: flipped),
+ viewing_uci: if(action == "m", do: !viewing_uci, else: viewing_uci)
}
render(new_state)
@@ -92,15 +95,33 @@ defmodule Chessh.SSH.Client.PreviousGame do
client_pid: client_pid,
move_fens: move_fens,
move_idx: move_idx,
- game: %Game{id: game_id, moves: total_moves}
+ game: %Game{id: game_id, moves: total_moves, game_moves: game_moves},
+ viewing_uci: viewing_uci
} = state
) do
- {:ok, fen} = Map.fetch(move_fens, "#{move_idx}")
-
lines =
- ["Game #{game_id} | Move #{move_idx} / #{total_moves}"] ++
- Renderer.draw_board(fen, flipped) ++
- ["<- previous | next ->"]
+ case viewing_uci do
+ false ->
+ {:ok, fen} = Map.fetch(move_fens, "#{move_idx}")
+
+ [
+ "Game #{game_id} | Move #{move_idx} / #{total_moves}",
+ "| <- previous move | next move ->",
+ "| press 'm' to view move history",
+ "==="
+ ] ++
+ Renderer.draw_board(fen, flipped)
+
+ true ->
+ [
+ Utils.clear_codes(),
+ "UCI Notation For Game #{game_id}",
+ "- Press 'm' to go back to the board",
+ "- Use https://dcode.fr/uci-chess-notation to convert to PGN",
+ "",
+ game_moves
+ ]
+ end
send(
client_pid,
@@ -111,7 +132,7 @@ defmodule Chessh.SSH.Client.PreviousGame do
fn {i, line} ->
[ANSI.cursor(i, 0), ANSI.clear_line(), line]
end
- )}
+ ) ++ [ANSI.home()]}
)
state