summaryrefslogtreecommitdiff |
diff options
author | nsensfel <SpamShield0@noot-noot.org> | 2019-04-25 14:19:44 +0200 |
---|---|---|
committer | nsensfel <SpamShield0@noot-noot.org> | 2019-04-25 14:19:44 +0200 |
commit | 4fb024b4ee52ccbb9f25b17eaa606ce0b5e0296a (patch) | |
tree | cb89cdde37bd6f091ed175c076e607f4d311a01e /src/battle/struct/btl_character_turn_update.erl | |
parent | e68004ee70c9102d00df2925c05d1354a6315bc0 (diff) |
Merging btl_character_turn_{data,update}...
Diffstat (limited to 'src/battle/struct/btl_character_turn_update.erl')
-rw-r--r-- | src/battle/struct/btl_character_turn_update.erl | 208 |
1 files changed, 170 insertions, 38 deletions
diff --git a/src/battle/struct/btl_character_turn_update.erl b/src/battle/struct/btl_character_turn_update.erl index 85152b0..6649eb2 100644 --- a/src/battle/struct/btl_character_turn_update.erl +++ b/src/battle/struct/btl_character_turn_update.erl @@ -7,9 +7,18 @@ ( type, { - data :: btl_character_turn_data:type(), - timeline :: list(any()), - db :: list(ataxic:basic()) + battle_is_outdated :: boolean(), + character_is_outdated :: boolean(), + + battle :: btl_battle:type(), + reversed_battle_updates :: list(ataxic:basic()), + + character :: btl_character:type(), + reversed_character_updates :: list(ataxic:basic()), + + character_ix :: non_neg_integer(), + + reversed_timeline :: list(any()) } ). @@ -23,63 +32,186 @@ -export ( [ - new/1, + new/2, + + get_battle/1, + get_character/1, - get_data/1, + get_character_ix/1, + get_battle_update/1, get_timeline/1, - get_db/1, - set_data/2, - add_to_timeline/3, - add_to_db/2 + set_battle/3, + set_character/2, + + ataxia_set_battle/4, + ataxia_set_character/3, + + add_to_timeline/2 ] ). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-spec resolve_character_at + ( + btl_battle:type(), + non_neg_integer() + ) -> btl_charater:type(). +resolve_character_at (Battle, CharacterIX) -> + CharacterRef = btl_battle:get_character(CharacterIX, Battle), + Location = btl_character:get_location(CharacterRef), + Map = btl_battle:get_map(Battle), + + TileInstance = shr_map:get_tile_instance(Location, Map), + TileClassID = shr_tile_instance:get_tile_id(TileInstance), + Tile = shr_tile:from_id(TileClassID), + TileOmnimods = shr_tile:get_omnimods(Tile), + + Character = btl_character:resolve(TileOmnimods, CharacterRef), + + Character. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --spec new (btl_character_turn_data:type()) -> type(). -new (Data) -> +-spec new (btl_battle:type(), non_neg_integer()) -> type(). +new (Battle, CharacterIX) -> + #type { - data = Data, - timeline = [], - db = [] + character_is_outdated = false, + battle_is_outdated = false, + + battle = Battle, + reversed_battle_updates = [], + + character = resolve_character_at(Battle, CharacterIX), + reversed_character_updates = [], + + character_ix = CharacterIX, + + reversed_timeline = [] }. --spec get_data (type()) -> btl_character_turn_data:type(). -get_data (Update) -> Update#type.data. +-spec get_battle (type()) -> {type(), btl_battle:type()}. +get_battle (Data) -> + case Data#type.battle_is_outdated of + false -> {Data, Data#type.battle}; + true -> + {UpdatedBattle, BattleAtaxiaUpdate} = + btl_battle:ataxia_set_character + ( + Data#type.character_ix, + Data#type.character, + ataxic:sequence + ( + lists:reverse(Data#type.reversed_character_updates) + ), + Data#type.battle + ), --spec get_timeline (type()) -> list(any()). -get_timeline (Update) -> Update#type.timeline. + { + Data#type + { + battle_is_outdated = false, + battle = UpdatedBattle, + reversed_battle_updates = + [ + BattleAtaxiaUpdate + |Data#type.reversed_battle_updates + ], + reversed_character_updates = [] + }, + UpdatedBattle + } + end. + +-spec get_character (type()) -> {type(), btl_character:type()}. +get_character (Data) -> + case Data#type.character_is_outdated of + false -> {Data, Data#type.character}; + true -> + { + Data#type + { + character_is_outdated = false, + character = + resolve_character_at + ( + Data#type.character_ix, + Data#type.battle + ), + reversed_character_updates = [] + } + } + end. --spec get_db (type()) -> list(ataxic:basic()). -get_db (Update) -> Update#type.db. +-spec get_character_ix (type()) -> non_neg_integer(). +get_character_ix (Data) -> Data#type.character_ix. --spec set_data (btl_character_turn_data:type(), type()) -> type(). -set_data (Data, Update) -> - Update#type{ data = Data}. +-spec set_battle (btl_battle:type(), boolean(), type()) -> type(). +set_battle (Battle, CouldAffectCharacter, Data) -> + Data#type + { + character_is_outdated = CouldAffectCharacter, + battle = Battle + }. --spec add_to_timeline +-spec ataxia_set_battle ( - btl_turn_result:type(), + btl_battle:type(), + boolean(), ataxic:basic(), type() - ) -> type(). -add_to_timeline (Item, DBUpdate, Update) -> - add_to_db + ) + -> type(). +ataxia_set_battle (Battle, CouldAffectCharacter, BattleUpdate, Data) -> + Data#type + { + character_is_outdated = CouldAffectCharacter, + battle = Battle, + reversed_battle_updates = [BattleUpdate|Data#type.reversed_battle_updates] + }. + +-spec set_character (btl_character:type(), type()) -> type(). +set_character (Character, Data) -> + Data#type + { + battle_is_outdated = true, + character = Character + }. + +-spec ataxia_set_character ( - DBUpdate, - Update#type - { - timeline = [btl_turn_result:encode(Item)|Update#type.timeline] - } - ). - --spec add_to_db (ataxic:basic(), type()) -> type(). -add_to_db (Item, Update) -> - Update#type{ db = [Item|Update#type.db] }. + btl_character:type(), + ataxia:basic(), + type() + ) + -> type(). +ataxia_set_character (Character, CharacterUpdate, Data) -> + Data#type + { + battle_is_outdated = true, + character = Character, + reversed_character_updates = + [CharacterUpdate|Data#type.reversed_character_updates] + }. + +-spec add_to_timeline (btl_turn_result:type(), type()) -> type(). +add_to_timeline (Item, Data) -> + Data#type + { + reversed_timeline = + [btl_turn_result:encode(Item)|Data#type.reversed_timeline] + }. + +-spec get_timeline (type()) -> list(any()). +get_timeline (Data) -> lists:reverse(Data#type.reversed_timeline). + +-spec get_battle_update (type()) -> ataxic:basic(). +get_battle_update (Data) -> + {ActualData, _Battle} = get_battle(Data), + + ataxic:sequence(lists:reverse(ActualData#type.reversed_battle_updates)). |