| summaryrefslogtreecommitdiff | 
diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/battlemap/src/Comm/AddChar.elm | 24 | ||||
| -rw-r--r-- | src/battlemap/src/Comm/AddWeapon.elm | 2 | ||||
| -rw-r--r-- | src/battlemap/src/Comm/Send.elm | 4 | ||||
| -rw-r--r-- | src/battlemap/src/Struct/Armor.elm | 2 | ||||
| -rw-r--r-- | src/battlemap/src/Struct/Character.elm | 76 | ||||
| -rw-r--r-- | src/battlemap/src/Struct/ServerReply.elm | 2 | ||||
| -rw-r--r-- | src/battlemap/src/Struct/Weapon.elm | 2 | ||||
| -rw-r--r-- | 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  | 


