From ee08423dd686d707d3c5759804fab2ecadbddbb1 Mon Sep 17 00:00:00 2001 From: nsensfel Date: Fri, 8 Jun 2018 11:22:23 +0200 Subject: Fixes {armor,weapon} not being loaded before use. --- src/battlemap/src/Comm/AddChar.elm | 24 ++------ src/battlemap/src/Comm/AddWeapon.elm | 2 +- src/battlemap/src/Comm/Send.elm | 4 ++ src/battlemap/src/Struct/Armor.elm | 2 +- src/battlemap/src/Struct/Character.elm | 76 ++++++++++++++------------ src/battlemap/src/Struct/ServerReply.elm | 2 +- src/battlemap/src/Struct/Weapon.elm | 2 +- src/battlemap/src/Update/HandleServerReply.elm | 49 ++++++++++++++--- 8 files changed, 96 insertions(+), 65 deletions(-) diff --git a/src/battlemap/src/Comm/AddChar.elm b/src/battlemap/src/Comm/AddChar.elm index 475600e..1b5cacd 100644 --- a/src/battlemap/src/Comm/AddChar.elm +++ b/src/battlemap/src/Comm/AddChar.elm @@ -1,16 +1,12 @@ module Comm.AddChar exposing (decode) -- Elm ------------------------------------------------------------------------- -import Dict - import Json.Decode -- Battlemap ------------------------------------------------------------------- -import Struct.Armor import Struct.Character import Struct.Model import Struct.ServerReply -import Struct.Weapon -------------------------------------------------------------------------------- -- TYPES ----------------------------------------------------------------------- @@ -19,20 +15,12 @@ import Struct.Weapon -------------------------------------------------------------------------------- -- LOCAL ----------------------------------------------------------------------- -------------------------------------------------------------------------------- -weapon_getter : Struct.Model.Type -> Struct.Weapon.Ref -> Struct.Weapon.Type -weapon_getter model ref = - case (Dict.get ref model.weapons) of - (Just w) -> w - Nothing -> Struct.Weapon.none - -armor_getter : Struct.Model.Type -> Struct.Armor.Ref -> Struct.Armor.Type -armor_getter model ref = - case (Dict.get ref model.armors) of - (Just w) -> w - Nothing -> Struct.Armor.none -internal_decoder : Struct.Character.Type -> Struct.ServerReply.Type -internal_decoder char = (Struct.ServerReply.AddCharacter char) +internal_decoder : ( + (Struct.Character.Type, Int, Int, Int) -> + Struct.ServerReply.Type + ) +internal_decoder char_and_refs = (Struct.ServerReply.AddCharacter char_and_refs) -------------------------------------------------------------------------------- -- EXPORTED -------------------------------------------------------------------- @@ -41,5 +29,5 @@ decode : (Struct.Model.Type -> (Json.Decode.Decoder Struct.ServerReply.Type)) decode model = (Json.Decode.map (internal_decoder) - (Struct.Character.decoder (weapon_getter model) (armor_getter model)) + (Struct.Character.decoder) ) diff --git a/src/battlemap/src/Comm/AddWeapon.elm b/src/battlemap/src/Comm/AddWeapon.elm index 4c74111..3a5c1f1 100644 --- a/src/battlemap/src/Comm/AddWeapon.elm +++ b/src/battlemap/src/Comm/AddWeapon.elm @@ -15,7 +15,7 @@ import Struct.ServerReply -------------------------------------------------------------------------------- -- LOCAL ----------------------------------------------------------------------- -------------------------------------------------------------------------------- -internal_decoder : Struct.Armor.Type -> Struct.ServerReply.Type +internal_decoder : Struct.Weapon.Type -> Struct.ServerReply.Type internal_decoder wp = (Struct.ServerReply.AddWeapon wp) -------------------------------------------------------------------------------- diff --git a/src/battlemap/src/Comm/Send.elm b/src/battlemap/src/Comm/Send.elm index 485b9b9..1b83073 100644 --- a/src/battlemap/src/Comm/Send.elm +++ b/src/battlemap/src/Comm/Send.elm @@ -7,7 +7,9 @@ import Json.Decode import Json.Encode -- Battlemap ------------------------------------------------------------------- +import Comm.AddArmor import Comm.AddChar +import Comm.AddWeapon import Comm.SetMap import Comm.SetTimeline import Comm.TurnResults @@ -30,7 +32,9 @@ internal_decoder : ( ) internal_decoder model reply_type = case reply_type of + "add_armor" -> (Comm.AddArmor.decode model) "add_char" -> (Comm.AddChar.decode model) + "add_weapon" -> (Comm.AddWeapon.decode model) "set_map" -> (Comm.SetMap.decode model) "turn_results" -> (Comm.TurnResults.decode) "set_timeline" -> (Comm.SetTimeline.decode) diff --git a/src/battlemap/src/Struct/Armor.elm b/src/battlemap/src/Struct/Armor.elm index d6dcd67..8374179 100644 --- a/src/battlemap/src/Struct/Armor.elm +++ b/src/battlemap/src/Struct/Armor.elm @@ -149,7 +149,7 @@ decoder = |> (Json.Decode.Pipeline.required "id" Json.Decode.int) |> (Json.Decode.Pipeline.required "nam" Json.Decode.string) |> (Json.Decode.Pipeline.required "ct" Json.Decode.string) - |> (Json.Decode.Pipeline.required "coef" Json.Decode.float) + |> (Json.Decode.Pipeline.required "cf" Json.Decode.float) ) ) diff --git a/src/battlemap/src/Struct/Character.elm b/src/battlemap/src/Struct/Character.elm index 00abc52..522bcda 100644 --- a/src/battlemap/src/Struct/Character.elm +++ b/src/battlemap/src/Struct/Character.elm @@ -20,7 +20,8 @@ module Struct.Character exposing set_enabled, get_weapons, set_weapons, - decoder + decoder, + fill_missing_equipment ) -- Elm ------------------------------------------------------------------------- @@ -75,34 +76,27 @@ type alias Ref = String -------------------------------------------------------------------------------- -- LOCAL ----------------------------------------------------------------------- -------------------------------------------------------------------------------- -finish_decoding : ( - (Struct.Weapon.Ref -> Struct.Weapon.Type) -> - (Struct.Armor.Ref -> Struct.Armor.Type) -> - PartiallyDecoded -> - Type - ) -finish_decoding get_weapon get_armor add_char = +finish_decoding : PartiallyDecoded -> (Type, Int, Int, Int) +finish_decoding add_char = let - active_weapon = (get_weapon add_char.awp) - secondary_weapon = (get_weapon add_char.swp) - weapon_set = (Struct.WeaponSet.new active_weapon secondary_weapon) - armor = (get_armor add_char.ar) - act_atts = (Struct.Armor.apply_to_attributes armor add_char.att) + weapon_set = (Struct.WeaponSet.new Struct.Weapon.none Struct.Weapon.none) + almost_char = + { + id = (toString add_char.ix), + name = add_char.nam, + icon = add_char.ico, + portrait = add_char.prt, + location = add_char.lc, + health = add_char.hea, + attributes = add_char.att, + statistics = (Struct.Statistics.new add_char.att weapon_set), + player_id = add_char.pla, + enabled = add_char.ena, + weapons = weapon_set, + armor = Struct.Armor.none + } in - { - id = (toString add_char.ix), - name = add_char.nam, - icon = add_char.ico, - portrait = add_char.prt, - location = add_char.lc, - health = add_char.hea, - attributes = act_atts, - statistics = (Struct.Statistics.new act_atts weapon_set), - player_id = add_char.pla, - enabled = add_char.ena, - weapons = weapon_set, - armor = armor - } + (almost_char, add_char.awp, add_char.swp, add_char.ar) -------------------------------------------------------------------------------- -- EXPORTED -------------------------------------------------------------------- @@ -170,14 +164,10 @@ set_weapons weapons char = statistics = (Struct.Statistics.new char.attributes weapons) } -decoder : ( - (Struct.Weapon.Ref -> Struct.Weapon.Type) -> - (Struct.Armor.Ref -> Struct.Armor.Type) -> - (Json.Decode.Decoder Type) - ) -decoder get_weapon get_armor = +decoder : (Json.Decode.Decoder (Type, Int, Int, Int)) +decoder = (Json.Decode.map - (finish_decoding get_weapon get_armor) + (finish_decoding) (Json.Decode.Pipeline.decode PartiallyDecoded |> (Json.Decode.Pipeline.required "ix" Json.Decode.int) @@ -194,3 +184,21 @@ decoder get_weapon get_armor = |> (Json.Decode.Pipeline.required "ar" Json.Decode.int) ) ) + +fill_missing_equipment : ( + Struct.Weapon.Type -> + Struct.Weapon.Type -> + Struct.Armor.Type -> + Type -> + Type + ) +fill_missing_equipment awp swp ar char = + let + weapon_set = (Struct.WeaponSet.new awp swp) + post_armor_atts = (Struct.Armor.apply_to_attributes ar char.attributes) + in + {char | + statistics = (Struct.Statistics.new post_armor_atts weapon_set), + weapons = weapon_set, + armor = ar + } diff --git a/src/battlemap/src/Struct/ServerReply.elm b/src/battlemap/src/Struct/ServerReply.elm index 1e79f93..ed9014e 100644 --- a/src/battlemap/src/Struct/ServerReply.elm +++ b/src/battlemap/src/Struct/ServerReply.elm @@ -17,7 +17,7 @@ type Type = Okay | AddArmor Struct.Armor.Type | AddWeapon Struct.Weapon.Type - | AddCharacter Struct.Character.Type + | AddCharacter (Struct.Character.Type, Int, Int, Int) | SetMap Struct.Battlemap.Type | TurnResults (List Struct.TurnResult.Type) | SetTimeline (List Struct.TurnResult.Type) diff --git a/src/battlemap/src/Struct/Weapon.elm b/src/battlemap/src/Struct/Weapon.elm index 92b7bf4..0c8ad77 100644 --- a/src/battlemap/src/Struct/Weapon.elm +++ b/src/battlemap/src/Struct/Weapon.elm @@ -231,7 +231,7 @@ decoder = |> (Json.Decode.Pipeline.required "rm" Json.Decode.string) |> (Json.Decode.Pipeline.required "dt" Json.Decode.string) |> (Json.Decode.Pipeline.required "dm" Json.Decode.string) - |> (Json.Decode.Pipeline.required "coef" Json.Decode.float) + |> (Json.Decode.Pipeline.required "cf" Json.Decode.float) ) ) diff --git a/src/battlemap/src/Update/HandleServerReply.elm b/src/battlemap/src/Update/HandleServerReply.elm index c6e8461..5bafbe4 100644 --- a/src/battlemap/src/Update/HandleServerReply.elm +++ b/src/battlemap/src/Update/HandleServerReply.elm @@ -3,8 +3,12 @@ module Update.HandleServerReply exposing (apply_to) -- Elm ------------------------------------------------------------------------- import Array +import Dict + import Http +import Debug + -- Battlemap ------------------------------------------------------------------- import Struct.Armor import Struct.Battlemap @@ -24,6 +28,20 @@ import Struct.Weapon -------------------------------------------------------------------------------- -- LOCAL ----------------------------------------------------------------------- -------------------------------------------------------------------------------- +weapon_getter : Struct.Model.Type -> Struct.Weapon.Ref -> Struct.Weapon.Type +weapon_getter model ref = + case (Dict.get ref model.weapons) of + (Just w) -> w + Nothing -> Struct.Weapon.none + +armor_getter : Struct.Model.Type -> Struct.Armor.Ref -> Struct.Armor.Type +armor_getter model ref = + case (Dict.get ref model.armors) of + (Just w) -> w + Nothing -> Struct.Armor.none + +----------- + add_armor : ( Struct.Armor.Type -> (Struct.Model.Type, (Maybe Struct.Error.Type)) -> @@ -45,14 +63,27 @@ add_weapon wp current_state = (model, _) -> ((Struct.Model.add_weapon wp model), Nothing) add_character : ( - Struct.Character.Type -> + (Struct.Character.Type, Int, Int, Int) -> (Struct.Model.Type, (Maybe Struct.Error.Type)) -> (Struct.Model.Type, (Maybe Struct.Error.Type)) ) -add_character char current_state = +add_character char_and_refs current_state = case current_state of (_, (Just _)) -> current_state - (model, _) -> ((Struct.Model.add_character char model), Nothing) + (model, _) -> + let + (char, awp_ref, swp_ref, ar_ref) = char_and_refs + awp = (weapon_getter model awp_ref) + swp = (weapon_getter model swp_ref) + ar = (armor_getter model ar_ref) + in + ( + (Struct.Model.add_character + (Struct.Character.fill_missing_equipment awp swp ar char) + model + ), + Nothing + ) set_map : ( Struct.Battlemap.Type -> @@ -126,22 +157,22 @@ apply_command : ( apply_command command current_state = case command of (Struct.ServerReply.AddWeapon wp) -> - (add_weapon wp current_state) + (Debug.log "add_weapon" (add_weapon wp current_state)) (Struct.ServerReply.AddArmor ar) -> - (add_armor ar current_state) + (Debug.log "add_armor" (add_armor ar current_state)) (Struct.ServerReply.AddCharacter char) -> - (add_character char current_state) + (Debug.log "add_char" (add_character char current_state)) (Struct.ServerReply.SetMap map) -> - (set_map map current_state) + (Debug.log "set_map" (set_map map current_state)) (Struct.ServerReply.TurnResults results) -> - (add_to_timeline results current_state) + (Debug.log "add_to_tl" (add_to_timeline results current_state)) (Struct.ServerReply.SetTimeline timeline) -> - (set_timeline timeline current_state) + (Debug.log "set_tl" (set_timeline timeline current_state)) Struct.ServerReply.Okay -> current_state -- cgit v1.2.3-70-g09d2