summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornsensfel <SpamShield0@noot-noot.org>2018-07-03 17:13:18 +0200
committernsensfel <SpamShield0@noot-noot.org>2018-07-03 17:13:18 +0200
commit2815ff9a8e7e4400cd07a5a33389542535a91def (patch)
tree398ae5fc6276818bd26df172ce39a275bf42343d
parentd9efd610e9d89e299792f53d46760dfbe0f0cde6 (diff)
Avoids issues with dirty character turn data.
-rw-r--r--src/battlemap/game-logic/bm_victory.erl37
-rw-r--r--src/battlemap/struct/bm_character_turn_data.erl15
2 files changed, 40 insertions, 12 deletions
diff --git a/src/battlemap/game-logic/bm_victory.erl b/src/battlemap/game-logic/bm_victory.erl
index 3531739..327920a 100644
--- a/src/battlemap/game-logic/bm_victory.erl
+++ b/src/battlemap/game-logic/bm_victory.erl
@@ -112,18 +112,13 @@ handle_player_defeat (PlayerIX, Update) ->
S3Update.
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--spec handle_character_lost_health
+-spec actually_handle_character_lost_health
(
non_neg_integer(),
- integer(),
bm_character_turn_update:type()
)
-> bm_character_turn_update:type().
-handle_character_lost_health (_, Health, Update) when (Health > 0) -> Update;
-handle_character_lost_health (CharIX, _Health, Update) ->
+actually_handle_character_lost_health (CharIX, Update) ->
Data = bm_character_turn_update:get_data(Update),
Battle = bm_character_turn_data:get_battle(Data),
Character = bm_battle:get_character(CharIX, Battle),
@@ -143,8 +138,6 @@ handle_character_lost_health (CharIX, _Health, Update) ->
and bm_character:get_is_alive(Char)
)
end,
- %% FIXME: Potential issue if it's the controlled player and Data
- %% is dirty.
Characters
),
@@ -167,8 +160,6 @@ handle_character_lost_health (CharIX, _Health, Update) ->
and (bm_character:get_rank(Char) == target)
)
end,
- %% FIXME: Potential issue if it's the controlled player and Data
- %% is dirty.
Characters
),
@@ -177,3 +168,27 @@ handle_character_lost_health (CharIX, _Health, Update) ->
_ -> handle_player_defeat(CharacterPlayerIX, Update)
end
end.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+-spec handle_character_lost_health
+ (
+ non_neg_integer(),
+ integer(),
+ bm_character_turn_update:type()
+ )
+ -> bm_character_turn_update:type().
+handle_character_lost_health (_, Health, Update) when (Health > 0) -> Update;
+handle_character_lost_health (CharIX, _Health, Update) ->
+ Data = bm_character_turn_update:get_data(Update),
+ S1Data = bm_character_turn_data:clean_battle(Data),
+ S1Update = bm_character_turn_update:set_data(S1Data, Update),
+
+ S2Update = actually_handle_character_lost_health(CharIX, S1Update),
+
+ S2Data = bm_character_turn_update:get_data(S2Update),
+ S3Data = bm_character_turn_data:refresh_character(S2Data),
+ S3Update = bm_character_turn_update:set_data(S3Data, S2Update),
+
+ S3Update.
diff --git a/src/battlemap/struct/bm_character_turn_data.erl b/src/battlemap/struct/bm_character_turn_data.erl
index aaf7426..65b650c 100644
--- a/src/battlemap/struct/bm_character_turn_data.erl
+++ b/src/battlemap/struct/bm_character_turn_data.erl
@@ -39,7 +39,8 @@
-export
(
[
- clean_battle/1
+ clean_battle/1,
+ refresh_character/1
]
).
@@ -100,3 +101,15 @@ clean_battle (Data) ->
)
}.
+-spec refresh_character (type()) -> type().
+refresh_character (Data) ->
+ Data#type
+ {
+ dirty = false,
+ character =
+ bm_battle:get_character
+ (
+ Data#type.character_ix,
+ Data#type.battle
+ )
+ }.