| 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 /src | |
| parent | a7c6455285cfd3a671078be4e58df0afae07bf0c (diff) | |
...
Diffstat (limited to 'src')
| -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), | 


