diff options
| author | Simponic <loganhunt@simponic.xyz> | 2023-01-20 08:43:18 -0700 |
|---|---|---|
| committer | Simponic <loganhunt@simponic.xyz> | 2023-01-20 08:43:18 -0700 |
| commit | e0058fedfb191db8802a95548cbaf96b6fe58f80 (patch) | |
| tree | 7077ba8f3334e9bf5938da06c2724677087f8535 /lib/chessh/ssh/client/game/game.ex | |
| parent | 4666d7871a9e064a3b3033c7c1daa9c3c4972d98 (diff) | |
| download | chessh-e0058fedfb191db8802a95548cbaf96b6fe58f80.tar.gz chessh-e0058fedfb191db8802a95548cbaf96b6fe58f80.zip | |
Refactor client game for a bit
Diffstat (limited to 'lib/chessh/ssh/client/game/game.ex')
| -rw-r--r-- | lib/chessh/ssh/client/game/game.ex | 67 |
1 files changed, 30 insertions, 37 deletions
diff --git a/lib/chessh/ssh/client/game/game.ex b/lib/chessh/ssh/client/game/game.ex index 65b9d10..9dbde7f 100644 --- a/lib/chessh/ssh/client/game/game.ex +++ b/lib/chessh/ssh/client/game/game.ex @@ -291,6 +291,8 @@ defmodule Chessh.SSH.Client.Game do }, promotion ) do + game = Repo.get(Game, game_id) + attempted_move = if(flipped, do: "#{Renderer.to_chess_coord(flip(from))}#{Renderer.to_chess_coord(flip(to))}", @@ -298,8 +300,6 @@ defmodule Chessh.SSH.Client.Game do ) <> if(promotion, do: promotion, else: "") - game = Repo.get(Game, game_id) - case :binbo.move( binbo_pid, attempted_move @@ -307,42 +307,19 @@ defmodule Chessh.SSH.Client.Game do {:ok, status} -> {:ok, fen} = :binbo.get_fen(binbo_pid) - default_changeset = %{ - fen: fen, - moves: game.moves + 1, - turn: if(game.turn == :dark, do: :light, else: :dark) - } - - case status do - :continue -> - {:ok, _new_game} = - Game.changeset( - game, - default_changeset - ) - |> Repo.update() - - {:draw, _} -> - Game.changeset( - game, - Map.merge(default_changeset, %{status: :draw}) - ) - |> Repo.update() - - {:checkmate, :white_wins} -> - Game.changeset( - game, - Map.merge(default_changeset, %{status: :winner, winner: :light}) + {:ok, _new_game} = + game + |> Game.changeset( + Map.merge( + %{ + fen: fen, + moves: game.moves + 1, + turn: if(game.turn == :dark, do: :light, else: :dark) + }, + changeset_from_status(status) ) - |> Repo.update() - - {:checkmate, :black_wins} -> - Game.changeset( - game, - Map.merge(default_changeset, %{status: :winner, winner: :dark}) - ) - |> Repo.update() - end + ) + |> Repo.update() :syn.publish(:games, {:game, game_id}, {:new_move, attempted_move}) @@ -367,4 +344,20 @@ defmodule Chessh.SSH.Client.Game do ) do Renderer.render_board_state(fen, state) end + + defp changeset_from_status(game_status) do + case game_status do + :continue -> + %{} + + {:draw, _} -> + %{status: :draw} + + {:checkmate, :white_wins} -> + %{status: :winner, winner: :light} + + {:checkmate, :black_wins} -> + %{status: :winner, winner: :dark} + end + end end |
