From dc8d1139c141b5281145829b5e87602425b4893f Mon Sep 17 00:00:00 2001 From: Nathanael Sensfelder Date: Tue, 14 Jan 2020 19:29:16 +0100 Subject: ... --- src/battle/src/Update/HandleServerReply.elm | 3 +- .../src/Update/Puppeteer/RefreshCharactersOf.elm | 63 ++++++++++++++++++++++ .../Update/Puppeteer/RefreshCharactersOfPlayer.elm | 63 ---------------------- 3 files changed, 64 insertions(+), 65 deletions(-) create mode 100644 src/battle/src/Update/Puppeteer/RefreshCharactersOf.elm delete mode 100644 src/battle/src/Update/Puppeteer/RefreshCharactersOfPlayer.elm diff --git a/src/battle/src/Update/HandleServerReply.elm b/src/battle/src/Update/HandleServerReply.elm index 31dc97a..8dee69b 100644 --- a/src/battle/src/Update/HandleServerReply.elm +++ b/src/battle/src/Update/HandleServerReply.elm @@ -37,9 +37,8 @@ import Struct.Error import Struct.Event import Struct.Model import Struct.Player +import Struct.Puppeteer import Struct.ServerReply -import Struct.TurnResult -import Struct.TurnResultAnimator import Struct.UI import Update.Puppeteer diff --git a/src/battle/src/Update/Puppeteer/RefreshCharactersOf.elm b/src/battle/src/Update/Puppeteer/RefreshCharactersOf.elm new file mode 100644 index 0000000..a83cc91 --- /dev/null +++ b/src/battle/src/Update/Puppeteer/RefreshCharactersOf.elm @@ -0,0 +1,63 @@ +module Update.Puppeteer.RefreshCharactersOf exposing (forward, backward) + +-- Elm ------------------------------------------------------------------------- +import Array + +-- Local Module ---------------------------------------------------------------- +import Struct.Battle +import Struct.Character +import Struct.Event +import Struct.Model + +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- +perform : ( + Int -> + Struct.Model.Type -> + (Struct.Model.Type, (List (Cmd Struct.Event.Type))) + ) +perform player_ix model = + ( + {model | + battle = + (Array.foldl + (\actor battle -> + if ((Struct.Character.get_player_index actor) == player_ix) + then + (Struct.Battle.refresh_character + (Struct.Character.get_index actor) + battle + ) + else battle + ) + model.battle + (Struct.Battle.get_characters model.battle) + ) + }, + [] + ) + +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- +forward : ( + Bool -> + Int -> + Struct.Model.Type -> + (Struct.Model.Type, (List (Cmd Struct.Event.Type))) + ) +forward is_forward player_ix model = + if (is_forward) + then (perform player_ix model) + else (model, []) + +backward : ( + Int -> + Struct.Model.Type -> + (Struct.Model.Type, (List (Cmd Struct.Event.Type))) + ) +backward is_forward player_ix model = + if (is_forward) + then (model, []) + else (perform player_ix model) diff --git a/src/battle/src/Update/Puppeteer/RefreshCharactersOfPlayer.elm b/src/battle/src/Update/Puppeteer/RefreshCharactersOfPlayer.elm deleted file mode 100644 index 6c91c9c..0000000 --- a/src/battle/src/Update/Puppeteer/RefreshCharactersOfPlayer.elm +++ /dev/null @@ -1,63 +0,0 @@ -module Update.Puppeteer.RefreshCharactersOfPlayer exposing (forward, backward) - --- Elm ------------------------------------------------------------------------- -import Array - --- Local Module ---------------------------------------------------------------- -import Struct.Battle -import Struct.Character -import Struct.Event -import Struct.Model - --------------------------------------------------------------------------------- --- LOCAL ----------------------------------------------------------------------- --------------------------------------------------------------------------------- -perform : ( - Int -> - Struct.Model.Type -> - (Struct.Model.Type, (List (Cmd Struct.Event.Type))) - ) -perform player_ix model = - ( - {model | - battle = - (Array.foldl - (\actor battle -> - if ((Struct.Character.get_player_index actor) == player_ix) - then - (Struct.Battle.refresh_character - (Struct.Character.get_index actor) - battle - ) - else battle - ) - model.battle - (Struct.Battle.get_characters model.battle) - ) - }, - [] - ) - --------------------------------------------------------------------------------- --- EXPORTED -------------------------------------------------------------------- --------------------------------------------------------------------------------- -forward : ( - Bool -> - Int -> - Struct.Model.Type -> - (Struct.Model.Type, (List (Cmd Struct.Event.Type))) - ) -forward is_forward player_ix model = - if (is_forward) - then (perform player_ix model) - else (model, []) - -backward : ( - Int -> - Struct.Model.Type -> - (Struct.Model.Type, (List (Cmd Struct.Event.Type))) - ) -backward is_forward player_ix model = - if (is_forward) - then (model, []) - else (perform player_ix model) -- cgit v1.2.3-70-g09d2 From 55b9f93a08a70c14fc8a55b97b131aedf26b2490 Mon Sep 17 00:00:00 2001 From: Nathanael Sensfelder Date: Tue, 14 Jan 2020 20:12:21 +0100 Subject: ... --- src/battle/src/Struct/Battle.elm | 4 + src/battle/src/Struct/Model.elm | 12 +-- src/battle/src/Struct/Puppeteer.elm | 20 ++--- src/battle/src/Struct/PuppeteerAction.elm | 145 ++++++++++++++++-------------- src/battle/src/Struct/TurnResult.elm | 36 ++++++++ src/shared/elm/Struct/Flags.elm | 1 + 6 files changed, 134 insertions(+), 84 deletions(-) diff --git a/src/battle/src/Struct/Battle.elm b/src/battle/src/Struct/Battle.elm index 84d08ba..a689f7a 100644 --- a/src/battle/src/Struct/Battle.elm +++ b/src/battle/src/Struct/Battle.elm @@ -24,6 +24,7 @@ module Struct.Battle exposing set_map, get_id, + set_id, get_own_player_index ) @@ -251,6 +252,9 @@ set_map map battle = {battle | map = map} get_id : Type -> String get_id battle = battle.id +set_id : String -> Type -> Type +set_id id battle = {battle | id = id} + -------------------------- ---- Own Player Index ---- -------------------------- diff --git a/src/battle/src/Struct/Model.elm b/src/battle/src/Struct/Model.elm index 989f66d..2924ed3 100644 --- a/src/battle/src/Struct/Model.elm +++ b/src/battle/src/Struct/Model.elm @@ -3,8 +3,7 @@ module Struct.Model exposing Type, new, invalidate, - clear, - clear_error + clear ) -- Shared ---------------------------------------------------------------------- @@ -17,6 +16,7 @@ import BattleCharacters.Struct.DataSet import BattleMap.Struct.DataSet -- Local Module ---------------------------------------------------------------- +import Struct.Battle import Struct.CharacterTurn import Struct.Error import Struct.MessageBoard @@ -51,7 +51,7 @@ type alias Type = -------------------------------------------------------------------------------- new : Struct.Flags.Type -> Type new flags = - let maybe_battle_id = + let model = { flags = flags, @@ -66,7 +66,7 @@ new flags = battle = (Struct.Battle.new) } in - case maybe_battle_id of + case (Struct.Flags.maybe_get_param "id" flags) of Nothing -> (invalidate (Struct.Error.new @@ -78,13 +78,13 @@ new flags = (Just id) -> {model | - battle = (Struct.Battle.set_battle_id id model.battle) + battle = (Struct.Battle.set_id id model.battle) } clear : Type -> Type clear model = {model | - message_board = (Struct.MessageBoard.clear), + message_board = (Struct.MessageBoard.clear model.message_board), ui = (Struct.UI.reset_displayed_nav (Struct.UI.set_previous_action Nothing model.ui) diff --git a/src/battle/src/Struct/Puppeteer.elm b/src/battle/src/Struct/Puppeteer.elm index c68f10d..3010fb7 100644 --- a/src/battle/src/Struct/Puppeteer.elm +++ b/src/battle/src/Struct/Puppeteer.elm @@ -50,35 +50,35 @@ new = append_forward : (List Struct.PuppeteerAction.Type) -> Type -> Type append_forward actions puppeteer = {puppeteer | - forward_actions = (List.concat puppeteer.forward_actions actions) + forward_actions = (puppeteer.forward_actions ++ actions) } append_backward : (List Struct.PuppeteerAction.Type) -> Type -> Type append_backward actions puppeteer = {puppeteer | - backward_actions = (List.concat actions puppeteer.backward_actions) + backward_actions = (actions ++ puppeteer.backward_actions) } forward : Type -> Type forward puppeteer = case (Util.List.pop puppeteer.forward_actions) of - ([], Nothing) -> puppeteer - (forward_actions, (Just action)) -> + Nothing -> puppeteer + (Just (action, forward_actions)) -> {puppeteer | forward_actions = forward_actions, - backward_actions = [action|puppeteer.backward_actions], - is_playing_forward = true + backward_actions = (action :: puppeteer.backward_actions), + is_playing_forward = True } backward : Type -> Type backward puppeteer = case (Util.List.pop puppeteer.backward_actions) of - ([], Nothing) -> puppeteer - (backward_actions, (Just action)) -> + Nothing -> puppeteer + (Just (action, backward_actions)) -> {puppeteer | - forward_actions = [action|forward_actions], + forward_actions = (action :: puppeteer.forward_actions), backward_actions = backward_actions, - is_playing_forward = false + is_playing_forward = False } step : Type -> Type diff --git a/src/battle/src/Struct/PuppeteerAction.elm b/src/battle/src/Struct/PuppeteerAction.elm index c8207b0..f1f975d 100644 --- a/src/battle/src/Struct/PuppeteerAction.elm +++ b/src/battle/src/Struct/PuppeteerAction.elm @@ -1,8 +1,8 @@ module Struct.PuppeteerAction exposing ( Type(..), - Group(..), - from_turn_result + Effect(..), + from_turn_results ) -- Elm ------------------------------------------------------------------------- @@ -40,60 +40,70 @@ type Type = -------------------------------------------------------------------------------- -- LOCAL ----------------------------------------------------------------------- -------------------------------------------------------------------------------- -from_attacked : Struct.Attack.Type -> (List Type) +from_attacked : Struct.TurnResult.Attack -> (List Type) from_attacked attack = let - attacker_ix = (Struct.TurnResult.get_actor_index turn_result) - defender_ix = (Struct.TurnResult.get_attack_defender_index attack) + attacker_ix = (Struct.TurnResult.get_attack_actor_index attack) + defender_ix = (Struct.TurnResult.get_attack_target_index attack) in - [ - (Perform - [ - (RefreshCharacter (False, attacker_ix)), - (RefreshCharacter (False, defender_ix)) - ] - ), - (PerformFor (2.0, [(Focus attacker_ix)])), - (PerformFor (2.0, [(Focus defender_ix)])), + ( + [ + (Perform + [ + (RefreshCharacter (False, attacker_ix)), + (RefreshCharacter (False, defender_ix)) + ] + ), + (PerformFor (2.0, [(Focus attacker_ix)])), + (PerformFor (2.0, [(Focus defender_ix)])) + ] + ++ (List.map - (PerformFor (5.0, (Hit attack))) - ), - (Perform - [ - (RefreshCharacter (True, attacker_ix)), - (RefreshCharacter (True, defender_ix)) - ] + (\hit-> + (PerformFor (5.0, [(Hit hit)])) + ) + (Struct.TurnResult.get_attack_sequence attack) ) - ] + ++ + [ + (Perform + [ + (RefreshCharacter (True, attacker_ix)), + (RefreshCharacter (True, defender_ix)) + ] + ) + ] + ) from_moved : Struct.TurnResult.Movement -> (List Type) from_moved movement = - let actor_ix = (Struct.TurnResult.get_movement_actor movement) in + let actor_ix = (Struct.TurnResult.get_movement_actor_index movement) in ( [ (PerformFor (1.0, [(Focus actor_ix)])), (Perform [(RefreshCharacter (False, actor_ix))]) ] ++ - [ - (List.map - (\dir -> - (PerformFor - ( - 0.5, - [(Move (actor_ix, dir))] - ) + (List.map + (\dir -> + (PerformFor + ( + 0.5, + [(Move (actor_ix, dir))] ) ) ) - ] + (Struct.TurnResult.get_movement_path movement) + ) ++ [ (Perform [(RefreshCharacter (True, actor_ix))]) ] ) from_switched_weapon : Struct.TurnResult.WeaponSwitch -> (List Type) from_switched_weapon weapon_switch = - let actor_ix = (Struct.TurnResult.get_weapon_switch_actor weapon_switch) in + let + actor_ix = (Struct.TurnResult.get_weapon_switch_actor_index weapon_switch) + in [ (PerformFor (1.0, [(Focus actor_ix)])), (PerformFor @@ -101,7 +111,7 @@ from_switched_weapon weapon_switch = 2.0, [ (RefreshCharacter (False, actor_ix)), - (SwapWeapons actor_ix) + (SwapWeapons actor_ix), (RefreshCharacter (True, actor_ix)) ] ) @@ -109,55 +119,54 @@ from_switched_weapon weapon_switch = ] from_player_won : Struct.TurnResult.PlayerVictory -> (List Type) -from_player_won player_victory = +from_player_won victory = [ (PerformFor ( 2.0, [ (AnnounceVictory - (Struct.TurnResult.get_player_victory_index player_victory) + (Struct.TurnResult.get_victory_player_index victory) ) ] ) ) ] -from_player_lost : Struct.TurnResult.PlayerLoss -> (List Type) -from_player_lost player_loss = - [ - (PerformFor - ( - 2.0, - [ - (RefreshCharactersOf (False, player_ix)), - (AnnounceLoss - (Struct.TurnResult.get_player_loss_index player_loss) - ), - (RefreshCharactersOf (True, player_ix)) - ] +from_player_lost : Struct.TurnResult.PlayerDefeat -> (List Type) +from_player_lost loss = + let player_ix = (Struct.TurnResult.get_loss_player_index loss) in + [ + (PerformFor + ( + 2.0, + [ + (RefreshCharactersOf (False, player_ix)), + (AnnounceLoss player_ix), + (RefreshCharactersOf (True, player_ix)) + ] + ) ) - ) - ] + ] from_player_turn_started : Struct.TurnResult.PlayerTurnStart -> (List Type) -from_player_turn_started player_turn_started = - [ - (PerformFor - ( - 2.0, - [ - (RefreshCharactersOf (False, player_ix)), - (StartPlayerTurn - (Struct.TurnResult.get_player_start_of_turn_index - player_turn_started - ) - ), - (RefreshCharactersOf (True, player_ix)) - ] +from_player_turn_started turn_started = + let + player_ix = + (Struct.TurnResult.get_start_of_turn_player_index turn_started) + in + [ + (PerformFor + ( + 2.0, + [ + (RefreshCharactersOf (False, player_ix)), + (StartTurn player_ix), + (RefreshCharactersOf (True, player_ix)) + ] + ) ) - ) - ] + ] -------------------------------------------------------------------------------- -- EXPORTED -------------------------------------------------------------------- @@ -168,7 +177,7 @@ from_turn_results turn_result = (Struct.TurnResult.Moved movement) -> (from_moved movement) (Struct.TurnResult.Attacked attack) -> (from_attacked attack) (Struct.TurnResult.SwitchedWeapon weapon_switch) -> - (from_switched_weapon movement) + (from_switched_weapon weapon_switch) (Struct.TurnResult.PlayerWon player_victory) -> (from_player_won player_victory) diff --git a/src/battle/src/Struct/TurnResult.elm b/src/battle/src/Struct/TurnResult.elm index b0d7d09..fe49c2a 100644 --- a/src/battle/src/Struct/TurnResult.elm +++ b/src/battle/src/Struct/TurnResult.elm @@ -7,6 +7,15 @@ module Struct.TurnResult exposing PlayerVictory, PlayerDefeat, PlayerTurnStart, + get_start_of_turn_player_index, + get_victory_player_index, + get_loss_player_index, + get_weapon_switch_actor_index, + get_movement_actor_index, + get_movement_path, + get_attack_actor_index, + get_attack_target_index, + get_attack_sequence, decoder ) @@ -185,3 +194,30 @@ decoder : (Json.Decode.Decoder Type) decoder = (Json.Decode.field "t" Json.Decode.string) |> (Json.Decode.andThen internal_decoder) + +get_start_of_turn_player_index : PlayerTurnStart -> Int +get_start_of_turn_player_index start_of_turn = start_of_turn.player_index + +get_victory_player_index : PlayerVictory -> Int +get_victory_player_index player_victory = player_victory.player_index + +get_loss_player_index : PlayerDefeat -> Int +get_loss_player_index player_loss = player_loss.player_index + +get_weapon_switch_actor_index : WeaponSwitch -> Int +get_weapon_switch_actor_index weapon_switch = weapon_switch.character_index + +get_movement_actor_index : Movement -> Int +get_movement_actor_index movement = movement.character_index + +get_movement_path : Movement -> (List BattleMap.Struct.Direction.Type) +get_movement_path movement = movement.path + +get_attack_actor_index : Attack -> Int +get_attack_actor_index attack = attack.attacker_index + +get_attack_target_index : Attack -> Int +get_attack_target_index attack = attack.defender_index + +get_attack_sequence : Attack -> (List Struct.Attack.Type) +get_attack_sequence attack = attack.sequence diff --git a/src/shared/elm/Struct/Flags.elm b/src/shared/elm/Struct/Flags.elm index a9f1630..9155b2f 100644 --- a/src/shared/elm/Struct/Flags.elm +++ b/src/shared/elm/Struct/Flags.elm @@ -1,6 +1,7 @@ module Struct.Flags exposing ( Type, + -- TODO: refactor into try_getting_parameter and so on. maybe_get_param, force_get_param, get_params_as_url, -- cgit v1.2.3-70-g09d2