defmodule Riichi do alias Riichi.Actor alias Riichi.Engine alias Riichi.Engine.State alias Riichi.Event alias Riichi.Rules @spec new(Riichi.Rules.t(), Riichi.Wall.t() | nil) :: Engine.step() defdelegate new(rules, wall \\ nil), to: Engine @spec new_from_round(Riichi.Rules.t(), State.RoundResult.t() | nil, Riichi.Wall.t() | nil) :: Engine.step() defdelegate new_from_round(rules, round_result, wall), to: Engine @spec process_action(State.t(), Riichi.Action.t()) :: Engine.eval_result() defdelegate process_action(state, action), to: Engine @spec valid_actions(State.t()) :: Engine.ActionPredicate.valid_actions() defdelegate valid_actions(state), to: Engine @spec skip(State.t()) :: Engine.eval_result() defdelegate skip(state), to: Engine @spec force_continue(State.t()) :: Engine.eval_result() defdelegate force_continue(state), to: Engine @spec personalize_events(Rules.t(), list(Event.t())) :: %{Actor.t() => list(Event.t())} defdelegate personalize_events(rules, events), to: Engine end