summaryrefslogtreecommitdiff |
diff options
Diffstat (limited to 'src/battlemap/src/Send/AddChar.elm')
-rw-r--r-- | src/battlemap/src/Send/AddChar.elm | 139 |
1 files changed, 139 insertions, 0 deletions
diff --git a/src/battlemap/src/Send/AddChar.elm b/src/battlemap/src/Send/AddChar.elm new file mode 100644 index 0000000..762d859 --- /dev/null +++ b/src/battlemap/src/Send/AddChar.elm @@ -0,0 +1,139 @@ +module Send.AddChar exposing (decode) + +-- Elm ------------------------------------------------------------------------- +import Dict + +import Json.Decode +import Json.Decode.Pipeline + +-- Battlemap ------------------------------------------------------------------- +import Data.Weapons + +import Struct.Attributes +import Struct.Character +import Struct.Error +import Struct.Model +import Struct.ServerReply +import Struct.WeaponSet + +-------------------------------------------------------------------------------- +-- TYPES ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- +type alias CharAtt = + { + con : Int, + dex : Int, + int : Int, + min : Int, + spe : Int, + str : Int + } + +type alias Location = + { + x : Int, + y : Int + } + +type alias CharData = + { + ix : Int, + nam : String, + ico : String, + prt : String, + lc : Location, + hea : Int, + pla : String, + ena : Bool, + att : CharAtt, + awp : Int, + swp : Int + } + +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- +attributes_decoder : (Json.Decode.Decoder CharAtt) +attributes_decoder = + (Json.Decode.Pipeline.decode + CharAtt + |> (Json.Decode.Pipeline.required "con" Json.Decode.int) + |> (Json.Decode.Pipeline.required "dex" Json.Decode.int) + |> (Json.Decode.Pipeline.required "int" Json.Decode.int) + |> (Json.Decode.Pipeline.required "min" Json.Decode.int) + |> (Json.Decode.Pipeline.required "spe" Json.Decode.int) + |> (Json.Decode.Pipeline.required "str" Json.Decode.int) + ) + +location_decoder : (Json.Decode.Decoder Location) +location_decoder = + (Json.Decode.Pipeline.decode + Location + |> (Json.Decode.Pipeline.required "x" Json.Decode.int) + |> (Json.Decode.Pipeline.required "y" Json.Decode.int) + ) + +char_decoder : (Json.Decode.Decoder CharData) +char_decoder = + (Json.Decode.Pipeline.decode + CharData + |> (Json.Decode.Pipeline.required "ix" Json.Decode.int) + |> (Json.Decode.Pipeline.required "nam" Json.Decode.string) + |> (Json.Decode.Pipeline.required "ico" Json.Decode.string) + |> (Json.Decode.Pipeline.required "prt" Json.Decode.string) + |> (Json.Decode.Pipeline.required "lc" location_decoder) + |> (Json.Decode.Pipeline.required "hea" Json.Decode.int) + |> (Json.Decode.Pipeline.required "pla" Json.Decode.string) + |> (Json.Decode.Pipeline.required "ena" Json.Decode.bool) + |> (Json.Decode.Pipeline.required "att" attributes_decoder) + |> (Json.Decode.Pipeline.required "awp" Json.Decode.int) + |> (Json.Decode.Pipeline.required "swp" Json.Decode.int) + ) + +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- +decode : (Struct.Model.Struct -> (Json.Decode.Decoder Struct.ServerReply.Type)) +decode model input = + case (Json.Decode.decodeString char_decoder input) of + (Result.Ok char_data) -> + (Result.Ok + (Struct.ServerReply.AddCharacter + (Struct.Character.new + (toString char_data.ix) + char_data.nam + char_data.ico + char_data.prt + {x = char_data.lc.x, y = char_data.lc.y} + char_data.hea + char_data.pla + char_data.ena + (Struct.Attributes.new + char_data.att.con + char_data.att.dex + char_data.att.int + char_data.att.min + char_data.att.spe + char_data.att.str + ) + ( + case + ( + (Dict.get char_data.awp model.weapons), + (Dict.get char_data.swp model.weapons) + ) + of + ((Just wp_0), (Just wp_1)) -> + (Struct.WeaponSet.new wp_0 wp_1) + + _ -> + (Struct.WeaponSet.new + (Data.Weapons.none) + (Data.Weapons.none) + ) + ) + ) + ) + ) + + other -> other |