summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/battle/src/Comm/SetMap.elm')
-rw-r--r--src/battle/src/Comm/SetMap.elm62
1 files changed, 62 insertions, 0 deletions
diff --git a/src/battle/src/Comm/SetMap.elm b/src/battle/src/Comm/SetMap.elm
new file mode 100644
index 0000000..7bfd56f
--- /dev/null
+++ b/src/battle/src/Comm/SetMap.elm
@@ -0,0 +1,62 @@
+module Comm.SetMap exposing (decode)
+
+-- Elm -------------------------------------------------------------------------
+import Json.Decode
+
+-- Map -------------------------------------------------------------------
+import Struct.Map
+import Struct.ServerReply
+import Struct.Tile
+
+--------------------------------------------------------------------------------
+-- TYPES -----------------------------------------------------------------------
+--------------------------------------------------------------------------------
+type alias MapData =
+ {
+ w : Int,
+ h : Int,
+ t : (List Int)
+ }
+
+--------------------------------------------------------------------------------
+-- LOCAL -----------------------------------------------------------------------
+--------------------------------------------------------------------------------
+deserialize_tile_instance : Int -> Int -> Int -> Struct.Tile.Instance
+deserialize_tile_instance map_width index id =
+ (Struct.Tile.new_instance
+ (index % map_width)
+ (index // map_width)
+ id
+ -1
+ -1
+ )
+
+internal_decoder : MapData -> Struct.ServerReply.Type
+internal_decoder map_data =
+ (Struct.ServerReply.SetMap
+ (Struct.Map.new
+ map_data.w
+ map_data.h
+ (List.indexedMap
+ (deserialize_tile_instance map_data.w)
+ map_data.t
+ )
+ )
+ )
+
+--------------------------------------------------------------------------------
+-- EXPORTED --------------------------------------------------------------------
+--------------------------------------------------------------------------------
+decode : (Json.Decode.Decoder Struct.ServerReply.Type)
+decode =
+ (Json.Decode.map
+ internal_decoder
+ (Json.Decode.map3 MapData
+ (Json.Decode.field "w" Json.Decode.int)
+ (Json.Decode.field "h" Json.Decode.int)
+ (Json.Decode.field
+ "t"
+ (Json.Decode.list Json.Decode.int)
+ )
+ )
+ )