Packages
islands_client_input
0.1.2
0.1.49
0.1.47
0.1.46
0.1.45
0.1.44
0.1.43
0.1.42
0.1.41
0.1.40
0.1.39
0.1.38
0.1.37
0.1.36
0.1.35
0.1.34
0.1.33
0.1.32
0.1.31
0.1.30
0.1.29
0.1.28
0.1.27
0.1.26
0.1.25
0.1.24
0.1.23
0.1.22
0.1.21
0.1.20
0.1.19
0.1.18
0.1.17
0.1.16
0.1.15
0.1.14
0.1.13
0.1.12
0.1.11
0.1.10
0.1.9
0.1.8
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
Prompts and accepts a move in the Game of Islands.
Current section
Files
Jump to
Current section
Files
lib/islands/client/input/prompter.ex
defmodule Islands.Client.Input.Prompter do
@moduledoc """
Prompts a player for input in the _Game of Islands_.
"""
alias IO.ANSI.Plus, as: ANSI
alias Islands.Client.Input.{Checker, Getter}
alias Islands.Client.{State, Summary}
@timeout_in_ms 10
@spec accept_move(State.t(), ANSI.ansilist()) :: State.t() | no_return
def accept_move(state, message \\ [])
def accept_move(state, []), do: do_accept_move(state)
def accept_move(state, message),
do: state |> Summary.display(message) |> do_accept_move()
# Private functions
@spec do_accept_move(State.t()) :: State.t() | no_return
defp do_accept_move(%State{player_name: player_name} = state) do
flush_stdio()
[:light_white, "#{player_name}, your move (or help):", :reset, " "]
|> Getter.get_input(state)
|> Checker.check_input(state)
end
@spec flush_stdio :: true
defp flush_stdio do
pid = spawn(fn -> IO.read(:all) end)
Process.sleep(@timeout_in_ms)
Process.exit(pid, :kill)
end
end