summaryrefslogtreecommitdiff |
diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/battle/battle_turn.erl | 25 | ||||
-rw-r--r-- | src/query/character_turn.erl | 8 | ||||
-rw-r--r-- | src/query/load_state.erl | 2 | ||||
-rw-r--r-- | src/struct/battle.erl | 74 | ||||
-rw-r--r-- | src/struct/player.erl | 72 |
5 files changed, 135 insertions, 46 deletions
diff --git a/src/battle/battle_turn.erl b/src/battle/battle_turn.erl index e295f09..6e8d226 100644 --- a/src/battle/battle_turn.erl +++ b/src/battle/battle_turn.erl @@ -57,13 +57,13 @@ activate_relevant_character_instances (IXs, CharacterInstances, Owner, IX) -> -spec start_next_players_turn (battle:struct()) -> {list(non_neg_integer()), battle:struct()}. start_next_players_turn (Battle) -> - PlayerIDs = battle:get_player_ids(Battle), + Players = battle:get_players(Battle), PlayerTurn = battle:get_current_player_turn(Battle), CurrentPlayerIX = player_turn:get_player_ix(PlayerTurn), CurrentTurnNumber = player_turn:get_number(PlayerTurn), CharacterInstances = battle:get_character_instances(Battle), - NextPlayerIX = ((CurrentPlayerIX + 1) rem (array:size(PlayerIDs))), + NextPlayerIX = ((CurrentPlayerIX + 1) rem (array:size(Players))), NextPlayerTurn = player_turn:new ( @@ -74,24 +74,33 @@ start_next_players_turn (Battle) -> NextPlayerIX ), + NextPlayer = array:get(NextPlayerIX, Players), + UpdatedNextPlayer = player:reset_timeline(), + {ActivatedCharacterInstanceIXs, UpdatedCharacterInstances} = activate_relevant_character_instances ( [], CharacterInstances, - array:get(NextPlayerIX, PlayerIDs), + player:get_id(NextPlayer), (array:size(CharacterInstances) - 1) ), UpdatedBattle = - battle:set_character_instances + battle:set_player ( - UpdatedCharacterInstances, - battle:set_current_player_turn + NextPlayerIX, + UpdatedNextPlayer, + battle:set_character_instances ( - NextPlayerTurn, - Battle + UpdatedCharacterInstances, + battle:set_current_player_turn + ( + NextPlayerTurn, + Battle + ) ) ), + % TODO: have a diff operation for the player's timeline being reset. {ActivatedCharacterInstanceIXs, UpdatedBattle}. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/src/query/character_turn.erl b/src/query/character_turn.erl index a692be1..e796493 100644 --- a/src/query/character_turn.erl +++ b/src/query/character_turn.erl @@ -87,11 +87,11 @@ assert_character_instance_can_be_played (RData, Input) -> ( battle:get_current_player_turn(Battle) ), - CurrentPlayer = battle:get_player_id(CurrentPlayerIX, Battle), - CharacterOwner = character:get_owner_id(Character), + CurrentPlayer = battle:get_player(CurrentPlayerIX, Battle), + CharacterOwnerID = character:get_owner_id(Character), - PlayerID = CurrentPlayer, - PlayerID = CharacterOwner, + PlayerID = player:get_id(CurrentPlayer), + PlayerID = CharacterOwnerID, true = character_instance:get_is_active(CharacterInstance). diff --git a/src/query/load_state.erl b/src/query/load_state.erl index eb27b9e..cc8f28f 100644 --- a/src/query/load_state.erl +++ b/src/query/load_state.erl @@ -87,6 +87,8 @@ generate_reply (QueryState, Input) -> ) ) ] + ++ + battle:get_encoded_last_turns_effects(Battle) ). -spec handle (binary()) -> binary(). diff --git a/src/struct/battle.erl b/src/struct/battle.erl index 4ee3b51..d668bbb 100644 --- a/src/struct/battle.erl +++ b/src/struct/battle.erl @@ -12,9 +12,8 @@ id :: id(), battlemap :: battlemap:struct(), character_instances :: array:array(character_instance:struct()), - player_ids :: array:array(player:id()), - current_player_turn :: player_turn:struct(), - last_turns_effects :: list(any()) + players :: array:array(player:struct()), + current_player_turn :: player_turn:struct() } ). @@ -33,17 +32,17 @@ get_battlemap/1, get_character_instances/1, get_character_instance/2, - get_player_ids/1, - get_player_id/2, + get_players/1, + get_player/2, get_current_player_turn/1, - get_last_turns_effects/1, + get_encoded_last_turns_effects/1, set_battlemap/2, set_character_instances/2, set_character_instance/3, - set_player_ids/2, - set_current_player_turn/2, - set_last_turns_effects/2 + set_players/2, + set_player/3, + set_current_player_turn/2 ] ). @@ -79,21 +78,22 @@ get_character_instances (Battle) -> get_character_instance (IX, Battle) -> array:get(IX, Battle#battle.character_instances). --spec get_player_ids (struct()) -> array:array(player:id()). -get_player_ids (Battle) -> - Battle#battle.player_ids. +-spec get_players (struct()) -> array:array(player:struct()). +get_players (Battle) -> + Battle#battle.players. --spec get_player_id (non_neg_integer(), struct()) -> player:id(). -get_player_id (IX, Battle) -> - array:get(IX, Battle#battle.player_ids). +-spec get_player (non_neg_integer(), struct()) -> player:struct(). +get_player (IX, Battle) -> + array:get(IX, Battle#battle.players). -spec get_current_player_turn (struct()) -> player_turn:struct(). get_current_player_turn (Battle) -> Battle#battle.current_player_turn. --spec get_last_turns_effects (struct()) -> list(any()). -get_last_turns_effects (Battle) -> - Battle#battle.last_turns_effects. +-spec get_encoded_last_turns_effects (struct()) -> list(any()). +get_encoded_last_turns_effects (_Battle) -> + % TODO + []. -spec set_battlemap (battlemap:struct(), struct()) -> struct(). set_battlemap (Battlemap, Battle) -> @@ -133,46 +133,53 @@ set_character_instance (IX, CharacterInstance, Battle) -> ) }. --spec set_player_ids +-spec set_players ( - array:array(player:id()), + array:array(player:struct()), struct() ) -> struct(). -set_player_ids (Players, Battle) -> +set_players (Players, Battle) -> Battle#battle { - player_ids = Players + players = Players }. --spec set_current_player_turn +-spec set_player ( - player_turn:struct(), + non_neg_integer(), + player:struct(), struct() ) -> struct(). -set_current_player_turn (PlayerTurn, Battle) -> +set_player (IX, Player, Battle) -> Battle#battle { - current_player_turn = PlayerTurn + players = + array:set + ( + IX, + Player, + Battle#battle.players + ) }. --spec set_last_turns_effects +-spec set_current_player_turn ( - list(any()), + player_turn:struct(), struct() ) -> struct(). -set_last_turns_effects (Effects, Battle) -> +set_current_player_turn (PlayerTurn, Battle) -> Battle#battle { - last_turns_effects = Effects + current_player_turn = PlayerTurn }. -spec random ( id(), - list(player:id()), + list(player:struct()), battlemap:struct(), list(character:struct()) ) @@ -221,7 +228,6 @@ random (ID, PlayersAsList, Battlemap, Characters) -> id = ID, battlemap = Battlemap, character_instances = array:from_list(CharacterInstancesAsList), - player_ids = array:from_list(PlayersAsList), - current_player_turn = player_turn:new(0, 0), - last_turns_effects = [] + players = array:from_list(PlayersAsList), + current_player_turn = player_turn:new(0, 0) }. diff --git a/src/struct/player.erl b/src/struct/player.erl new file mode 100644 index 0000000..824e474 --- /dev/null +++ b/src/struct/player.erl @@ -0,0 +1,72 @@ +-module(player). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-type id() :: string(). + +-record +( + player, + { + id :: id(), + timeline :: list(any()) + } +). + +-opaque struct() :: #player{}. + +-export_type([struct/0, id/0]). +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-export +( + [ + get_id/1, + get_timeline/1, + add_to_timeline/2, + reset_timeline/1 + ] +). + +-export +( + [ + new/1 + ] +). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-spec get_id (struct()) -> id(). +get_id (Player) -> Player#player.id. + +-spec get_timeline (struct()) -> list(any()). +get_timeline (Player) -> Player#player.timeline. + +-spec add_to_timeline (list(any()), struct()) -> struct(). +add_to_timeline (NewEvents, Player) -> + OldTimeline = Player#player.timeline, + + Player#player + { + timeline = (OldTimeline ++ NewEvents) + }. + +-spec reset_timeline (struct()) -> struct(). +reset_timeline (Player) -> Player#player{ timeline = [] }. + +-spec new (id()) -> struct(). +new (ID) -> + #player + { + id = ID, + timeline = [] + }. + |