summaryrefslogtreecommitdiff |
diff options
author | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2019-04-29 15:18:02 +0200 |
---|---|---|
committer | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2019-04-29 15:18:02 +0200 |
commit | c21e6a963fc36005b1afd5e983049a17aff92aca (patch) | |
tree | 01e0cee7536039dcd209f7e989e86e3e18873b5e | |
parent | a7c6455285cfd3a671078be4e58df0afae07bf0c (diff) |
...
-rw-r--r-- | src/battle/mechanic/btl_turn_progression.erl | 38 | ||||
-rw-r--r-- | src/battle/struct/btl_battle.erl | 43 | ||||
-rw-r--r-- | src/battle/struct/btl_player.erl | 11 | ||||
-rw-r--r-- | src/bounty/bnt_join_battle.erl | 138 |
4 files changed, 112 insertions, 118 deletions
diff --git a/src/battle/mechanic/btl_turn_progression.erl b/src/battle/mechanic/btl_turn_progression.erl index 6286cc1..ed181c5 100644 --- a/src/battle/mechanic/btl_turn_progression.erl +++ b/src/battle/mechanic/btl_turn_progression.erl @@ -12,7 +12,6 @@ handle/1 ] ). - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -20,7 +19,7 @@ ( btl_battle:type() ) - -> {btl_battle:type(), ataxic:basic()}. + -> {non_neg_integer(), btl_battle:type(), ataxic:basic()}. prepare_player_turn_for_next_player (Battle) -> Players = btl_battle:get_players(Battle), CurrentPlayerTurn = btl_battle:get_current_player_turn(Battle), @@ -36,16 +35,19 @@ prepare_player_turn_for_next_player (Battle) -> Battle ), - {UpdatedBattle, BattleAtaxiaUpdate}. + { + btl_player_turn:get_player_ix(UpdatedPlayerTurn), + UpdatedBattle, + BattleAtaxiaUpdate + }. -spec reset_next_player_timeline ( + non_neg_integer(), btl_battle:type() ) - -> {btl_battle:type(), btl_player:type(), ataxic:basic()}. -reset_next_player_timeline (Battle) -> - NextPlayerTurn = btl_battle:get_current_player_turn(Battle), - NextPlayerIX = btl_player_turn:get_player_ix(NextPlayerTurn), + -> {btl_battle:type(), ataxic:basic()}. +reset_next_player_timeline (NextPlayerIX, Battle) -> NextPlayer = btl_battle:get_player(NextPlayerIX, Battle), {UpdatedNextPlayer, PlayerAtaxiaUpdate} = @@ -60,17 +62,16 @@ reset_next_player_timeline (Battle) -> Battle ), - {UpdatedBattle, UpdatedNextPlayer, BattleAtaxiaUpdate}. + {UpdatedBattle, BattleAtaxiaUpdate}. -spec activate_next_players_characters ( - btl_battle:type(), - btl_player:type() + non_neg_integer(), + btl_battle:type() ) -> {btl_battle:type(), ataxic:basic()}. -activate_next_players_characters (Battle, NextPlayer) -> - NextPlayerIX = btl_player:get_index(NextPlayer), +activate_next_players_characters (NextPlayerIX, Battle) -> AllCharacters = btl_battle:get_characters(Battle), {ResultingBattle, BattleAtaxicUpdates} = @@ -110,14 +111,14 @@ activate_next_players_characters (Battle, NextPlayer) -> activate_next_player (Update) -> {S0Update, Battle} = btl_character_turn_update:get_battle(Update), - {S0Battle, BattleAtaxiaUpdate0} = + {NextPlayerIX, S0Battle, BattleAtaxiaUpdate0} = prepare_player_turn_for_next_player(Battle), - {S1Battle, NextPlayer, BattleAtaxiaUpdate1} = - reset_next_player_timeline(S0Battle), + {S1Battle, BattleAtaxiaUpdate1} = + reset_next_player_timeline(NextPlayerIX, S0Battle), {S2Battle, BattleAtaxiaUpdate2} = - activate_next_players_characters(S1Battle, NextPlayer), + activate_next_players_characters(NextPlayerIX, S1Battle), S1Update = btl_character_turn_update:ataxia_set_battle @@ -138,10 +139,7 @@ activate_next_player (Update) -> S2Update = btl_character_turn_update:add_to_timeline ( - btl_turn_result:new_player_turn_started - ( - btl_player:get_index(NextPlayer) - ), + btl_turn_result:new_player_turn_started(NextPlayerIX), S1Update ), diff --git a/src/battle/struct/btl_battle.erl b/src/battle/struct/btl_battle.erl index 01ab65b..aedd8da 100644 --- a/src/battle/struct/btl_battle.erl +++ b/src/battle/struct/btl_battle.erl @@ -56,6 +56,9 @@ ataxia_set_character/3, ataxia_set_character/4, + add_character/2, + ataxia_add_character/2, + set_players/2, ataxia_set_players/2, ataxia_set_players/3, @@ -64,6 +67,9 @@ ataxia_set_player/3, ataxia_set_player/4, + add_player/2, + ataxia_add_player/2, + set_current_player_turn/2, ataxia_set_current_player_turn/2, ataxia_set_current_player_turn/3, @@ -243,6 +249,27 @@ set_character (IX, Character, Battle) -> characters = orddict:store(IX, Character, Battle#battle.characters) }. +-spec add_character + ( + btl_character:unresolved(), + type() + ) + -> {non_neg_integer(), type()}. +add_character (Character, Battle) -> + IX = orddict:size(Battle#battle.characters), + {IX, set_character(IX, Character, Battle)}. + +-spec ataxia_add_character + ( + btl_character:unresolved(), + type() + ) + -> {non_neg_integer(), type(), ataxic:basic()}. +ataxia_add_character (Character, Battle) -> + IX = orddict:size(Battle#battle.characters), + {S0Battle, AtaxicUpdate} = ataxia_set_character(IX, Character, Battle), + {IX, S0Battle, AtaxicUpdate}. + -spec ataxia_set_character ( non_neg_integer(), @@ -373,6 +400,22 @@ ataxia_set_player (IX, Player, PlayerUpdate, Battle) -> ) }. +-spec add_player (btl_player:type(), type()) -> {non_neg_integer(), type()}. +add_player (Player, Battle) -> + IX = orddict:size(Battle#battle.players), + {IX, set_player(IX, Player, Battle)}. + +-spec ataxia_add_player + ( + btl_player:type(), + type() + ) + -> {non_neg_integer(), type(), ataxic:basic()}. +ataxia_add_player (Player, Battle) -> + IX = orddict:size(Battle#battle.players), + {S0Battle, AtaxicUpdate} = ataxia_set_player(IX, Player, Battle), + {IX, S0Battle, AtaxicUpdate}. + -spec set_current_player_turn (btl_player_turn:type(), type()) -> type(). set_current_player_turn (PlayerTurn, Battle) -> Battle#battle diff --git a/src/battle/struct/btl_player.erl b/src/battle/struct/btl_player.erl index 604efca..d677790 100644 --- a/src/battle/struct/btl_player.erl +++ b/src/battle/struct/btl_player.erl @@ -8,7 +8,6 @@ ( player, { - ix :: non_neg_integer(), id :: shr_player:id(), character_ix :: non_neg_integer(), timeline :: list(any()), @@ -29,7 +28,6 @@ ( [ get_id/1, - get_index/1, get_luck/1, get_summary_index/1, get_summary_category/1, @@ -59,7 +57,7 @@ -export ( [ - new/5 + new/4 ] ). @@ -73,9 +71,6 @@ -spec get_id (type()) -> shr_player:id(). get_id (Player) -> Player#player.id. --spec get_index (type()) -> non_neg_integer(). -get_index (Player) -> Player#player.ix. - -spec get_luck (type()) -> integer(). get_luck (Player) -> Player#player.luck. @@ -166,15 +161,13 @@ ataxia_reset_timeline (Player) -> -spec new ( non_neg_integer(), - non_neg_integer(), shr_player:id(), non_neg_integer(), shr_battle_summary:category() ) -> type(). -new (IX, CharacterIX, ID, SummaryIX, SummaryCategory) -> +new (CharacterIX, ID, SummaryIX, SummaryCategory) -> #player { - ix = IX, character_ix = CharacterIX, id = ID, is_active = true, diff --git a/src/bounty/bnt_join_battle.erl b/src/bounty/bnt_join_battle.erl index 68ef167..2d4d4e5 100644 --- a/src/bounty/bnt_join_battle.erl +++ b/src/bounty/bnt_join_battle.erl @@ -74,7 +74,7 @@ find_random_location (Map, ForbiddenLocations) -> shr_map:type(), ordsets:ordset(shr_location:type()) ) - -> btl_character:type(). + -> btl_character:unresolved(). create_character (PlayerIX, RosterChar, Map, ForbiddenLocations) -> {Location, Tile} = find_random_location(Map, ForbiddenLocations), TileOmnimods = shr_tile:get_omnimods(Tile), @@ -84,71 +84,53 @@ create_character (PlayerIX, RosterChar, Map, ForbiddenLocations) -> % TODO: link rank to roster. Result = btl_character:new(PlayerIX, optional, Location, ResolvedBaseChar), - Result. + btl_character:to_unresolved(Result). -spec handle_characters ( - list(shr_character:unresolved()), non_neg_integer(), shr_map:type(), ordsets:ordset(shr_location:type()), - non_neg_integer(), - orddict:orddict(non_neg_integer(), btl_character:type()), - list(ataxic:basic()) + list(shr_character:unresolved()), + btl_battle:type() ) - -> - { - orddict:orddict(non_neg_integer(), btl_character:type()), - list(ataxic:basic()) - }. -handle_characters -( - [], - _PlayerIX, - _Map, - _UsedLocations, - _NextCharIX, - Characters, - AtaxicUpdates -) -> - {Characters, AtaxicUpdates}; -handle_characters -( - [RosterCharacter|NextRosterCharacters], - PlayerIX, - Map, - UsedLocations, - NextCharIX, - Characters, - AtaxicUpdates -) -> - NewCharacter = - create_character(PlayerIX, RosterCharacter, Map, UsedLocations), + -> { btl_battle:type(), ataxic:basic() }. +handle_characters (PlayerIX, Map, UsedLocations, RosterCharacters, Battle) -> + {_FinalUsedLocations, FinalBattle, FinalBattleAtaxicUpdates} = + lists:foldl + ( + fun + ( + RosterCharacter, + {CurrentUsedLocations, CurrentBattle, CurrentBattleAtaxicUpdates} + ) + -> + NewCharacterRef = + create_character + ( + PlayerIX, + RosterCharacter, + Map, + CurrentUsedLocations + ), - NewCharacters = orddict:store(NextCharIX, NewCharacter, Characters), + {_NewCharacterIX, NewBattle, NewBattleAtaxiaUpdate} = + btl_battle:ataxia_add_character(NewCharacterRef, CurrentBattle), - NewUpdate = - ataxic:apply_function - ( - orddict, - store, - [ - ataxic:constant(NextCharIX), - ataxic:constant(NewCharacter), - ataxic:current_value() - ] + { + [ + btl_character:get_location(NewCharacterRef) + |CurrentUsedLocations + ], + NewBattle, + [NewBattleAtaxiaUpdate|CurrentBattleAtaxicUpdates] + } + end, + {UsedLocations, Battle, []}, + RosterCharacters ), - handle_characters - ( - NextRosterCharacters, - PlayerIX, - Map, - [btl_character:get_location(NewCharacter)|UsedLocations], - (NextCharIX + 1), - NewCharacters, - [NewUpdate|AtaxicUpdates] - ). + {FinalBattle, ataxic:optimize(ataxic:sequence(FinalBattleAtaxicUpdates))}. -spec add_player ( @@ -159,39 +141,8 @@ handle_characters ) -> {btl_battle:type(), non_neg_integer(), ataxic:basic()}. add_player (PlayerID, PlayerSummaryIX, PlayerSummaryCategory, Battle) -> - Players = btl_battle:get_players(Battle), - PlayerIX = orddict:size(Players), - NewPlayer = - btl_player:new - ( - PlayerIX, - 0, - PlayerID, - PlayerSummaryIX, - PlayerSummaryCategory - ), - - NewPlayers = orddict:store(PlayerIX, NewPlayer, Players), - S0Battle = btl_battle:set_players(NewPlayers, Battle), - - Update = - ataxic:update_field - ( - btl_battle:get_players_field(), - ataxic:apply_function - ( - orddict, - store, - [ - ataxic:constant(PlayerIX), - ataxic:constant(NewPlayer), - ataxic:current_value() - ] - ) - ), - - {S0Battle, PlayerIX, Update}. + {PlayerIX, Update}. -spec add_characters ( @@ -334,8 +285,17 @@ add_to_pending_battle NewCharacters = get_roster_characters(PlayerID, SelectedRosterCharacterIXs), - {S0Battle, PlayerIX, BattleUpdate0} = - add_player(PlayerID, PlayerSumIX, PlayerSumCategory, Battle), + NewPlayer = + btl_player:new + ( + 0, + PlayerID, + PlayerSumIX, + PlayerSumCategory + ), + + {PlayerIX, S0Battle, BattleAtaxiaUpdate} = + btl_battle:add_player(NewPlayer, Battle), {S1Battle, BattleUpdate1} = add_characters(NewCharacters, PlayerIX, S0Battle), |