summaryrefslogtreecommitdiff |
diff options
Diffstat (limited to 'src/shared/battle-map/BattleMap')
-rw-r--r-- | src/shared/battle-map/BattleMap/Struct/Marker.elm | 95 |
1 files changed, 74 insertions, 21 deletions
diff --git a/src/shared/battle-map/BattleMap/Struct/Marker.elm b/src/shared/battle-map/BattleMap/Struct/Marker.elm index 2493b5e..21a1731 100644 --- a/src/shared/battle-map/BattleMap/Struct/Marker.elm +++ b/src/shared/battle-map/BattleMap/Struct/Marker.elm @@ -21,25 +21,61 @@ import BattleMap.Struct.Location -------------------------------------------------------------------------------- -- TYPES ----------------------------------------------------------------------- -------------------------------------------------------------------------------- +type alias MeleeAttackZoneStruct = + { + character_ix : Int + } + +type alias SpawnZoneStruct = + { + player_ix : Int + } + +type DataType = + MeleeAttackZone MeleeAttackZoneStruct + | SpawnZone SpawnZoneStruct + | None + type alias Type = { - permissions : (Set.Set String), - locations : (Set.Set BattleMap.Struct.Location.Ref) + locations : (Set.Set BattleMap.Struct.Location.Ref), + data : DataType } -------------------------------------------------------------------------------- -- LOCAL ----------------------------------------------------------------------- -------------------------------------------------------------------------------- +decoder_internals : String -> (Json.Decode.Decoder DataType) +decoder_internals t = + case t of + "matk" -> + (Json.Decode.map + (\e -> (MeleeAttackZone e)) + (Json.Decode.map + MeleeAttackZoneStruct + (Json.Decode.field "cix" (Json.Decode.int)) + ) + ) + + "spawn" -> + (Json.Decode.map + (\e -> (SpawnZone e)) + (Json.Decode.map + SpawnZoneStruct + (Json.Decode.field "pix" (Json.Decode.int)) + ) + ) + + _ -> (Json.Decode.succeed None) -------------------------------------------------------------------------------- -- EXPORTED -------------------------------------------------------------------- -------------------------------------------------------------------------------- - new : Type new = { - permissions = (Set.empty), - locations = (Set.empty) + locations = (Set.empty), + data = None } get_locations : Type -> (Set.Set BattleMap.Struct.Location.Ref) @@ -49,21 +85,13 @@ set_locations : (Set.Set BattleMap.Struct.Location.Ref) -> Type -> Type set_locations locations marker = {marker | locations = locations} is_in_locations : BattleMap.Struct.Location.Ref -> Type -> Bool -is_in_locations loc_ref marker = - (Set.member loc_ref marker.locations) +is_in_locations loc_ref marker = (Set.member loc_ref marker.locations) decoder : (Json.Decode.Decoder Type) decoder = (Json.Decode.map2 Type (Json.Decode.field - "p" - (Json.Decode.map - (Set.fromList) - (Json.Decode.list (Json.Decode.string)) - ) - ) - (Json.Decode.field "l" (Json.Decode.map (Set.fromList) @@ -75,6 +103,10 @@ decoder = ) ) ) + (Json.Decode.andThen + (decoder_internals) + (Json.Decode.field "t" (Json.Decode.string)) + ) ) encode : Type -> Json.Encode.Value @@ -82,13 +114,6 @@ encode marker = (Json.Encode.object [ ( - "p", - (Json.Encode.list - (Json.Encode.string) - (Set.toList marker.permissions) - ) - ), - ( "l", (Json.Encode.list (\e -> @@ -98,6 +123,34 @@ encode marker = ) (Set.toList marker.locations) ) + ), + ( + "d", + ( + case marker.data of + SpawnZone zone -> + (Json.Encode.object + [ + ("t", (Json.Encode.string "spawn")), + ("pix", (Json.Encode.int zone.player_ix)) + ] + ) + + MeleeAttackZone zone -> + (Json.Encode.object + [ + ("t", (Json.Encode.string "matk")), + ("cix", (Json.Encode.int zone.character_ix)) + ] + ) + + None -> + (Json.Encode.object + [ + ("t", (Json.Encode.string "none")) + ] + ) + ) ) ] ) |