summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/battle')
-rw-r--r--src/battle/src/Constants/DisplayEffects.elm3
-rw-r--r--src/battle/src/Struct/Character.elm11
-rw-r--r--src/battle/src/Struct/CharacterTurn.elm11
-rw-r--r--src/battle/src/Update/CharacterTurn/AbortTurn.elm106
-rw-r--r--src/battle/src/Update/CharacterTurn/EndTurn.elm29
-rw-r--r--src/battle/src/Update/CharacterTurn/ToggleTarget.elm18
6 files changed, 146 insertions, 32 deletions
diff --git a/src/battle/src/Constants/DisplayEffects.elm b/src/battle/src/Constants/DisplayEffects.elm
index 8846dbf..da9db9a 100644
--- a/src/battle/src/Constants/DisplayEffects.elm
+++ b/src/battle/src/Constants/DisplayEffects.elm
@@ -8,3 +8,6 @@ enabled_character = "enabled"
target_character : String
target_character = "target"
+
+target_tile : String
+target_tile = "target"
diff --git a/src/battle/src/Struct/Character.elm b/src/battle/src/Struct/Character.elm
index 37fe798..df78ff3 100644
--- a/src/battle/src/Struct/Character.elm
+++ b/src/battle/src/Struct/Character.elm
@@ -22,6 +22,7 @@ module Struct.Character exposing
get_melee_attack_range,
refresh_omnimods,
add_extra_display_effect,
+ toggle_extra_display_effect,
remove_extra_display_effect,
get_extra_display_effects,
get_extra_display_effects_list,
@@ -36,6 +37,9 @@ import Set
import Json.Decode
import Json.Decode.Pipeline
+-- Shared ----------------------------------------------------------------------
+import Shared.Util.Set
+
-- Battle ----------------------------------------------------------------------
import Battle.Struct.Omnimods
import Battle.Struct.Attributes
@@ -243,6 +247,13 @@ add_extra_display_effect effect_name char =
(Set.insert effect_name char.extra_display_effects)
}
+toggle_extra_display_effect : String -> Type -> Type
+toggle_extra_display_effect effect_name tile =
+ {tile |
+ extra_display_effects =
+ (Shared.Util.Set.toggle effect_name tile.extra_display_effects)
+ }
+
remove_extra_display_effect : String -> Type -> Type
remove_extra_display_effect effect_name char =
{char |
diff --git a/src/battle/src/Struct/CharacterTurn.elm b/src/battle/src/Struct/CharacterTurn.elm
index 422c33c..decdab1 100644
--- a/src/battle/src/Struct/CharacterTurn.elm
+++ b/src/battle/src/Struct/CharacterTurn.elm
@@ -52,6 +52,9 @@ import Json.Encode
import Set
+-- Shared ----------------------------------------------------------------------
+import Shared.Util.Set
+
-- Battle ----------------------------------------------------------------------
import Battle.Struct.Omnimods
@@ -204,9 +207,7 @@ remove_target_index ix ct = {ct | targets = (Set.remove ix ct.targets)}
toggle_target_index : Int -> Type -> Type
toggle_target_index ix ct =
- if (Set.member ix ct.targets)
- then (remove_target_index ix ct)
- else (add_target_index ix ct)
+ {ct | targets = (Shared.Util.Set.toggle ix ct.targets)}
get_target_indices : Type -> (Set.Set Int)
get_target_indices ct = ct.targets
@@ -226,9 +227,7 @@ remove_location ix ct = {ct | locations = (Set.remove ix ct.locations)}
toggle_location : BattleMap.Struct.Location.Ref -> Type -> Type
toggle_location ix ct =
- if (Set.member ix ct.locations)
- then (remove_location ix ct)
- else (add_location ix ct)
+ {ct | locations = (Shared.Util.Set.toggle ix ct.locations)}
get_locations : Type -> (Set.Set BattleMap.Struct.Location.Ref)
get_locations ct = ct.locations
diff --git a/src/battle/src/Update/CharacterTurn/AbortTurn.elm b/src/battle/src/Update/CharacterTurn/AbortTurn.elm
index 01dfd3e..fbcbfc2 100644
--- a/src/battle/src/Update/CharacterTurn/AbortTurn.elm
+++ b/src/battle/src/Update/CharacterTurn/AbortTurn.elm
@@ -1,4 +1,12 @@
-module Update.CharacterTurn.AbortTurn exposing (apply_to)
+module Update.CharacterTurn.AbortTurn exposing (apply_to, no_command_apply_to)
+
+-- Elm -------------------------------------------------------------------------
+import Set
+
+-- Battle Map ------------------------------------------------------------------
+import BattleMap.Struct.Location
+import BattleMap.Struct.Map
+import BattleMap.Struct.TileInstance
-- Local Module ----------------------------------------------------------------
import Constants.DisplayEffects
@@ -12,28 +20,92 @@ import Struct.Model
--------------------------------------------------------------------------------
-- LOCAL -----------------------------------------------------------------------
--------------------------------------------------------------------------------
+remove_active_character_effects : (
+ Struct.CharacterTurn.Type ->
+ Struct.Battle.Type ->
+ Struct.Battle.Type
+ )
+remove_active_character_effects char_turn battle =
+ case (Struct.CharacterTurn.maybe_get_active_character char_turn) of
+ Nothing -> battle
+ (Just char) ->
+ (Struct.Battle.update_character
+ (Struct.Character.get_index char)
+ (Struct.Character.remove_extra_display_effect
+ Constants.DisplayEffects.active_character
+ )
+ battle
+ )
+
+remove_target_effects : (
+ Struct.CharacterTurn.Type ->
+ Struct.Battle.Type ->
+ Struct.Battle.Type
+ )
+remove_target_effects char_turn battle =
+ (Set.foldl
+ (
+ \target_index current_battle ->
+ (Struct.Battle.update_character
+ target_index
+ (Struct.Character.remove_extra_display_effect
+ Constants.DisplayEffects.target_character
+ )
+ current_battle
+ )
+ )
+ battle
+ (Struct.CharacterTurn.get_target_indices char_turn)
+ )
+
+
+remove_location_effects : (
+ Struct.CharacterTurn.Type ->
+ Struct.Battle.Type ->
+ Struct.Battle.Type
+ )
+remove_location_effects char_turn battle =
+ (Struct.Battle.set_map
+ (Set.foldl
+ (
+ \location_ref current_map ->
+ (BattleMap.Struct.Map.update_tile_at
+ (BattleMap.Struct.Location.from_ref location_ref)
+ (BattleMap.Struct.TileInstance.remove_extra_display_effect
+ Constants.DisplayEffects.target_tile
+ )
+ current_map
+ )
+ )
+ (Struct.Battle.get_map battle)
+ (Struct.CharacterTurn.get_locations char_turn)
+ )
+ battle
+ )
--------------------------------------------------------------------------------
-- EXPORTED --------------------------------------------------------------------
--------------------------------------------------------------------------------
+no_command_apply_to : Struct.Model.Type -> Struct.Model.Type
+no_command_apply_to model =
+ {model |
+ char_turn = (Struct.CharacterTurn.new),
+ battle =
+ (remove_target_effects
+ model.char_turn
+ (remove_location_effects
+ model.char_turn
+ (remove_active_character_effects
+ model.char_turn
+ model.battle
+ )
+ )
+ )
+ }
+
apply_to : Struct.Model.Type -> (Struct.Model.Type, (Cmd Struct.Event.Type))
apply_to model =
(
- {model |
- char_turn = (Struct.CharacterTurn.new),
- battle =
- case
- (Struct.CharacterTurn.maybe_get_active_character model.char_turn)
- of
- Nothing -> model.battle
- (Just char) ->
- (Struct.Battle.update_character
- (Struct.Character.get_index char)
- (Struct.Character.remove_extra_display_effect
- Constants.DisplayEffects.active_character
- )
- model.battle
- )
- },
+ (no_command_apply_to model),
Cmd.none
)
diff --git a/src/battle/src/Update/CharacterTurn/EndTurn.elm b/src/battle/src/Update/CharacterTurn/EndTurn.elm
index 353a685..c2348ec 100644
--- a/src/battle/src/Update/CharacterTurn/EndTurn.elm
+++ b/src/battle/src/Update/CharacterTurn/EndTurn.elm
@@ -3,6 +3,8 @@ module Update.CharacterTurn.EndTurn exposing (apply_to)
-- Local Module ----------------------------------------------------------------
import Comm.CharacterTurn
+import Constants.DisplayEffects
+
import Struct.Battle
import Struct.Character
import Struct.CharacterTurn
@@ -11,6 +13,8 @@ import Struct.Event
import Struct.Model
import Struct.Navigator
+import Update.CharacterTurn.AbortTurn
+
--------------------------------------------------------------------------------
-- LOCAL -----------------------------------------------------------------------
--------------------------------------------------------------------------------
@@ -30,14 +34,21 @@ apply_to model =
(_, Nothing) -> (model, Cmd.none)
((Just char), (Just cmd)) ->
(
- {model |
- battle =
- (Struct.Battle.update_character
- (Struct.Character.get_index char)
- (Struct.Character.set_enabled False)
- model.battle
- ),
- char_turn = (Struct.CharacterTurn.new)
- },
+ (Update.CharacterTurn.AbortTurn.no_command_apply_to
+ {model |
+ battle =
+ (Struct.Battle.update_character
+ (Struct.Character.get_index char)
+ (
+ (Struct.Character.remove_extra_display_effect
+ Constants.DisplayEffects.enabled_character
+ )
+ >>
+ (Struct.Character.set_enabled False)
+ )
+ model.battle
+ )
+ }
+ ),
cmd
)
diff --git a/src/battle/src/Update/CharacterTurn/ToggleTarget.elm b/src/battle/src/Update/CharacterTurn/ToggleTarget.elm
index 7b5a9a9..1fb69da 100644
--- a/src/battle/src/Update/CharacterTurn/ToggleTarget.elm
+++ b/src/battle/src/Update/CharacterTurn/ToggleTarget.elm
@@ -4,6 +4,8 @@ module Update.CharacterTurn.ToggleTarget exposing (apply_to, apply_to_ref)
import BattleMap.Struct.Location
-- Local Module ----------------------------------------------------------------
+import Constants.DisplayEffects
+
import Struct.Battle
import Struct.Character
import Struct.CharacterTurn
@@ -59,6 +61,14 @@ toggle_attack_character model target_char_id =
target_char_id
model.char_turn
),
+ battle =
+ (Struct.Battle.update_character
+ target_char_id
+ (Struct.Character.toggle_extra_display_effect
+ Constants.DisplayEffects.target_character
+ )
+ model.battle
+ ),
ui =
(Struct.UI.reset_displayed_nav
(Struct.UI.reset_displayed_tab
@@ -79,6 +89,14 @@ undo_attack_character model target_char_id =
target_char_id
model.char_turn
),
+ battle =
+ (Struct.Battle.update_character
+ target_char_id
+ (Struct.Character.remove_extra_display_effect
+ Constants.DisplayEffects.target_character
+ )
+ model.battle
+ ),
ui =
(Struct.UI.reset_displayed_nav
(Struct.UI.reset_displayed_tab