From e0058fedfb191db8802a95548cbaf96b6fe58f80 Mon Sep 17 00:00:00 2001 From: Simponic Date: Fri, 20 Jan 2023 08:43:18 -0700 Subject: Refactor client game for a bit --- lib/chessh/ssh/client/game/game.ex | 67 +++++++++++++++++--------------------- 1 file changed, 30 insertions(+), 37 deletions(-) (limited to 'lib/chessh/ssh/client/game/game.ex') 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 -- cgit v1.3