Internal Implements the game state machine.
Summary
Types
@type eval_error() :: :invalid_input | :illegal_actor | Riichi.Hand.discard_error()
@type eval_result() :: {:ok, step()} | {:error, eval_error()}
@type step() :: {[Riichi.Event.t()], Riichi.Engine.State.t()}
Functions
@spec force_continue(Riichi.Engine.State.t()) :: eval_result()
@spec new(Riichi.Rules.t(), Riichi.Wall.t() | nil) :: step()
@spec new_from_round( Riichi.Rules.t(), Riichi.Engine.State.RoundResult.t() | nil, Riichi.Wall.t() | nil ) :: step()
@spec personalize_events(Riichi.Rules.t(), [Riichi.Event.t()]) :: %{ required(Riichi.Actor.t()) => [Riichi.Event.t()] }
@spec process_action(Riichi.Engine.State.t(), Riichi.Action.t()) :: eval_result()
@spec skip(Riichi.Engine.State.t()) :: eval_result()
@spec valid_actions(Riichi.Engine.State.t()) :: Riichi.Engine.ActionPredicate.valid_actions()