Packages
islands_text_client
0.2.13
0.2.65
0.2.64
0.2.63
0.2.62
0.2.61
0.2.60
0.2.59
0.2.58
0.2.57
0.2.56
0.2.55
0.2.54
0.2.53
0.2.52
0.2.51
0.2.50
0.2.49
0.2.48
0.2.47
0.2.46
0.2.45
0.2.44
0.2.43
0.2.42
0.2.41
0.2.40
0.2.39
0.2.38
0.2.37
0.2.36
0.2.35
0.2.34
0.2.33
0.2.32
0.2.31
0.2.30
0.2.29
0.2.28
0.2.27
0.2.26
0.2.25
0.2.24
0.2.23
0.2.22
0.2.21
0.2.20
0.2.19
0.2.18
0.2.17
0.2.16
0.2.15
0.2.14
0.2.13
0.2.12
0.2.11
0.2.10
0.2.9
0.2.8
0.2.7
0.2.6
0.2.5
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
0.1.99
0.1.98
0.1.97
0.1.96
0.1.95
0.1.94
0.1.93
0.1.91
0.1.90
0.1.89
0.1.88
0.1.87
0.1.86
0.1.85
0.1.84
0.1.83
0.1.82
0.1.81
0.1.80
0.1.79
0.1.78
0.1.77
0.1.76
0.1.75
0.1.74
0.1.73
0.1.72
0.1.71
0.1.70
0.1.69
0.1.68
0.1.67
0.1.66
0.1.65
0.1.64
0.1.63
0.1.62
0.1.61
0.1.60
0.1.59
0.1.58
0.1.57
0.1.56
0.1.55
0.1.54
0.1.53
0.1.52
0.1.51
0.1.50
0.1.49
0.1.48
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.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
Text client for the Game of Islands.
Current section
Files
Jump to
Current section
Files
lib/islands/text/client/summary/message.ex
defmodule Islands.Text.Client.Summary.Message do
use PersistConfig
alias IO.ANSI.Plus, as: ANSI
alias Islands.Engine.Board.Score
alias Islands.Engine.Game.Server
alias Islands.Text.Client.Summary.Message.{
AllIslandsPositioned,
Error,
HitIslandForested,
HitNoneForested,
IslandPositioned,
IslandsSet,
MissNoneForested,
Other,
Player2Added,
Stopping
}
alias Islands.Text.Client.{IslandType, State}
@island_type_codes Application.get_env(@app, :island_type_codes)
@sp ANSI.cursor_right()
@spec new(State.t(), Server.response()) :: ANSI.ansilist()
def new(state, response)
def new(state, {:ok, :player2_added}), do: Player2Added.message(state)
def new(state, {:ok, :island_positioned}), do: IslandPositioned.message(state)
def new(state, {:ok, :all_islands_positioned}),
do: AllIslandsPositioned.message(state)
def new(state, {:ok, :islands_set}), do: IslandsSet.message(state)
def new(state, {:hit, :none, :no_win}), do: HitNoneForested.message(state)
def new(state, {:hit, _type, _status}), do: HitIslandForested.message(state)
def new(state, {:miss, :none, :no_win}), do: MissNoneForested.message(state)
def new(state, {:ok, :stopping}), do: Stopping.message(state)
def new(state, {:error, _reason}), do: Error.message(state)
def new(state, _other), do: Other.message(state)
@spec puts(Score.t()) :: :ok
def puts(%Score{type: :board_side} = score) do
[
["\n", ANSI.cursor_right(8), top_message(score)],
["\n", ANSI.cursor_right(8), bottom_message(score)]
]
|> ANSI.puts()
end
def puts(%Score{type: :guesses_side} = score) do
[
[ANSI.cursor_up(3)],
["\n", ANSI.cursor_right(41), top_message(score)],
["\n", ANSI.cursor_right(41), bottom_message(score)]
]
|> ANSI.puts()
end
## Private functions
@spec top_message(Score.t()) :: ANSI.ansilist()
defp top_message(score) do
[
[:chartreuse_yellow, "hits: "],
[:spring_green, String.pad_leading("#{score.hits}", 2)],
[:chartreuse_yellow, " misses: "],
[:spring_green, String.pad_leading("#{score.misses}", 2)]
]
end
@spec bottom_message(Score.t()) :: ANSI.ansilist()
defp bottom_message(score) do
[
[[:reset, :spring_green, :underline], "forested"],
[[:reset, @sp, :chartreuse_yellow], "=>"],
forested_codes(score)
]
end
@spec forested_codes(Score.t()) :: ANSI.ansilist()
defp forested_codes(score) do
for code <- @island_type_codes do
[attr(IslandType.new(code) in score.forested), code]
end
end
@spec attr(boolean) :: ANSI.ansilist()
defp attr(true = _forested?), do: [:reset, @sp, :spring_green, :underline]
defp attr(false = _forested?), do: [:reset, @sp, :chartreuse_yellow]
end