From 7b7c639047ea3ad4c755f745cb89f9ef7e04b755 Mon Sep 17 00:00:00 2001 From: nsensfel Date: Mon, 11 Feb 2019 16:44:57 +0100 Subject: Keeps track of who the players are. --- src/battle/src/Comm/AddPlayer.elm | 24 ++++++++++ src/battle/src/Comm/Send.elm | 2 + src/battle/src/Struct/Model.elm | 15 ++++++ src/battle/src/Struct/Player.elm | 72 +++++++++++++++++++++++++++++ src/battle/src/Struct/ServerReply.elm | 2 + src/battle/src/Update/HandleServerReply.elm | 13 ++++++ 6 files changed, 128 insertions(+) create mode 100644 src/battle/src/Comm/AddPlayer.elm create mode 100644 src/battle/src/Struct/Player.elm diff --git a/src/battle/src/Comm/AddPlayer.elm b/src/battle/src/Comm/AddPlayer.elm new file mode 100644 index 0000000..b902825 --- /dev/null +++ b/src/battle/src/Comm/AddPlayer.elm @@ -0,0 +1,24 @@ +module Comm.AddPlayer exposing (decode) + +-- Elm ------------------------------------------------------------------------- +import Json.Decode + +-- Battle ---------------------------------------------------------------------- +import Struct.Player +import Struct.ServerReply + +-------------------------------------------------------------------------------- +-- TYPES ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- +internal_decoder : Struct.Player.Type -> Struct.ServerReply.Type +internal_decoder pl = (Struct.ServerReply.AddPlayer pl) + +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- +decode : (Json.Decode.Decoder Struct.ServerReply.Type) +decode = (Json.Decode.map (internal_decoder) (Struct.Player.decoder)) diff --git a/src/battle/src/Comm/Send.elm b/src/battle/src/Comm/Send.elm index ae648cb..68dda5d 100644 --- a/src/battle/src/Comm/Send.elm +++ b/src/battle/src/Comm/Send.elm @@ -9,6 +9,7 @@ import Json.Encode -- Battle ---------------------------------------------------------------------- import Comm.AddArmor import Comm.AddPortrait +import Comm.AddPlayer import Comm.AddChar import Comm.AddTile import Comm.AddWeapon @@ -34,6 +35,7 @@ internal_decoder reply_type = "add_armor" -> (Comm.AddArmor.decode) "add_char" -> (Comm.AddChar.decode) "add_portrait" -> (Comm.AddPortrait.decode) + "add_player" -> (Comm.AddPlayer.decode) "add_weapon" -> (Comm.AddWeapon.decode) "set_map" -> (Comm.SetMap.decode) "turn_results" -> (Comm.TurnResults.decode) diff --git a/src/battle/src/Struct/Model.elm b/src/battle/src/Struct/Model.elm index 0512249..278c900 100644 --- a/src/battle/src/Struct/Model.elm +++ b/src/battle/src/Struct/Model.elm @@ -8,6 +8,7 @@ module Struct.Model exposing add_weapon, add_armor, add_portrait, + add_player, add_tile, invalidate, initialize_animator, @@ -40,6 +41,7 @@ import Struct.Portrait import Struct.Tile import Struct.TurnResult import Struct.TurnResultAnimator +import Struct.Player import Struct.UI import Struct.Weapon @@ -59,6 +61,7 @@ type alias Type = armors: (Dict.Dict Struct.Armor.Ref Struct.Armor.Type), portraits: (Dict.Dict Struct.Portrait.Ref Struct.Portrait.Type), tiles: (Dict.Dict Struct.Tile.Ref Struct.Tile.Type), + players: (Dict.Dict Struct.Player.Ref Struct.Player.Type), error: (Maybe Struct.Error.Type), player_id: String, battle_id: String, @@ -95,6 +98,7 @@ new flags = armors = (Dict.empty), portraits = (Dict.empty), tiles = (Dict.empty), + players = (Dict.empty), error = Nothing, battle_id = "", player_id = @@ -165,6 +169,17 @@ add_portrait pt model = ) } +add_player : Struct.Player.Type -> Type -> Type +add_player pl model = + {model | + players = + (Dict.insert + (Struct.Player.get_index pl) + pl + model.players + ) + } + add_tile : Struct.Tile.Type -> Type -> Type add_tile tl model = {model | diff --git a/src/battle/src/Struct/Player.elm b/src/battle/src/Struct/Player.elm new file mode 100644 index 0000000..ee14ebe --- /dev/null +++ b/src/battle/src/Struct/Player.elm @@ -0,0 +1,72 @@ +module Struct.Player exposing + ( + Type, + Ref, + get_id, + get_index, + get_incarnation_index, + get_luck, + set_luck, + decoder, + none + ) + +-- Elm ------------------------------------------------------------------------- +import Json.Decode +import Json.Decode.Pipeline + +-- Battle ---------------------------------------------------------------------- + +-------------------------------------------------------------------------------- +-- TYPES ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- +type alias Ref = Int + +type alias Type = + { + id : String, + ix : Int, + incarnation_ix : Int, + luck : Int + } + +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- +get_id : Type -> String +get_id pl = pl.id + +get_index : Type -> Int +get_index pl = pl.ix + +get_incarnation_index : Type -> Int +get_incarnation_index pl = pl.incarnation_ix + +get_luck : Type -> Int +get_luck pl = pl.luck + +set_luck : Int -> Type -> Type +set_luck luck pl = {pl | luck = luck} + +decoder : (Json.Decode.Decoder Type) +decoder = + (Json.Decode.succeed + Type + |> (Json.Decode.Pipeline.required "id" Json.Decode.string) + |> (Json.Decode.Pipeline.required "ix" Json.Decode.int) + |> (Json.Decode.Pipeline.required "iix" Json.Decode.int) + |> (Json.Decode.Pipeline.required "luk" Json.Decode.int) + ) + +none : Type +none = + { + id = "", + ix = -1, + incarnation_ix = -1, + luck = 0 + } diff --git a/src/battle/src/Struct/ServerReply.elm b/src/battle/src/Struct/ServerReply.elm index 59531aa..b26a579 100644 --- a/src/battle/src/Struct/ServerReply.elm +++ b/src/battle/src/Struct/ServerReply.elm @@ -5,6 +5,7 @@ module Struct.ServerReply exposing (Type(..)) -- Battle ---------------------------------------------------------------------- import Struct.Armor import Struct.Portrait +import Struct.Player import Struct.Map import Struct.Character import Struct.Tile @@ -20,6 +21,7 @@ type Type = | Disconnected | AddArmor Struct.Armor.Type | AddPortrait Struct.Portrait.Type + | AddPlayer Struct.Player.Type | AddWeapon Struct.Weapon.Type | AddCharacter Struct.Character.TypeAndEquipmentRef | AddTile Struct.Tile.Type diff --git a/src/battle/src/Update/HandleServerReply.elm b/src/battle/src/Update/HandleServerReply.elm index 503831d..6bdc0bc 100644 --- a/src/battle/src/Update/HandleServerReply.elm +++ b/src/battle/src/Update/HandleServerReply.elm @@ -24,6 +24,7 @@ import Util.Http import Constants.IO import Struct.Armor +import Struct.Player import Struct.Character import Struct.Error import Struct.Event @@ -129,6 +130,15 @@ add_weapon wp current_state = let (model, cmds) = current_state in ((Struct.Model.add_weapon wp model), cmds) +add_player : ( + Struct.Player.Type -> + (Struct.Model.Type, (List (Cmd Struct.Event.Type))) -> + (Struct.Model.Type, (List (Cmd Struct.Event.Type))) + ) +add_player pl current_state = + let (model, cmds) = current_state in + ((Struct.Model.add_player pl model), cmds) + add_character : ( Struct.Character.TypeAndEquipmentRef -> (Struct.Model.Type, (List (Cmd Struct.Event.Type))) -> @@ -232,6 +242,9 @@ apply_command command current_state = (Struct.ServerReply.AddPortrait pt) -> (add_portrait pt current_state) + (Struct.ServerReply.AddPlayer pl) -> + (add_player pl current_state) + (Struct.ServerReply.AddTile tl) -> (add_tile tl current_state) -- cgit v1.2.3-70-g09d2