Current section
Files
Jump to
Current section
Files
lib/islands/client/state.ex
# ┌─────────────────────────────────────────────────────────────────┐
# │ Inspired by the course "Elixir for Programmers" by Dave Thomas. │
# └─────────────────────────────────────────────────────────────────┘
defmodule Islands.Client.State do
use PersistConfig
@course_ref Application.get_env(@app, :course_ref)
@moduledoc """
Creates a client `state` struct for the _Game of Islands_.
\n##### #{@course_ref}
"""
alias __MODULE__
alias Islands.{Engine, Player, PlayerID, Tally}
@enforce_keys [
:game_name,
:player_name,
:gender,
:player_id,
:mode,
:pause,
:move,
:tally
]
defstruct [
:game_name,
:player_name,
:gender,
:player_id,
:mode,
:pause,
:move,
:tally
]
@type t :: %State{
game_name: String.t(),
player_name: String.t(),
gender: Player.gender(),
player_id: PlayerID.t(),
mode: :manual | :auto,
pause: 0..10_000,
move: [String.codepoint() | non_neg_integer | String.t()],
tally: Tally.t()
}
@spec new(String.t(), PlayerID.t(), String.t(), atom, atom, pos_integer) :: t
def new(game_name, player_id, player_name, gender, mode, pause) do
%State{
game_name: game_name,
player_name: player_name,
gender: gender,
player_id: player_id,
mode: mode,
pause: pause,
move: [],
tally: Engine.tally(game_name, player_id)
}
end
end