summaryrefslogtreecommitdiff |
diff options
-rw-r--r-- | src/battle/struct/btl_battle.erl | 300 | ||||
-rw-r--r-- | src/battle/struct/btl_player.erl | 63 | ||||
-rw-r--r-- | src/battle/struct/btl_player_turn.erl | 17 | ||||
-rw-r--r-- | src/shared/struct/inventory/shr_equipment.erl | 47 | ||||
-rw-r--r-- | src/shared/struct/shr_character.erl | 14 |
5 files changed, 435 insertions, 6 deletions
diff --git a/src/battle/struct/btl_battle.erl b/src/battle/struct/btl_battle.erl index 46f8c10..61152cb 100644 --- a/src/battle/struct/btl_battle.erl +++ b/src/battle/struct/btl_battle.erl @@ -41,12 +41,32 @@ get_encoded_last_turns_effects/1, set_map/2, + ataxia_set_map/2, + ataxia_set_map/3, + set_related_inventory/2, + ataxia_set_related_inventory/2, + ataxia_set_related_inventory/3, + set_characters/2, + ataxia_set_characters/2, + ataxia_set_characters/3, + set_character/3, + ataxia_set_character/3, + ataxia_set_character/4, + set_players/2, + ataxia_set_players/2, + ataxia_set_players/3, + set_player/3, + ataxia_set_player/3, + ataxia_set_player/4, + set_current_player_turn/2, + ataxia_set_current_player_turn/2, + ataxia_set_current_player_turn/3, get_characters_field/0, get_players_field/0, @@ -138,6 +158,59 @@ set_map (Map, Battle) -> related_tile_ids = shr_map:get_related_tile_ids(Map) }. +-spec ataxia_set_map (shr_map:type(), type()) -> {type(), ataxic:basic()}. +ataxia_set_map (Map, Battle) -> + OldRelatedTileIds = Battle#battle.related_tile_ids, + NewRelatedTileIds = shr_map:get_related_tile_ids(Map), + + OrdsetUpdate = + ataxic_sugar:update_ordset(OldRelatedTileIds, NewRelatedTileIds), + + { + Battle#battle + { + map = Map, + related_tile_ids = NewRelatedTileIds + }, + ataxic:sequence + ( + [ + ataxic:update_field(get_map_field(), ataxic:constant(Map)), + ataxic:update_field(get_related_tile_ids_field(), OrdsetUpdate) + ] + ) + }. + +-spec ataxia_set_map + ( + shr_map:type(), + ataxic:basic(), + type() + ) + -> {type(), ataxic:basic()}. +ataxia_set_map (Map, MapUpdate, Battle) -> + OldRelatedTileIds = Battle#battle.related_tile_ids, + NewRelatedTileIds = shr_map:get_related_tile_ids(Map), + + OrdsetUpdate = + ataxic_sugar:update_ordset(OldRelatedTileIds, NewRelatedTileIds), + + { + Battle#battle + { + map = Map, + related_tile_ids = NewRelatedTileIds + }, + ataxic:sequence + ( + [ + ataxic:update_field(get_map_field(), MapUpdate), + ataxic:update_field(get_related_tile_ids_field(), OrdsetUpdate) + ] + ) + }. + + -spec set_characters ( orddict:orddict(non_neg_integer(), btl_character:unresolved()), @@ -150,6 +223,39 @@ set_characters (Characters, Battle) -> characters = Characters }. +-spec ataxia_set_characters + ( + orddict:orddict(non_neg_integer(), btl_character:unresolved()), + type() + ) + -> {type(), ataxic:basic()}. +ataxia_set_characters (Characters, Battle) -> + { + Battle#battle { characters = Characters }, + ataxic:update_field + ( + get_characters_field(), + ataxic:constant(Characters) + ) + }. + +-spec ataxia_set_characters + ( + orddict:orddict(non_neg_integer(), btl_character:unresolved()), + ataxic:basic(), + type() + ) + -> {type(), ataxic:basic()}. +ataxia_set_characters (Characters, CharactersUpdate, Battle) -> + { + Battle#battle { characters = Characters }, + ataxic:update_field + ( + get_characters_field(), + CharactersUpdate + ) + }. + -spec set_character ( non_neg_integer(), @@ -163,6 +269,47 @@ set_character (IX, Character, Battle) -> characters = orddict:store(IX, Character, Battle#battle.characters) }. +-spec ataxia_set_character + ( + non_neg_integer(), + btl_character:unresolved(), + type() + ) + -> {type(), ataxic:basic()}. +ataxia_set_character (IX, Character, Battle) -> + { + Battle#battle + { + characters = orddict:store(IX, Character, Battle#battle.characters) + }, + ataxic:update_field + ( + get_characters_field(), + ataxic_sugar:update_orddict_element(IX, ataxic:constant(Character)) + ) + }. + +-spec ataxia_set_character + ( + non_neg_integer(), + btl_character:unresolved(), + ataxic:basic(), + type() + ) + -> {type(), ataxic:basic()}. +ataxia_set_character (IX, Character, CharacterUpdate, Battle) -> + { + Battle#battle + { + characters = orddict:store(IX, Character, Battle#battle.characters) + }, + ataxic:update_field + ( + get_characters_field(), + ataxic_sugar:update_orddict_element(IX, CharacterUpdate) + ) + }. + -spec set_players ( orddict:orddict(non_neg_integer(), btl_player:type()), @@ -175,13 +322,81 @@ set_players (Players, Battle) -> players = Players }. --spec set_related_inventory ( shr_inventory:type(), type()) -> type(). +-spec ataxia_set_players + ( + orddict:orddict(non_neg_integer(), btl_player:type()), + type() + ) + -> {type(), ataxic:basic()}. +ataxia_set_players (Players, Battle) -> + { + Battle#battle + { + players = Players + }, + ataxic:update_field + ( + get_players_field(), + ataxic:constant(Players) + ) + }. + +-spec ataxia_set_players + ( + orddict:orddict(non_neg_integer(), btl_player:type()), + ataxic:basic(), + type() + ) + -> {type(), ataxic:basic()}. +ataxia_set_players (Players, PlayersUpdate, Battle) -> + { + Battle#battle + { + players = Players + }, + ataxic:update_field + ( + get_players_field(), + PlayersUpdate + ) + }. + +-spec set_related_inventory (shr_inventory:type(), type()) -> type(). set_related_inventory (Inv, Battle) -> Battle#battle { related_inventory = Inv }. +-spec ataxia_set_related_inventory + ( + shr_inventory:type(), + type() + ) + -> {type(), ataxic:basic()}. +ataxia_set_related_inventory (Inv, Battle) -> + { + Battle#battle{ related_inventory = Inv }, + ataxic:update_field + ( + get_related_inventory_field(), + ataxic:constant(Inv) + ) + }. + +-spec ataxia_set_related_inventory + ( + shr_inventory:type(), + ataxic:basic(), + type() + ) + -> {type(), ataxic:basic()}. +ataxia_set_related_inventory (Inv, InvUpdate, Battle) -> + { + Battle#battle{ related_inventory = Inv }, + ataxic:update_field(get_related_inventory_field(), InvUpdate) + }. + -spec set_player (non_neg_integer(), btl_player:type(), type()) -> type(). set_player (IX, Player, Battle) -> Battle#battle @@ -189,6 +404,47 @@ set_player (IX, Player, Battle) -> players = orddict:store(IX, Player, Battle#battle.players) }. +-spec ataxia_set_player + ( + non_neg_integer(), + btl_player:type(), + type() + ) + -> {type(), ataxic:basic()}. +ataxia_set_player (IX, Player, Battle) -> + { + Battle#battle + { + players = orddict:store(IX, Player, Battle#battle.players) + }, + ataxic:update_field + ( + get_players_field(), + ataxic_sugar:update_orddict_element(IX, ataxic:constant(Player)) + ) + }. + +-spec ataxia_set_player + ( + non_neg_integer(), + btl_player:type(), + ataxic:basic(), + type() + ) + -> {type(), ataxic:basic()}. +ataxia_set_player (IX, Player, PlayerUpdate, Battle) -> + { + Battle#battle + { + players = orddict:store(IX, Player, Battle#battle.players) + }, + ataxic:update_field + ( + get_players_field(), + ataxic_sugar:update_orddict_element(IX, PlayerUpdate) + ) + }. + -spec set_current_player_turn (btl_player_turn:type(), type()) -> type(). set_current_player_turn (PlayerTurn, Battle) -> Battle#battle @@ -196,6 +452,45 @@ set_current_player_turn (PlayerTurn, Battle) -> current_player_turn = PlayerTurn }. +-spec ataxia_set_current_player_turn + ( + btl_player_turn:type(), + type() + ) + -> {type(), ataxic:basic()}. +ataxia_set_current_player_turn (PlayerTurn, Battle) -> + { + Battle#battle + { + current_player_turn = PlayerTurn + }, + ataxic:update_field + ( + get_current_player_turn_field(), + ataxic:constant(PlayerTurn) + ) + }. + +-spec ataxia_set_current_player_turn + ( + btl_player_turn:type(), + ataxic:basic(), + type() + ) + -> {type(), ataxic:basic()}. +ataxia_set_current_player_turn (PlayerTurn, PlayerTurnUpdate, Battle) -> + { + Battle#battle + { + current_player_turn = PlayerTurn + }, + ataxic:update_field + ( + get_current_player_turn_field(), + PlayerTurnUpdate + ) + }. + -spec new (shr_map:type()) -> type(). new (Map) -> EmptyDict = orddict:new(), @@ -213,6 +508,9 @@ new (Map) -> -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. diff --git a/src/battle/struct/btl_player.erl b/src/battle/struct/btl_player.erl index 054666d..3669e00 100644 --- a/src/battle/struct/btl_player.erl +++ b/src/battle/struct/btl_player.erl @@ -37,12 +37,18 @@ get_timeline/1, get_is_active/1, + set_is_active/2, + ataxia_set_is_active/2, set_luck/2, + ataxia_set_luck/2, add_to_timeline/2, + ataxia_add_to_timeline/2, + reset_timeline/1, + ataxia_reset_timeline/1, get_timeline_field/0, get_luck_field/0, @@ -88,24 +94,75 @@ get_timeline (Player) -> Player#player.timeline. -spec get_is_active (type()) -> boolean(). get_is_active (Player) -> Player#player.is_active. + -spec set_is_active (boolean(), type()) -> type(). set_is_active (Val, Player) -> Player#player{ is_active = Val }. +-spec ataxia_set_is_active (boolean(), type()) -> {type(), ataxia:basic()}. +ataxia_set_is_active (Val, Player) -> + { + Player#player{ is_active = Val }, + ataxic:update_field + ( + get_is_active_field(), + ataxic:constant(Val) + ) + }. + -spec set_luck (integer(), type()) -> type(). set_luck (Val, Player) -> Player#player{ luck = Val }. +-spec ataxia_set_luck (integer(), type()) -> {type(), ataxic:basic()}. +ataxia_set_luck (Val, Player) -> + { + Player#player{ luck = Val }, + ataxic:update_field + ( + get_luck_field(), + ataxic:constant(Val) + ) + }. + -spec add_to_timeline (list(any()), type()) -> type(). add_to_timeline (NewEvents, Player) -> - OldTimeline = Player#player.timeline, - Player#player { - timeline = (NewEvents ++ OldTimeline) + timeline = (NewEvents ++ Player#player.timeline) + }. + +-spec ataxia_add_to_timeline (list(any()), type()) -> {type(), ataxic:basic()}. +ataxia_add_to_timeline (NewEvents, Player) -> + { + Player#player{ timeline = (NewEvents ++ Player#player.timeline) }, + ataxic:update_field + ( + get_timeline_field(), + ataxic:apply_function + ( + lists, + append, + [ + ataxic:constant(NewEvents), + ataxic:current_value() + ] + ) + ) }. -spec reset_timeline (type()) -> type(). reset_timeline (Player) -> Player#player{ timeline = [] }. +-spec ataxia_reset_timeline (type()) -> {type(), ataxic:basic()}. +ataxia_reset_timeline (Player) -> + { + Player#player{ timeline = [] }, + ataxic:update_field + ( + get_timeline_field(), + ataxic:constant([]) + ) + }. + -spec new ( non_neg_integer(), diff --git a/src/battle/struct/btl_player_turn.erl b/src/battle/struct/btl_player_turn.erl index 6bd823f..fb0c2b7 100644 --- a/src/battle/struct/btl_player_turn.erl +++ b/src/battle/struct/btl_player_turn.erl @@ -23,7 +23,8 @@ ( [ new/2, - next/2 + next/2, + ataxia_next/2 ] ). @@ -109,3 +110,17 @@ next (Players, CurrentPlayerTurn) -> end, new(NextTurnNumber, NextPlayerIX). + +-spec ataxia_next + ( + orddict:orddict(non_neg_integer(), btl_player:type()), + type() + ) + -> {type(), ataxic:basic()}. +ataxia_next (Players, CurrentPlayerTurn) -> + Next = next(Players, CurrentPlayerTurn), + + { + Next, + ataxic:constant(Next) + }. diff --git a/src/shared/struct/inventory/shr_equipment.erl b/src/shared/struct/inventory/shr_equipment.erl index 4de05fd..cbd4381 100644 --- a/src/shared/struct/inventory/shr_equipment.erl +++ b/src/shared/struct/inventory/shr_equipment.erl @@ -69,6 +69,7 @@ ataxia_set_portrait/2, ataxia_set_glyph_board/2, ataxia_set_glyphs/2, + ataxia_set_glyphs/3, get_primary_weapon_id/1, get_secondary_weapon_id/1, @@ -83,13 +84,15 @@ set_portrait_id/2, set_glyph_board_id/2, set_glyph_ids/2, + set_glyph_ids/2, ataxia_set_primary_weapon_id/2, ataxia_set_secondary_weapon_id/2, ataxia_set_armor_id/2, ataxia_set_portrait_id/2, ataxia_set_glyph_board_id/2, - ataxia_set_glyph_ids/2 + ataxia_set_glyph_ids/2, + ataxia_set_glyph_ids/3 ] ). @@ -305,6 +308,29 @@ ataxia_set_glyphs (V, Eq) -> ) }. +-spec ataxia_set_glyphs + ( + list(shr_glyph:type()), + ataxic:basic(), + type() + ) + -> {type(), ataxic:basic()}; + ( + list(shr_glyph:type()), + ataxic:basic(), + unresolved() + ) + -> {unresolved(), ataxic:basic()}. +ataxia_set_glyphs (V, VUpdate, Eq) -> + { + set_glyphs(V, Eq), + ataxic:update_field + ( + get_glyphs_field(), + VUpdate + ) + }. + -spec set_primary_weapon_id (shr_weapon:id(), type()) -> type(); (shr_weapon:id(), unresolved()) -> unresolved(). @@ -431,6 +457,25 @@ ataxia_set_glyph_ids (V, Eq) -> ) }. +-spec ataxia_set_glyph_ids + ( + list(shr_glyph:id()), + ataxic:basic(), + type() + ) + -> {type(), ataxic:basic()}; + ( + list(shr_glyph:id()), + ataxic:basic(), + unresolved() + ) + -> {unresolved(), ataxic:basic()}. +ataxia_set_glyph_ids (V, VUpdate, Eq) -> + { + set_glyph_ids(V, Eq), + ataxic:update_field(get_glyphs_field(), VUpdate) + }. + -spec default () -> type(). default () -> #shr_eq diff --git a/src/shared/struct/shr_character.erl b/src/shared/struct/shr_character.erl index 133a6c2..09ad10b 100644 --- a/src/shared/struct/shr_character.erl +++ b/src/shared/struct/shr_character.erl @@ -56,6 +56,7 @@ ataxia_set_name/2, set_equipment/2, + ataxia_set_equipment/2, ataxia_set_equipment/3, set_extra_omnimods/2, @@ -139,6 +140,19 @@ set_equipment (EqRef, CharRef) when is_record(CharRef, shr_char_ref) -> CharRef#shr_char_ref{ equipment = EqRef }. -spec ataxia_set_equipment + (shr_equipment:type(), type()) -> {type(), ataxic:basic()}; + ( + shr_equipment:unresolved(), + unresolved() + ) + -> {unresolved(), ataxic:basic()}. +ataxia_set_equipment (Eq, Char) -> + { + set_equipment(Eq, Char), + ataxic:update_field(get_equipment_field(), ataxic:constant(Eq)) + }. + +-spec ataxia_set_equipment (shr_equipment:type(), ataxic:basic(), type()) -> {type(), ataxic:basic()}; ( shr_equipment:unresolved(), |