summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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
-rw-r--r--src/shared/battle-map/BattleMap/Struct/Map.elm27
-rw-r--r--src/shared/battle-map/BattleMap/Struct/TileInstance.elm42
8 files changed, 214 insertions, 33 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
diff --git a/src/shared/battle-map/BattleMap/Struct/Map.elm b/src/shared/battle-map/BattleMap/Struct/Map.elm
index ed6c587..7b31947 100644
--- a/src/shared/battle-map/BattleMap/Struct/Map.elm
+++ b/src/shared/battle-map/BattleMap/Struct/Map.elm
@@ -15,6 +15,7 @@ module BattleMap.Struct.Map exposing
get_width,
new,
set_tile_to,
+ update_tile_at,
solve_tiles,
maybe_get_tile_at
)
@@ -136,12 +137,36 @@ add_marker marker_name marker map =
)
}
-set_tile_to : BattleMap.Struct.Location.Type -> BattleMap.Struct.TileInstance.Type -> Type -> Type
+set_tile_to : (
+ BattleMap.Struct.Location.Type ->
+ BattleMap.Struct.TileInstance.Type ->
+ Type ->
+ Type
+ )
set_tile_to loc tile_inst map =
{map |
content = (Array.set (location_to_index loc map) tile_inst map.content)
}
+update_tile_at : (
+ BattleMap.Struct.Location.Type ->
+ (
+ BattleMap.Struct.TileInstance.Type ->
+ BattleMap.Struct.TileInstance.Type
+ ) ->
+ Type ->
+ Type
+ )
+update_tile_at loc fun map =
+ {map |
+ content =
+ (Shared.Util.Array.update
+ (location_to_index loc map)
+ (fun)
+ map.content
+ )
+ }
+
empty : Type
empty =
{
diff --git a/src/shared/battle-map/BattleMap/Struct/TileInstance.elm b/src/shared/battle-map/BattleMap/Struct/TileInstance.elm
index 91e3bf5..8ffeafc 100644
--- a/src/shared/battle-map/BattleMap/Struct/TileInstance.elm
+++ b/src/shared/battle-map/BattleMap/Struct/TileInstance.elm
@@ -24,6 +24,11 @@ module BattleMap.Struct.TileInstance exposing
error,
solve,
set_location_from_index,
+ add_extra_display_effect,
+ remove_extra_display_effect,
+ get_extra_display_effects,
+ get_extra_display_effects_list,
+ reset_extra_display_effects,
decoder,
encode
)
@@ -38,6 +43,9 @@ import Json.Encode
import Json.Decode
import Json.Decode.Pipeline
+-- Shared ----------------------------------------------------------------------
+import Shared.Util.Set
+
-- Battle Map ------------------------------------------------------------------
import BattleMap.Struct.DataSet
import BattleMap.Struct.Tile
@@ -58,6 +66,7 @@ type alias Type =
class_id : BattleMap.Struct.Tile.Ref,
variant_id : BattleMap.Struct.Tile.VariantID,
tags : (Set.Set String),
+ extra_display_effects : (Set.Set String),
borders : (List Border)
}
@@ -100,6 +109,7 @@ default tile =
crossing_cost = (BattleMap.Struct.Tile.get_cost tile),
family = (BattleMap.Struct.Tile.get_family tile),
tags = (Set.empty),
+ extra_display_effects = (Set.empty),
borders = []
}
@@ -112,6 +122,7 @@ error x y =
family = "0",
crossing_cost = Constants.Movement.cost_when_out_of_bounds,
tags = (Set.empty),
+ extra_display_effects = (Set.empty),
borders = []
}
@@ -186,6 +197,7 @@ decoder =
|> (Json.Decode.Pipeline.hardcoded tile_id)
|> (Json.Decode.Pipeline.hardcoded variant_id)
|> (Json.Decode.Pipeline.hardcoded (Set.empty)) -- tags
+ |> (Json.Decode.Pipeline.hardcoded (Set.empty)) -- display_effects
|>
(Json.Decode.Pipeline.hardcoded
(list_to_borders borders [])
@@ -260,3 +272,33 @@ remove_tag tag tile_inst =
{tile_inst |
tags = (Set.remove tag tile_inst.tags)
}
+
+add_extra_display_effect : String -> Type -> Type
+add_extra_display_effect effect_name tile =
+ {tile |
+ extra_display_effects =
+ (Set.insert effect_name tile.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 tile =
+ {tile |
+ extra_display_effects =
+ (Set.remove effect_name tile.extra_display_effects)
+ }
+
+get_extra_display_effects : Type -> (Set.Set String)
+get_extra_display_effects tile = tile.extra_display_effects
+
+get_extra_display_effects_list : Type -> (List String)
+get_extra_display_effects_list tile = (Set.toList tile.extra_display_effects)
+
+reset_extra_display_effects : Type -> Type
+reset_extra_display_effects tile = {tile | extra_display_effects = (Set.empty)}