Current section

Files

Jump to
islands_text_client lib islands text_client state.ex
Raw

lib/islands/text_client/state.ex

defmodule Islands.TextClient.State do
# @moduledoc """
# Holds the state of a text client playing an Islands game.
# """
@moduledoc false
alias __MODULE__
alias Islands.{Engine, Engine.Game, Engine.Tally}
@enforce_keys [:game_name, :player_name, :player_id, :move, :tally]
defstruct [:game_name, :player_name, :player_id, :move, :tally]
@type t :: %State{
game_name: String.t(),
player_name: String.t(),
player_id: Game.player_id(),
move: [String.codepoint() | integer | String.t()],
tally: Tally.t()
}
@spec init(String.t(), Game.player_id()) :: t
def init(game_name, player_id), do: init(game_name, player_id, game_name)
@spec init(String.t(), Game.player_id(), String.t()) :: t
def init(game_name, player_id, player_name) do
%State{
game_name: game_name,
player_name: player_name,
player_id: player_id,
move: [],
tally: Engine.tally(game_name, player_id)
}
end
end