summaryrefslogtreecommitdiff |
diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/battle/src/Struct/Model.elm | 55 | ||||
-rw-r--r-- | src/shared/battle-map/BattleMap/Struct/Location.elm | 43 | ||||
-rw-r--r-- | src/shared/battle-map/BattleMap/Struct/Marker.elm | 5 |
3 files changed, 85 insertions, 18 deletions
diff --git a/src/battle/src/Struct/Model.elm b/src/battle/src/Struct/Model.elm index 01cf4fe..1d36d1f 100644 --- a/src/battle/src/Struct/Model.elm +++ b/src/battle/src/Struct/Model.elm @@ -36,6 +36,7 @@ import Struct.Flags import Battle.Struct.Omnimods -- Battle Characters ----------------------------------------------------------- +import BattleCharacters.Struct.Character import BattleCharacters.Struct.Armor import BattleCharacters.Struct.Portrait import BattleCharacters.Struct.Glyph @@ -101,7 +102,6 @@ type alias Type = battle_id : String, session_token : String, player_ix : Int, - player_characters_ix : (Set.Set Int), ui : Struct.UI.Type, char_turn : Struct.CharacterTurn.Type, timeline : (Array.Array Struct.TurnResult.Type) @@ -149,7 +149,6 @@ new flags = ), session_token = flags.token, player_ix = 0, - player_characters_ix = (Set.empty), ui = (Struct.UI.default), char_turn = (Struct.CharacterTurn.new), timeline = (Array.empty) @@ -169,21 +168,7 @@ new flags = add_character : Struct.Character.Type -> Type -> Type add_character char model = - {model | - characters = - (Array.push - char - model.characters - ), - player_characters_ix = - if ((Struct.Character.get_player_ix char) == model.player_ix) - then - (Set.insert - (Struct.Character.get_index char) - model.player_characters_ix - ) - else model.player_characters_ix - } + {model | characters = (Array.push char model.characters)} add_weapon : BattleCharacters.Struct.Weapon.Type -> Type -> Type add_weapon wp model = @@ -382,3 +367,39 @@ invalidate err model = clear_error : Type -> Type clear_error model = {model | error = Nothing} + +generate_danger_zone : Type -> (Set.Set BattleMap.Struct.Location.Ref) +generate_danger_zone model = + (Array.foldl + (\char danger_zone -> + let + char_weapon = + (BattleCharacters.Struct.Character.get_active_weapon + (Struct.Character.get_base_character char) + ) + in + if + ( + (Struct.Character.is_alive char) + && ((Struct.Character.get_player_ix char) /= model.player_ix) + && + ( + (BattleCharacters.Struct.Weapon.get_defense_range char_weapon) + == 0 + ) + ) + then + (BattleMap.Struct.Location.add_neighborhood_to_set + (BattleMap.Struct.Map.get_width model.map) + (BattleMap.Struct.Map.get_height model.map) + (BattleCharacters.Struct.Weapon.get_attack_range + char_weapon + ) + (Struct.Character.get_location char) + danger_zone + ) + else danger_zone + ) + (Set.empty) + model.characters + ) diff --git a/src/shared/battle-map/BattleMap/Struct/Location.elm b/src/shared/battle-map/BattleMap/Struct/Location.elm index da3b8ef..6b07e90 100644 --- a/src/shared/battle-map/BattleMap/Struct/Location.elm +++ b/src/shared/battle-map/BattleMap/Struct/Location.elm @@ -6,6 +6,8 @@ import Json.Decode.Pipeline import Json.Encode +import Set + -- Battle Map ------------------------------------------------------------------ import BattleMap.Struct.Direction @@ -98,4 +100,43 @@ get_full_neighborhood loc = {loc | x = (loc.x + 1), y = (loc.y + 1)} ] - +add_neighborhood_to_set : ( + Int -> + Int -> + Int -> + Type -> + (Set.Set Ref) -> + (Set.Set Ref) + ) +add_neighborhood_to_set map_width map_height tdist loc set = + (List.foldl + (\height_mod current_width_result -> + let + abs_width_mod = (abs (tdist - height_mod)) + current_height = (loc.y + height_mod) + in + if ((current_height < 0) || (current_height >= map_height)) + then current_width_result + else + (List.foldl + (\width_mod current_result -> + let new_location_x = (loc.x + width_mod) in + if + ( + (new_location_x < 0) + || (new_location_x >= map_width) + ) + then current_result + else + (Set.insert + (new_location_x, current_height) + current_result + ) + ) + current_width_result + (List.range (-abs_width_mod) abs_width_mod) + ) + ) + set + (List.range (-tdist) tdist) + ) diff --git a/src/shared/battle-map/BattleMap/Struct/Marker.elm b/src/shared/battle-map/BattleMap/Struct/Marker.elm index 21a1731..53204cb 100644 --- a/src/shared/battle-map/BattleMap/Struct/Marker.elm +++ b/src/shared/battle-map/BattleMap/Struct/Marker.elm @@ -1,9 +1,11 @@ module BattleMap.Struct.Marker exposing ( Type, + DataType, new, get_locations, set_locations, + get_data, is_in_locations, decoder, encode @@ -84,6 +86,9 @@ get_locations marker = marker.locations set_locations : (Set.Set BattleMap.Struct.Location.Ref) -> Type -> Type set_locations locations marker = {marker | locations = locations} +get_data : Type -> DataType +get_data marker = marker.data + is_in_locations : BattleMap.Struct.Location.Ref -> Type -> Bool is_in_locations loc_ref marker = (Set.member loc_ref marker.locations) |