summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornsensfel <SpamShield0@noot-noot.org>2019-02-11 16:44:57 +0100
committernsensfel <SpamShield0@noot-noot.org>2019-02-11 16:44:57 +0100
commit7b7c639047ea3ad4c755f745cb89f9ef7e04b755 (patch)
treee3d241c8ae344030f1986554838c215f58780ee0
parent582266b5179833a2f58f215831523556cf8b855b (diff)
Keeps track of who the players are.
-rw-r--r--src/battle/src/Comm/AddPlayer.elm24
-rw-r--r--src/battle/src/Comm/Send.elm2
-rw-r--r--src/battle/src/Struct/Model.elm15
-rw-r--r--src/battle/src/Struct/Player.elm72
-rw-r--r--src/battle/src/Struct/ServerReply.elm2
-rw-r--r--src/battle/src/Update/HandleServerReply.elm13
6 files changed, 128 insertions, 0 deletions
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)