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 | |
parent | d365b3f4ac1ede75677d584810f102cf941f5722 (diff) |
Applies the effect of the timeline update.
-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 -------------------------------------------------------------------------------- |