| summaryrefslogtreecommitdiff | 
diff options
| author | nsensfel <SpamShield0@noot-noot.org> | 2018-03-13 18:11:58 +0100 | 
|---|---|---|
| committer | nsensfel <SpamShield0@noot-noot.org> | 2018-03-13 18:11:58 +0100 | 
| commit | 6e588a905c00c52455b7b9f5630d040bf8e38c3b (patch) | |
| tree | b32dac48c35603c6633849839f435418d245e037 /src | |
| parent | d365b3f4ac1ede75677d584810f102cf941f5722 (diff) | |
Applies the effect of the timeline update.
Diffstat (limited to 'src')
| -rw-r--r-- | src/battlemap/src/Comm/Send.elm | 4 | ||||
| -rw-r--r-- | src/battlemap/src/Comm/SetTimeline.elm | 27 | ||||
| -rw-r--r-- | src/battlemap/src/Struct/Attack.elm | 49 | ||||
| -rw-r--r-- | src/battlemap/src/Struct/Character.elm | 4 | ||||
| -rw-r--r-- | src/battlemap/src/Struct/ServerReply.elm | 1 | ||||
| -rw-r--r-- | src/battlemap/src/Struct/TurnResult.elm | 75 | ||||
| -rw-r--r-- | src/battlemap/src/Update/HandleServerReply.elm | 49 | 
7 files changed, 197 insertions, 12 deletions
| diff --git a/src/battlemap/src/Comm/Send.elm b/src/battlemap/src/Comm/Send.elm index fbdd26d..485b9b9 100644 --- a/src/battlemap/src/Comm/Send.elm +++ b/src/battlemap/src/Comm/Send.elm @@ -7,8 +7,9 @@ import Json.Decode  import Json.Encode  -- Battlemap ------------------------------------------------------------------- -import Comm.SetMap  import Comm.AddChar +import Comm.SetMap +import Comm.SetTimeline  import Comm.TurnResults  import Struct.Event @@ -32,6 +33,7 @@ internal_decoder model reply_type =        "add_char" -> (Comm.AddChar.decode model)        "set_map" -> (Comm.SetMap.decode model)        "turn_results" -> (Comm.TurnResults.decode) +      "set_timeline" -> (Comm.SetTimeline.decode)        other ->           (Json.Decode.fail              ( diff --git a/src/battlemap/src/Comm/SetTimeline.elm b/src/battlemap/src/Comm/SetTimeline.elm new file mode 100644 index 0000000..a432f3a --- /dev/null +++ b/src/battlemap/src/Comm/SetTimeline.elm @@ -0,0 +1,27 @@ +module Comm.SetTimeline exposing (decode) + +-- Elm ------------------------------------------------------------------------- +import Json.Decode + +-- Battlemap ------------------------------------------------------------------- +import Struct.ServerReply +import Struct.TurnResult + +-------------------------------------------------------------------------------- +-- TYPES ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- +internal_decoder : (List Struct.TurnResult.Type) -> Struct.ServerReply.Type +internal_decoder trl = (Struct.ServerReply.SetTimeline trl) + +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- +decode : (Json.Decode.Decoder Struct.ServerReply.Type) +decode = +   (Json.Decode.map +      (internal_decoder) +      (Json.Decode.field "cnt" (Json.Decode.list Struct.TurnResult.decoder)) +   ) diff --git a/src/battlemap/src/Struct/Attack.elm b/src/battlemap/src/Struct/Attack.elm index cb7acf8..16df73f 100644 --- a/src/battlemap/src/Struct/Attack.elm +++ b/src/battlemap/src/Struct/Attack.elm @@ -1,9 +1,19 @@ -module Struct.Attack exposing (Type, Order, Precision, decoder) +module Struct.Attack exposing +   ( +      Type, +      Order, +      Precision, +      apply_to_characters, +      decoder +   )  -- Elm ------------------------------------------------------------------------- +import Dict +  import Json.Decode  -- Battlemap ------------------------------------------------------------------- +import Struct.Character  --------------------------------------------------------------------------------  -- TYPES ----------------------------------------------------------------------- @@ -62,7 +72,44 @@ decoder =        (Json.Decode.field "dmg" (Json.Decode.int))     ) +apply_damage_to_character : ( +      Int -> +      (Maybe Struct.Character.Type) -> +      (Maybe Struct.Character.Type) +   ) +apply_damage_to_character damage maybe_character = +   case maybe_character of +      Nothing -> Nothing + +      (Just char) -> +         (Just +            (Struct.Character.set_current_health +               ((Struct.Character.get_current_health char) - damage) +               char +            ) +         )  --------------------------------------------------------------------------------  -- EXPORTED --------------------------------------------------------------------  -------------------------------------------------------------------------------- +apply_to_characters : ( +      Struct.Character.Ref -> +      Struct.Character.Ref -> +      Type -> +      (Dict.Dict Struct.Character.Ref Struct.Character.Type) -> +      (Dict.Dict Struct.Character.Ref Struct.Character.Type) +   ) +apply_to_characters attacker_ref defender_ref attack characters = +   if ((attack.order == Counter) == attack.parried) +   then +      (Dict.update +         defender_ref +         (apply_damage_to_character attack.damage) +         characters +      ) +   else +      (Dict.update +         attacker_ref +         (apply_damage_to_character attack.damage) +         characters +      ) diff --git a/src/battlemap/src/Struct/Character.elm b/src/battlemap/src/Struct/Character.elm index a55d8f7..d4f65f7 100644 --- a/src/battlemap/src/Struct/Character.elm +++ b/src/battlemap/src/Struct/Character.elm @@ -8,6 +8,7 @@ module Struct.Character exposing        get_icon_id,        get_portrait_id,        get_current_health, +      set_current_health,        get_location,        set_location,        get_attributes, @@ -114,6 +115,9 @@ get_portrait_id c = c.portrait  get_current_health : Type -> Int  get_current_health c = c.health +set_current_health : Int -> Type -> Type +set_current_health health c = {c | health = health} +  get_location : Type -> Struct.Location.Type  get_location t = t.location diff --git a/src/battlemap/src/Struct/ServerReply.elm b/src/battlemap/src/Struct/ServerReply.elm index dcbd043..b986abe 100644 --- a/src/battlemap/src/Struct/ServerReply.elm +++ b/src/battlemap/src/Struct/ServerReply.elm @@ -16,6 +16,7 @@ type Type =     | AddCharacter Struct.Character.Type     | SetMap Struct.Battlemap.Type     | TurnResults (List Struct.TurnResult.Type) +   | SetTimeline (List Struct.TurnResult.Type)  --------------------------------------------------------------------------------  -- LOCAL ----------------------------------------------------------------------- diff --git a/src/battlemap/src/Struct/TurnResult.elm b/src/battlemap/src/Struct/TurnResult.elm index a7ca4a4..18a8dbd 100644 --- a/src/battlemap/src/Struct/TurnResult.elm +++ b/src/battlemap/src/Struct/TurnResult.elm @@ -4,16 +4,21 @@ module Struct.TurnResult exposing        Attack,        Movement,        WeaponSwitch, +      apply_to_characters,        decoder     )  -- Elm ------------------------------------------------------------------------- +import Dict +  import Json.Decode  -- Battlemap ------------------------------------------------------------------- +import Struct.Attack +import Struct.Character  import Struct.Direction  import Struct.Location -import Struct.Attack +import Struct.WeaponSet  --------------------------------------------------------------------------------  -- TYPES ----------------------------------------------------------------------- @@ -45,6 +50,50 @@ type Type =  --------------------------------------------------------------------------------  -- LOCAL -----------------------------------------------------------------------  -------------------------------------------------------------------------------- +apply_movement_to_character : ( +      Movement -> +      (Maybe Struct.Character.Type) -> +      (Maybe Struct.Character.Type) +   ) +apply_movement_to_character movement maybe_char = +   case maybe_char of +      Nothing -> Nothing + +      (Just char) -> +         (Just (Struct.Character.set_location movement.destination char)) + +apply_weapon_switch_to_character : ( +      (Maybe Struct.Character.Type) -> +      (Maybe Struct.Character.Type) +   ) +apply_weapon_switch_to_character maybe_char = +   case maybe_char of +      Nothing -> Nothing + +      (Just char) -> +         (Just +            (Struct.Character.set_weapons +               (Struct.WeaponSet.switch_weapons +                  (Struct.Character.get_weapons char) +               ) +               char +            ) +         ) + +apply_attack_to_characters : ( +      Attack -> +      (Dict.Dict Struct.Character.Ref Struct.Character.Type) -> +      (Dict.Dict Struct.Character.Ref Struct.Character.Type) +   ) +apply_attack_to_characters attack characters = +   (List.foldl +      (Struct.Attack.apply_to_characters +         (toString attack.attacker_index) +         (toString attack.defender_index) +      ) +      characters +      attack.sequence +   )  movement_decoder : (Json.Decode.Decoder Movement)  movement_decoder = @@ -114,6 +163,30 @@ internal_decoder kind =  --------------------------------------------------------------------------------  -- EXPORTED --------------------------------------------------------------------  -------------------------------------------------------------------------------- +apply_to_characters : ( +      Type -> +      (Dict.Dict Struct.Character.Ref Struct.Character.Type) -> +      (Dict.Dict Struct.Character.Ref Struct.Character.Type) +   ) +apply_to_characters turn_result characters = +   case turn_result of +      (Moved movement) -> +         (Dict.update +            (toString movement.character_index) +            (apply_movement_to_character movement) +            characters +         ) + +      (SwitchedWeapon weapon_switch) -> +         (Dict.update +            (toString weapon_switch.character_index) +            (apply_weapon_switch_to_character) +            characters +         ) + +      (Attacked attack) -> +         (apply_attack_to_characters attack characters) +  decoder : (Json.Decode.Decoder Type)  decoder =     (Json.Decode.field "t" Json.Decode.string) diff --git a/src/battlemap/src/Update/HandleServerReply.elm b/src/battlemap/src/Update/HandleServerReply.elm index 9319b38..85a3cc8 100644 --- a/src/battlemap/src/Update/HandleServerReply.elm +++ b/src/battlemap/src/Update/HandleServerReply.elm @@ -22,7 +22,6 @@ import Struct.UI  --------------------------------------------------------------------------------  -- LOCAL -----------------------------------------------------------------------  -------------------------------------------------------------------------------- -  add_character : (        Struct.Character.Type ->        (Struct.Model.Type, (Maybe Struct.Error.Type)) -> @@ -62,16 +61,45 @@ add_to_timeline : (  add_to_timeline turn_results current_state =     case current_state of        (_, (Just _)) -> current_state + +      (model, _) -> +         let +            updated_characters = +               (List.foldl +                  (Struct.TurnResult.apply_to_characters) +                  model.characters +                  turn_results +               ) +         in +            ( +               {model | +                  timeline = +                     (Array.append +                        model.timeline +                        (Array.fromList turn_results) +                     ), +                  ui = +                     (Struct.UI.set_displayed_tab +                        model.ui +                        Struct.UI.TimelineTab +                     ), +                  characters = updated_characters +               }, +               Nothing +            ) + +set_timeline : ( +      (List Struct.TurnResult.Type) -> +      (Struct.Model.Type, (Maybe Struct.Error.Type)) -> +      (Struct.Model.Type, (Maybe Struct.Error.Type)) +   ) +set_timeline turn_results current_state = +   case current_state of +      (_, (Just _)) -> current_state +        (model, _) ->           ( -            {model | -               timeline = -                  (Array.append -                     model.timeline -                     (Array.fromList turn_results) -                  ), -               ui = (Struct.UI.set_displayed_tab model.ui Struct.UI.TimelineTab) -            }, +            {model | timeline = (Array.fromList turn_results)},              Nothing           ) @@ -91,6 +119,9 @@ apply_command command current_state =        (Struct.ServerReply.TurnResults results) ->           (add_to_timeline results current_state) +      (Struct.ServerReply.SetTimeline timeline) -> +         (set_timeline timeline current_state) +        Struct.ServerReply.Okay -> current_state  -------------------------------------------------------------------------------- | 


