summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornsensfel <SpamShield0@noot-noot.org>2019-04-23 18:26:09 +0200
committernsensfel <SpamShield0@noot-noot.org>2019-04-23 18:26:09 +0200
commite39c44eabaea7bafa58aa85593b80a6c55f907a3 (patch)
treea358e52c72285351fd099e512176048818df1f4f
parent459a954c58e1bf9cb7359b617713f2057ceb024f (diff)
...
-rw-r--r--src/battle/struct/btl_battle.erl300
-rw-r--r--src/battle/struct/btl_player.erl63
-rw-r--r--src/battle/struct/btl_player_turn.erl17
-rw-r--r--src/shared/struct/inventory/shr_equipment.erl47
-rw-r--r--src/shared/struct/shr_character.erl14
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(),