diff options
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}) + {: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, :white_wins} -> - Game.changeset( - game, - Map.merge(default_changeset, %{status: :winner, winner: :light}) - ) - |> 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 |