| summaryrefslogtreecommitdiff | 
diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/battle/struct/btl_battle.erl | 378 | 
1 files changed, 201 insertions, 177 deletions
| diff --git a/src/battle/struct/btl_battle.erl b/src/battle/struct/btl_battle.erl index 48b386a..b1f88ac 100644 --- a/src/battle/struct/btl_battle.erl +++ b/src/battle/struct/btl_battle.erl @@ -30,30 +30,26 @@  -export  (     [ -      get_related_inventory/1,        get_related_tile_ids/1, -      get_map/1, -      get_characters/1, -      get_character/2, -      get_resolved_character/2, -      get_players/1, -      get_player/2, -      get_current_player_turn/1,        get_encoded_last_turns_effects/1, -      get_conditions/1, +      get_map/1,        set_map/2,        ataxia_set_map/2,        ataxia_set_map/3, +      get_related_inventory/1,        set_related_inventory/2,        ataxia_set_related_inventory/2,        ataxia_set_related_inventory/3, +      get_characters/1,        set_characters/2,        ataxia_set_characters/2,        ataxia_set_characters/3, +      get_character/2, +      get_resolved_character/2,        set_character/3,        ataxia_set_character/3,        ataxia_set_character/4, @@ -61,10 +57,12 @@        add_character/2,        ataxia_add_character/2, +      get_players/1,        set_players/2,        ataxia_set_players/2,        ataxia_set_players/3, +      get_player/2,        set_player/3,        ataxia_set_player/3,        ataxia_set_player/4, @@ -72,10 +70,12 @@        add_player/2,        ataxia_add_player/2, +      get_current_player_turn/1,        set_current_player_turn/2,        ataxia_set_current_player_turn/2,        ataxia_set_current_player_turn/3, +      get_conditions/1,        set_conditions/2,        ataxia_set_conditions/2,        ataxia_set_conditions/3, @@ -96,13 +96,6 @@     ]  ). --export -( -   [ -     resolve_character/2 -   ] -). -  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -119,79 +112,111 @@ get_all_timelines (Result, CurrentIndex, EndPoint, ArraySize, Players) ->           get_all_timelines(NextResult, NextIndex, EndPoint, ArraySize, Players)     end. +-spec resolve_character +   ( +      btl_character:either(), +      type() +   ) +   -> btl_character:type(). +resolve_character (Character, Battle) -> +   case btl_character:is_unresolved(Character) of +      true -> +         btl_character:resolve +         ( +            shr_tile:get_omnimods +            ( +               shr_tile:from_id +               ( +                  shr_tile_instance:get_tile_id +                  ( +                     shr_map:get_tile_instance +                     ( +                        btl_character:get_location(Character), +                        Battle#battle.map +                     ) +                  ) +               ) +            ), +            Character +         ); + +      false -> Character +   end.  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%% Accessors --spec get_related_inventory (type()) -> shr_inventory:type(). -get_related_inventory (Battle) -> Battle#battle.related_inventory. + +%%%% Accessors %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%% +%%%% Various %%%% +%%%%%%%%%%%%%%%%% +-spec get_encoded_last_turns_effects (type()) -> list(any()). +get_encoded_last_turns_effects (Battle) -> +   CurrentPlayerTurn = Battle#battle.current_player_turn, +   Players = Battle#battle.players, +   CurrentPlayerIX = btl_player_turn:get_player_ix(CurrentPlayerTurn), + +   PlayersCount = orddict:size(Players), +   StartingPoint = ((CurrentPlayerIX + 1) rem PlayersCount), +   get_all_timelines([], StartingPoint, CurrentPlayerIX, PlayersCount, Players). + +%%%%%%%%%%%%%%%%%% +%%%% Tile IDs %%%% +%%%%%%%%%%%%%%%%%% +-spec get_related_tile_ids_field () -> non_neg_integer(). +get_related_tile_ids_field () -> #battle.related_tile_ids.  -spec get_related_tile_ids (type()) -> ordsets:ordset(shr_tile:id()).  get_related_tile_ids (Battle) -> Battle#battle.related_tile_ids. --spec get_map (type()) -> shr_map:type(). -get_map (Battle) -> Battle#battle.map. +%%%%%%%%%%%%%%%%%%% +%%%% Inventory %%%% +%%%%%%%%%%%%%%%%%%% +-spec get_related_inventory_field () -> non_neg_integer(). +get_related_inventory_field () -> #battle.related_inventory. --spec get_characters -   ( -      type() -   ) -   -> orddict:orddict(non_neg_integer(), btl_character:either()). -get_characters (Battle) -> Battle#battle.characters. +-spec get_related_inventory (type()) -> shr_inventory:type(). +get_related_inventory (Battle) -> Battle#battle.related_inventory. --spec get_character (non_neg_integer(), type()) -> btl_character:either(). -get_character (IX, Battle) -> orddict:fetch(IX, Battle#battle.characters). +-spec set_related_inventory (shr_inventory:type(), type()) -> type(). +set_related_inventory (Inv, Battle) -> +   Battle#battle +   { +      related_inventory = Inv +   }. --spec get_resolved_character +-spec ataxia_set_related_inventory     ( -      non_neg_integer(), +      shr_inventory:type(),        type()     ) -   -> {btl_character:type(), type()}. -get_resolved_character (IX, Battle) -> -   Character = orddict:fetch(IX, Battle#battle.characters), - -   case btl_character:is_unresolved(Character) of -      true -> -         ResolvedCharacter = resolve_character(Character, Battle), -         { -            ResolvedCharacter, -            Battle#battle -            { -               characters = -                  orddict:store(IX, ResolvedCharacter, Battle#battle.characters) -            } -         }; - -      false -> {Character, Battle} -   end. +   -> {type(), ataxic:basic()}. +ataxia_set_related_inventory (Inv, Battle) -> +   ataxia_set_related_inventory(Inv, ataxic:constant(Inv), Battle). --spec get_players +-spec ataxia_set_related_inventory     ( +      shr_inventory:type(), +      ataxic:basic(),        type()     ) -   -> orddict:orddict(non_neg_integer(), btl_player:type()). -get_players (Battle) -> -   Battle#battle.players. - --spec get_player (non_neg_integer(), type()) -> btl_player:type(). -get_player (IX, Battle) -> -   orddict:fetch(IX, Battle#battle.players). - --spec get_current_player_turn (type()) -> btl_player_turn:type(). -get_current_player_turn (Battle) -> -   Battle#battle.current_player_turn. +   -> {type(), ataxic:basic()}. +ataxia_set_related_inventory (Inv, InvUpdate, Battle) -> +   { +      set_related_inventory(Inv, Battle), +      ataxic:update_field(get_related_inventory_field(), InvUpdate) +   }. --spec get_encoded_last_turns_effects (type()) -> list(any()). -get_encoded_last_turns_effects (Battle) -> -   CurrentPlayerTurn = Battle#battle.current_player_turn, -   Players = Battle#battle.players, -   CurrentPlayerIX = btl_player_turn:get_player_ix(CurrentPlayerTurn), +%%%%%%%%%%%%% +%%%% Map %%%% +%%%%%%%%%%%%% +-spec get_map_field () -> non_neg_integer(). +get_map_field () -> #battle.map. -   PlayersCount = orddict:size(Players), -   StartingPoint = ((CurrentPlayerIX + 1) rem PlayersCount), -   get_all_timelines([], StartingPoint, CurrentPlayerIX, PlayersCount, Players). +-spec get_map (type()) -> shr_map:type(). +get_map (Battle) -> Battle#battle.map.  -spec set_map (shr_map:type(), type()) -> type().  set_map (Map, Battle) -> @@ -234,6 +259,18 @@ ataxia_set_map (Map, MapUpdate, Battle) ->        )     }. +%%%%%%%%%%%%%%%%%%%% +%%%% Characters %%%% +%%%%%%%%%%%%%%%%%%%% +-spec get_characters_field () -> non_neg_integer(). +get_characters_field () -> #battle.characters. + +-spec get_characters +   ( +      type() +   ) +   -> orddict:orddict(non_neg_integer(), btl_character:either()). +get_characters (Battle) -> Battle#battle.characters.  -spec set_characters     ( @@ -287,18 +324,35 @@ ataxia_set_characters (Characters, CharactersUpdate, Battle) ->        )     }. --spec set_character +%%%%%%%%%%%%%%%%%%% +%%%% Character %%%% +%%%%%%%%%%%%%%%%%%% +-spec get_character (non_neg_integer(), type()) -> btl_character:either(). +get_character (IX, Battle) -> orddict:fetch(IX, Battle#battle.characters). + +-spec get_resolved_character     (        non_neg_integer(), -      btl_character:either(),        type()     ) -   -> type(). -set_character (IX, Character, Battle) -> -   Battle#battle -   { -      characters = orddict:store(IX, Character, Battle#battle.characters) -   }. +   -> {btl_character:type(), type()}. +get_resolved_character (IX, Battle) -> +   Character = orddict:fetch(IX, Battle#battle.characters), + +   case btl_character:is_unresolved(Character) of +      true -> +         ResolvedCharacter = resolve_character(Character, Battle), +         { +            ResolvedCharacter, +            Battle#battle +            { +               characters = +                  orddict:store(IX, ResolvedCharacter, Battle#battle.characters) +            } +         }; + +      false -> {Character, Battle} +   end.  -spec add_character     ( @@ -321,6 +375,19 @@ ataxia_add_character (Character, Battle) ->     {S0Battle, AtaxicUpdate} = ataxia_set_character(IX, Character, Battle),     {IX, S0Battle, AtaxicUpdate}. +-spec set_character +   ( +      non_neg_integer(), +      btl_character:either(), +      type() +   ) +   -> type(). +set_character (IX, Character, Battle) -> +   Battle#battle +   { +      characters = orddict:store(IX, Character, Battle#battle.characters) +   }. +  -spec ataxia_set_character     (        non_neg_integer(), @@ -355,6 +422,20 @@ ataxia_set_character (IX, Character, CharacterUpdate, Battle) ->        )     }. +%%%%%%%%%%%%%%%%% +%%%% Players %%%% +%%%%%%%%%%%%%%%%% +-spec get_players_field () -> non_neg_integer(). +get_players_field () -> #battle.players. + +-spec get_players +   ( +      type() +   ) +   -> orddict:orddict(non_neg_integer(), btl_player:type()). +get_players (Battle) -> +   Battle#battle.players. +  -spec set_players     (        orddict:orddict(non_neg_integer(), btl_player:type()), @@ -393,34 +474,28 @@ ataxia_set_players (Players, PlayersUpdate, Battle) ->        )     }. --spec set_related_inventory (shr_inventory:type(), type()) -> type(). -set_related_inventory (Inv, Battle) -> -   Battle#battle -   { -      related_inventory = Inv -   }. +%%%%%%%%%%%%%%%% +%%%% Player %%%% +%%%%%%%%%%%%%%%% +-spec get_player (non_neg_integer(), type()) -> btl_player:type(). +get_player (IX, Battle) -> +   orddict:fetch(IX, Battle#battle.players). --spec ataxia_set_related_inventory -   ( -      shr_inventory:type(), -      type() -   ) -   -> {type(), ataxic:basic()}. -ataxia_set_related_inventory (Inv, Battle) -> -   ataxia_set_related_inventory(Inv, ataxic:constant(Inv), 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_set_related_inventory +-spec ataxia_add_player     ( -      shr_inventory:type(), -      ataxic:basic(), +      btl_player:type(),        type()     ) -   -> {type(), ataxic:basic()}. -ataxia_set_related_inventory (Inv, InvUpdate, Battle) -> -   { -      set_related_inventory(Inv, Battle), -      ataxic:update_field(get_related_inventory_field(), InvUpdate) -   }. +   -> {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_player (non_neg_integer(), btl_player:type(), type()) -> type().  set_player (IX, Player, Battle) -> @@ -457,21 +532,15 @@ 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)}. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%% Current Player Turn %%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-spec get_current_player_turn_field () -> non_neg_integer(). +get_current_player_turn_field () -> #battle.current_player_turn. --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 get_current_player_turn (type()) -> btl_player_turn:type(). +get_current_player_turn (Battle) -> +   Battle#battle.current_player_turn.  -spec set_current_player_turn (btl_player_turn:type(), type()) -> type().  set_current_player_turn (PlayerTurn, Battle) -> @@ -511,50 +580,11 @@ ataxia_set_current_player_turn (PlayerTurn, PlayerTurnUpdate, Battle) ->        )     }. --spec new (shr_map:type()) -> type(). -new (Map) -> -   EmptyDict = orddict:new(), - -   #battle -   { -      related_inventory = shr_inventory:default(), -      related_tile_ids = shr_map:get_related_tile_ids(Map), -      map = Map, -      characters = EmptyDict, -      players = EmptyDict, -      current_player_turn = btl_player_turn:new(0, 0) -   }. - --spec resolve_character -   ( -      btl_character:either(), -      type() -   ) -   -> btl_character:type(). -resolve_character (Character, Battle) -> -   case btl_character:is_unresolved(Character) of -      true -> -         btl_character:resolve -         ( -            shr_tile:get_omnimods -            ( -               shr_tile:from_id -               ( -                  shr_tile_instance:get_tile_id -                  ( -                     shr_map:get_tile_instance -                     ( -                        btl_character:get_location(Character), -                        Battle#battle.map -                     ) -                  ) -               ) -            ), -            Character -         ); - -      false -> Character -   end. +%%%%%%%%%%%%%%%%%%%% +%%%% Conditions %%%% +%%%%%%%%%%%%%%%%%%%% +-spec get_conditions_field() -> non_neg_integer(). +get_conditions_field () -> #battle.conditions.  -spec get_conditions (type()) -> btl_condition:collection().  get_conditions (#battle{ conditions = R }) -> R. @@ -594,23 +624,17 @@ ataxia_set_conditions (Conditions, Battle) ->        Battle     ). --spec get_characters_field () -> non_neg_integer(). -get_characters_field () -> #battle.characters. - --spec get_map_field () -> non_neg_integer(). -get_map_field () -> #battle.map. - --spec get_related_inventory_field () -> non_neg_integer(). -get_related_inventory_field () -> #battle.related_inventory. - --spec get_related_tile_ids_field () -> non_neg_integer(). -get_related_tile_ids_field () -> #battle.related_tile_ids. - --spec get_players_field () -> non_neg_integer(). -get_players_field () -> #battle.players. - --spec get_current_player_turn_field () -> non_neg_integer(). -get_current_player_turn_field () -> #battle.current_player_turn. +%%%% Constructor %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-spec new (shr_map:type()) -> type(). +new (Map) -> +   EmptyDict = orddict:new(), --spec get_conditions_field() -> non_neg_integer(). -get_conditions_field () -> #battle.conditions. +   #battle +   { +      related_inventory = shr_inventory:default(), +      related_tile_ids = shr_map:get_related_tile_ids(Map), +      map = Map, +      characters = EmptyDict, +      players = EmptyDict, +      current_player_turn = btl_player_turn:new(0, 0) +   }. | 


