From fc09d979e4c753377131684b1100c250e89765ea Mon Sep 17 00:00:00 2001 From: Nathanael Sensfelder Date: Sun, 10 May 2020 18:08:26 +0200 Subject: ... --- src/battle/src/Struct/Attack.elm | 7 +- src/battle/src/Struct/CharacterTurn.elm | 359 ++++++++++----------- src/battle/src/Struct/Event.elm | 8 + src/battle/src/Struct/HelpRequest.elm | 8 + src/battle/src/Struct/Marker.elm | 8 + src/battle/src/Struct/Path.elm | 65 ++-- src/battle/src/Struct/UI.elm | 18 +- src/battle/src/Update/AbortTurn.elm | 22 -- src/battle/src/Update/AttackWithoutMoving.elm | 40 --- src/battle/src/Update/ChangeScale.elm | 23 -- .../src/Update/Character/DisplayCharacterInfo.elm | 35 ++ src/battle/src/Update/Character/DisplayInfo.elm | 32 ++ .../src/Update/Character/DisplayNavigator.elm | 42 +++ .../src/Update/Character/LookForCharacter.elm | 52 +++ src/battle/src/Update/Character/ScrollTo.elm | 42 +++ src/battle/src/Update/CharacterTurn.elm | 18 ++ src/battle/src/Update/CharacterTurn/AbortTurn.elm | 22 ++ .../Update/CharacterTurn/AttackWithoutMoving.elm | 40 +++ src/battle/src/Update/CharacterTurn/EndTurn.elm | 96 ++++++ .../src/Update/CharacterTurn/RequestDirection.elm | 101 ++++++ .../src/Update/CharacterTurn/SwitchWeapon.elm | 97 ++++++ .../src/Update/CharacterTurn/ToggleTarget.elm | 74 +++++ src/battle/src/Update/CharacterTurn/UndoAction.elm | 133 ++++++++ src/battle/src/Update/DisplayCharacterInfo.elm | 55 ---- src/battle/src/Update/EndTurn.elm | 96 ------ src/battle/src/Update/GoToMainMenu.elm | 24 -- src/battle/src/Update/HandleServerReply.elm | 324 +++++++++---------- src/battle/src/Update/LookForCharacter.elm | 52 --- src/battle/src/Update/RequestDirection.elm | 101 ------ src/battle/src/Update/SelectCharacter.elm | 200 ++---------- src/battle/src/Update/SelectTab.elm | 31 -- src/battle/src/Update/SwitchWeapon.elm | 97 ------ src/battle/src/Update/UI/ChangeScale.elm | 23 ++ src/battle/src/Update/UI/GoToMainMenu.elm | 24 ++ src/battle/src/Update/UI/SelectTab.elm | 31 ++ src/battle/src/Update/UndoAction.elm | 133 -------- 36 files changed, 1258 insertions(+), 1275 deletions(-) delete mode 100644 src/battle/src/Update/AbortTurn.elm delete mode 100644 src/battle/src/Update/AttackWithoutMoving.elm delete mode 100644 src/battle/src/Update/ChangeScale.elm create mode 100644 src/battle/src/Update/Character/DisplayCharacterInfo.elm create mode 100644 src/battle/src/Update/Character/DisplayInfo.elm create mode 100644 src/battle/src/Update/Character/DisplayNavigator.elm create mode 100644 src/battle/src/Update/Character/LookForCharacter.elm create mode 100644 src/battle/src/Update/Character/ScrollTo.elm create mode 100644 src/battle/src/Update/CharacterTurn.elm create mode 100644 src/battle/src/Update/CharacterTurn/AbortTurn.elm create mode 100644 src/battle/src/Update/CharacterTurn/AttackWithoutMoving.elm create mode 100644 src/battle/src/Update/CharacterTurn/EndTurn.elm create mode 100644 src/battle/src/Update/CharacterTurn/RequestDirection.elm create mode 100644 src/battle/src/Update/CharacterTurn/SwitchWeapon.elm create mode 100644 src/battle/src/Update/CharacterTurn/ToggleTarget.elm create mode 100644 src/battle/src/Update/CharacterTurn/UndoAction.elm delete mode 100644 src/battle/src/Update/DisplayCharacterInfo.elm delete mode 100644 src/battle/src/Update/EndTurn.elm delete mode 100644 src/battle/src/Update/GoToMainMenu.elm delete mode 100644 src/battle/src/Update/LookForCharacter.elm delete mode 100644 src/battle/src/Update/RequestDirection.elm delete mode 100644 src/battle/src/Update/SelectTab.elm delete mode 100644 src/battle/src/Update/SwitchWeapon.elm create mode 100644 src/battle/src/Update/UI/ChangeScale.elm create mode 100644 src/battle/src/Update/UI/GoToMainMenu.elm create mode 100644 src/battle/src/Update/UI/SelectTab.elm delete mode 100644 src/battle/src/Update/UndoAction.elm (limited to 'src/battle') diff --git a/src/battle/src/Struct/Attack.elm b/src/battle/src/Struct/Attack.elm index 7ef8280..08803ce 100644 --- a/src/battle/src/Struct/Attack.elm +++ b/src/battle/src/Struct/Attack.elm @@ -60,6 +60,9 @@ precision_decoder : (Json.Decode.Decoder Precision) precision_decoder = (Json.Decode.map (precision_from_string) (Json.Decode.string)) +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- decoder : (Json.Decode.Decoder Type) decoder = (Json.Decode.map5 @@ -70,7 +73,3 @@ decoder = (Json.Decode.field "par" (Json.Decode.bool)) (Json.Decode.field "dmg" (Json.Decode.int)) ) - --------------------------------------------------------------------------------- --- EXPORTED -------------------------------------------------------------------- --------------------------------------------------------------------------------- diff --git a/src/battle/src/Struct/CharacterTurn.elm b/src/battle/src/Struct/CharacterTurn.elm index 8cc4360..c869feb 100644 --- a/src/battle/src/Struct/CharacterTurn.elm +++ b/src/battle/src/Struct/CharacterTurn.elm @@ -1,25 +1,49 @@ module Struct.CharacterTurn exposing ( Type, - State(..), - toggle_target_index, - toggle_location, - switch_weapons, - undo_action, - get_path, + Action(..) + + -- Active Character + maybe_get_active_character, + get_active_character_index, + set_active_character, + clear_active_character, + has_active_character, + + -- Action + set_action, get_action, + clear_action, + + -- Target Indices + add_target_index, + remove_target_index, + toggle_target_index, get_target_indices, + set_target_indices, + + -- Locations + add_location, + remove_location, + toggle_location, get_locations, - lock_path, - unlock_path, - show_attack_range_navigator, - new, - set_active_character, - set_active_character_no_reset, - set_navigator, - maybe_get_active_character, + set_locations, + toggle_location, + + -- Navigator maybe_get_navigator, - encode + set_navigator, + clear_navigator, + + -- Path + get_path, + store_path, + override_path, + clear_path, + + -- Other + encode, + new ) -- Elm ------------------------------------------------------------------------- @@ -46,13 +70,14 @@ type Action = | Attacking | SwitchingWeapons | UsingSkill + | AwaitingConfirmation type alias Type = { active_character : (Maybe Struct.Character.Type), - path : (List BattleMap.Struct.Direction.Type), navigator : (Maybe Struct.Navigator.Type), + path : (List BattleMap.Struct.Direction.Type), action : Action, targets : (Set.Set Int), @@ -62,6 +87,63 @@ type alias Type = -------------------------------------------------------------------------------- -- LOCAL ----------------------------------------------------------------------- -------------------------------------------------------------------------------- +encode_path : Type -> (Json.Encode.Value) +encode_path ct = + (Json.Encode.object + [ + ("cat", "mov"), + ( + "pat", + (Json.Encode.list + ( + (Json.Encode.string) + << + (BattleMap.Struct.Direction.to_string) + ) + (List.reverse (get_path ct)) + ) + ) + ] + ) + +encode_action : Type -> (Json.Encode.Value) +encode_action ct = + case ct.action of + None -> (Json.Encode.null) + Attacking -> + case (List.head (Set.toList ct.targets)) of + Nothing -> (Json.Encode.null) + (Just target) -> + (Json.Encode.object + [ + ("cat", "atk"), + ("tar", (Json.Encode.int target)) + ] + ) + + SwitchingWeapons -> + (Json.Encode.object [("cat", "swp")]) + + UsingSkill -> + (Json.Encode.object + [ + ("cat", "skl"), + ( + "tar", + (Json.Encode.list + (Json.Encode.int) + (Set.toList ct.targets) + ) + ), + ( + "loc", + (Json.Encode.list + (BattleMap.Struct.Location.encode) + (Set.toList ct.locations) + ) + ) + ] + ) -------------------------------------------------------------------------------- -- EXPORTED -------------------------------------------------------------------- @@ -71,149 +153,105 @@ new = { active_character = Nothing, - path = [], navigator = Nothing, + path = [], action = None, targets = (Set.empty), locations = (Set.empty) } +---- Active Character ---------------------------------------------------------- maybe_get_active_character : Type -> (Maybe Struct.Character.Type) maybe_get_active_character ct = ct.active_character -switch_weapons : Type -> Type -switch_weapons : -toggle_target_index : Int -> Type -> Type -toggle_target_index ix ct = - let - uct = - case ct.action of - None -> (lock_path ct) - _ -> ct - in - if (Set.member ix uct.targets) - then {uct | targets = (Set.remove ix uct.targets)} - else {uct | targets = (Set.insert ix uct.targets)} +set_active_character : Struct.Character.Type -> Type -> Type +set_active_character char ct = {ct | active_character = (Just char)} -toggle_location : BattleMap.Struct.Location.Ref -> Type -> Type -toggle_location loc ct = - let - uct = - case ct.action of - None -> (lock_path ct) - _ -> ct - in - if (Set.member loc uct.locations) - then {uct | locations = (Set.remove loc uct.locations)} - else {uct | locations = (Set.insert loc uct.locations)} - -set_active_character : ( - Struct.Character.Type -> - Type -> - Type - ) -set_active_character char ct = - {ct | - active_character = (Just char), +clear_active_character : Type -> Type +clear_active_character ct = {ct | active_character = Nothing} - path = [], - navigator = Nothing, +get_active_character_index : Type -> Int +get_active_character_index ct = + case ct.active_character of + Nothing -> -1 + (Just char) -> (Struct.Character.get_index char) - action = None, - targets = (Set.empty), - locations = (Set.empty) - } +has_active_character : Type -> Bool +has_active_character ct = (ct.active_character /= Nothing) -set_active_character_no_reset : ( - Struct.Character.Type -> - Type -> - Type - ) -set_active_character_no_reset char ct = - {ct | - active_character = (Just char) - } +---- Action -------------------------------------------------------------------- +set_action : Action -> Type -> Type +set_action act ct = {ct | action = act} get_action : Type -> Action -get_action ct = ct.action - -get_path : Type -> (List BattleMap.Struct.Direction.Type) -get_path ct = ct.path +get_action act ct = ct.action -lock_path : Type -> Type -lock_path ct = - case ct.navigator of - (Just old_nav) -> - {ct | - path = (Struct.Navigator.get_path old_nav), - navigator = (Just (Struct.Navigator.lock_path old_nav)), - - action = Attacking, - targets = (Set.empty), - locations = (Set.empty) - } - - _ -> - ct - -unlock_path : Type -> Type -unlock_path ct = - case ct.navigator of - (Just old_nav) -> - {ct | - navigator = (Just (Struct.Navigator.unlock_path old_nav)), - - action = None, - targets = (Set.empty), - locations = (Set.empty) - } - - _ -> - ct - -show_attack_range_navigator : Int -> Int -> Type -> Type -show_attack_range_navigator range_min range_max ct = - case ct.navigator of - Nothing -> ct - - (Just old_nav) -> - {ct | - path = (Struct.Navigator.get_path old_nav), - navigator = - (Just - (Struct.Navigator.lock_path_with_new_attack_ranges - range_min - range_max - old_nav - ) - ), - - action = None, - targets = (Set.empty), - locations = (Set.empty) - } +clear_action : Type -> Type +clear_action ct = {ct | action = None} -maybe_get_navigator : Type -> (Maybe Struct.Navigator.Type) -maybe_get_navigator ct = ct.navigator +---- Targets ------------------------------------------------------------------- +add_target_index : Int -> Type -> Type +add_target_index ix ct = {ct | targets = (Set.insert ix ct.targets)} -set_navigator : Struct.Navigator.Type -> Type -> Type -set_navigator navigator ct = - {ct | - path = [], - navigator = (Just navigator), +remove_target_index : Int -> Type -> Type +remove_target_index ix ct = {ct | targets = (Set.remove ix ct.targets)} - action = None, - targets = (Set.empty), - locations = (Set.empty) - } +toggle_target_index : Int -> Type -> Type +toggle_target_index ix ct = + if (Set.member ix ct.targets) + then (remove_target_index ix ct) + else (add_target_index ix ct) get_target_indices : Type -> (Set.Set Int) get_target_indices ct = ct.targets +set_target_indices : (Set.Set Int) -> Type -> Type +set_target_indices targets ct = {ct | targets = targets} + +---- Locations ----------------------------------------------------------------- +add_location : BattleMap.Struct.Location.Ref -> Type -> Type +add_location ix ct = {ct | locations = (Set.insert ix ct.locations)} + +remove_location : BattleMap.Struct.Location.Ref -> Type -> Type +remove_location ix ct = {ct | locations = (Set.remove ix ct.locations)} + +toggle_location : BattleMap.Struct.Location.Ref -> Type -> Type +toggle_location ix ct = + if (Set.member ix ct.locations) + then (remove_location ix ct) + else (add_location ix ct) + get_locations : Type -> (Set.Set BattleMap.Struct.Location.Ref) get_locations ct = ct.locations +set_locations : (Set.Set BattleMap.Struct.Location.Ref) -> Type -> Type +set_locations locations ct = {ct | locations = locations} + +---- Navigator ----------------------------------------------------------------- +maybe_get_navigator : Type -> (Maybe Struct.Navigator.Type) +maybe_get_navigator ct = ct.navigator + +set_navigator : Type -> (Maybe Struct.Navigator.Type) +set_navigator navigator ct = {ct | navigator = (Just navigator)} + +clear_navigator : Type -> Type +clear_navigator ct = {ct | navigator = Nothing} + +---- Path ---------------------------------------------------------------------- +get_path : Type -> (List BattleMap.Struct.Direction.Type) +get_path ct = ct.path + +store_path : Type -> Type +store_path ct = {ct | path = (Struct.Navigator.get_path old_nav)} + +override_path : (List BattleMap.Struct.Direction.Type) -> Type -> Type +override_path path ct = {ct | path = path} + +clear_path : Type -> Type +clear_path ct = {ct | path = []} + +---- Encode/Decode ------------------------------------------------------------- encode : Type -> (Json.Encode.Value) encode ct = case ct.active_character of @@ -248,60 +286,3 @@ encode ct = ] ) -encode_path : Type -> (Json.Encode.Value) -encode_path ct = - (Json.Encode.object - [ - ("cat", "mov"), - ( - "pat", - (Json.Encode.list - ( - (Json.Encode.string) - << - (BattleMap.Struct.Direction.to_string) - ) - (List.reverse (get_path ct)) - ) - ) - ] - ) - -encode_action : Type -> (Json.Encode.Value) -encode_action ct = - case ct.action of - None -> (Json.Encode.null) - Attacking -> - case (List.head (Set.toList ct.targets)) of - Nothing -> (Json.Encode.null) - (Just target) -> - (Json.Encode.object - [ - ("cat", "atk"), - ("tar", (Json.Encode.int target)) - ] - ) - - SwitchingWeapons -> - (Json.Encode.object [("cat", "swp")]) - - UsingSkill -> - (Json.Encode.object - [ - ("cat", "skl"), - ( - "tar", - (Json.Encode.list - (Json.Encode.int) - (Set.toList ct.targets) - ) - ), - ( - "loc", - (Json.Encode.list - (BattleMap.Struct.Location.encode) - (Set.toList ct.locations) - ) - ) - ] - ) diff --git a/src/battle/src/Struct/Event.elm b/src/battle/src/Struct/Event.elm index 2e6c5ff..e0fa827 100644 --- a/src/battle/src/Struct/Event.elm +++ b/src/battle/src/Struct/Event.elm @@ -37,6 +37,14 @@ type Type = | UndoActionRequest | WeaponSwitchRequest +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- + attempted : (Result.Result err val) -> Type attempted act = case act of diff --git a/src/battle/src/Struct/HelpRequest.elm b/src/battle/src/Struct/HelpRequest.elm index 03eb63f..f20610c 100644 --- a/src/battle/src/Struct/HelpRequest.elm +++ b/src/battle/src/Struct/HelpRequest.elm @@ -16,3 +16,11 @@ type Type = None | Attribute Battle.Struct.Attributes.Category | DamageType Battle.Struct.DamageType.Type + +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- diff --git a/src/battle/src/Struct/Marker.elm b/src/battle/src/Struct/Marker.elm index e3a051d..d2ffc5a 100644 --- a/src/battle/src/Struct/Marker.elm +++ b/src/battle/src/Struct/Marker.elm @@ -8,3 +8,11 @@ type Type = | CanGoToCanDefend | CanAttackCantDefend | CanGoToCantDefend + +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- diff --git a/src/battle/src/Struct/Path.elm b/src/battle/src/Struct/Path.elm index c288103..aae8c41 100644 --- a/src/battle/src/Struct/Path.elm +++ b/src/battle/src/Struct/Path.elm @@ -1,11 +1,14 @@ module Struct.Path exposing ( Type, + new, + get_current_location, get_remaining_points, get_summary, - maybe_follow_direction + + maybe_add_step ) -- Elm ------------------------------------------------------------------------- @@ -37,11 +40,11 @@ type alias Type = -- LOCAL ----------------------------------------------------------------------- -------------------------------------------------------------------------------- has_been_to : ( - Type -> BattleMap.Struct.Location.Type -> + Type -> Bool ) -has_been_to path location = +has_been_to location path = ( (path.current_location == location) || @@ -51,17 +54,15 @@ has_been_to path location = ) ) -maybe_mov_to : ( - Type -> +maybe_move_to : ( BattleMap.Struct.Direction.Type -> BattleMap.Struct.Location.Type -> Int -> + Type -> (Maybe Type) ) -maybe_mov_to path dir next_loc cost = - let - remaining_points = (path.remaining_points - cost) - in +maybe_move_to dir next_loc cost path = + let remaining_points = (path.remaining_points - cost) in if (remaining_points >= 0) then (Just @@ -124,12 +125,11 @@ maybe_backtrack_to path dir location = -------------------------------------------------------------------------------- -- EXPORTED -------------------------------------------------------------------- -------------------------------------------------------------------------------- - new : BattleMap.Struct.Location.Type -> Int -> Type new start points = { current_location = start, - visited_locations = Set.empty, + visited_locations = (Set.empty), previous_directions = [], previous_points = [], remaining_points = points @@ -144,37 +144,12 @@ get_remaining_points path = path.remaining_points get_summary : Type -> (List BattleMap.Struct.Direction.Type) get_summary path = path.previous_directions -maybe_follow_direction : ( - (BattleMap.Struct.Location.Type -> (Int, Int)) -> - (Maybe Type) -> - BattleMap.Struct.Direction.Type -> - (Maybe Type) - ) -maybe_follow_direction tile_data_fun maybe_path dir = - case maybe_path of - (Just path) -> - let - next_location = - (BattleMap.Struct.Location.neighbor - dir - path.current_location - ) - (next_location_cost, next_location_battles) = - (tile_data_fun next_location) - in - if (next_location_cost <= Constants.Movement.max_points) - then - if (has_been_to path next_location) - then - (maybe_backtrack_to path dir next_location) - else - (maybe_mov_to - path - dir - next_location - next_location_cost - ) - else - Nothing - - Nothing -> Nothing +maybe_add_step : BattleMap.Struct.Direction.Type -> Int -> Type -> (Maybe Type) +maybe_add_step direction cost path = + let + next_location = + (BattleMap.Struct.Location.neighbor direction path.current_location) + in + if (has_been_to next_location path) + then (maybe_backtrack_to direction next_location path) + else (maybe_move_to direction next_location cost path) diff --git a/src/battle/src/Struct/UI.elm b/src/battle/src/Struct/UI.elm index e1881ed..f853c01 100644 --- a/src/battle/src/Struct/UI.elm +++ b/src/battle/src/Struct/UI.elm @@ -3,23 +3,29 @@ module Struct.UI exposing Type, Tab(..), Action(..), + default, + -- Zoom get_zoom_level, reset_zoom_level, mod_zoom_level, + -- Tab maybe_get_displayed_tab, set_displayed_tab, reset_displayed_tab, - to_string, + tab_to_string, get_all_tabs, + -- Navigator maybe_get_displayed_nav, set_displayed_nav, reset_displayed_nav, + -- Manual Controls has_manual_controls_enabled, + -- Previous Action get_previous_action, set_previous_action @@ -92,8 +98,8 @@ set_displayed_tab tab ui = {ui | displayed_tab = (Just tab)} reset_displayed_tab : Type -> Type reset_displayed_tab ui = {ui | displayed_tab = Nothing} -to_string : Tab -> String -to_string tab = +tab_to_string : Tab -> String +tab_to_string tab = case tab of StatusTab -> "Status" CharactersTab -> "Characters" @@ -121,10 +127,8 @@ has_manual_controls_enabled ui = ui.show_manual_controls toggle_manual_controls : Type -> Type toggle_manual_controls ui = if (ui.show_manual_controls) - then - {ui | show_manual_controls = False} - else - {ui | show_manual_controls = True} + then {ui | show_manual_controls = False} + else {ui | show_manual_controls = True} set_enable_manual_controls : Bool -> Type -> Type set_enable_manual_controls val ui = {ui | show_manual_controls = val} diff --git a/src/battle/src/Update/AbortTurn.elm b/src/battle/src/Update/AbortTurn.elm deleted file mode 100644 index 486e846..0000000 --- a/src/battle/src/Update/AbortTurn.elm +++ /dev/null @@ -1,22 +0,0 @@ -module Update.AbortTurn exposing (apply_to) - --- Local Module ---------------------------------------------------------------- -import Struct.CharacterTurn -import Struct.Event -import Struct.Model - --------------------------------------------------------------------------------- --- LOCAL ----------------------------------------------------------------------- --------------------------------------------------------------------------------- - --------------------------------------------------------------------------------- --- EXPORTED -------------------------------------------------------------------- --------------------------------------------------------------------------------- -apply_to : Struct.Model.Type -> (Struct.Model.Type, (Cmd Struct.Event.Type)) -apply_to model = - ( - {model | - char_turn = (Struct.CharacterTurn.new) - }, - Cmd.none - ) diff --git a/src/battle/src/Update/AttackWithoutMoving.elm b/src/battle/src/Update/AttackWithoutMoving.elm deleted file mode 100644 index 3584e69..0000000 --- a/src/battle/src/Update/AttackWithoutMoving.elm +++ /dev/null @@ -1,40 +0,0 @@ -module Update.AttackWithoutMoving exposing (apply_to) - --- Local Module ---------------------------------------------------------------- -import Struct.CharacterTurn -import Struct.Error -import Struct.Event -import Struct.Model - --------------------------------------------------------------------------------- --- LOCAL ----------------------------------------------------------------------- --------------------------------------------------------------------------------- -make_it_so : Struct.Model.Type -> Struct.Model.Type -make_it_so model = - {model | - char_turn = (Struct.CharacterTurn.lock_path model.char_turn) - } - --------------------------------------------------------------------------------- --- EXPORTED -------------------------------------------------------------------- --------------------------------------------------------------------------------- -apply_to : Struct.Model.Type -> (Struct.Model.Type, (Cmd Struct.Event.Type)) -apply_to model = - case (Struct.CharacterTurn.get_state model.char_turn) of - Struct.CharacterTurn.SelectedCharacter -> - ((make_it_so model), Cmd.none) - - _ -> - ( - (Struct.Model.invalidate - (Struct.Error.new - Struct.Error.Programming - ( - "Attempt to do an attack without moving, despite no" - ++ "character being selected." - ) - ) - model - ), - Cmd.none - ) diff --git a/src/battle/src/Update/ChangeScale.elm b/src/battle/src/Update/ChangeScale.elm deleted file mode 100644 index bb98e84..0000000 --- a/src/battle/src/Update/ChangeScale.elm +++ /dev/null @@ -1,23 +0,0 @@ -module Update.ChangeScale exposing (apply_to) - --- Local Module ---------------------------------------------------------------- -import Struct.Event -import Struct.Model -import Struct.UI - --------------------------------------------------------------------------------- --- LOCAL ----------------------------------------------------------------------- --------------------------------------------------------------------------------- - --------------------------------------------------------------------------------- --- EXPORTED -------------------------------------------------------------------- --------------------------------------------------------------------------------- -apply_to : ( - Struct.Model.Type -> - Float -> - (Struct.Model.Type, (Cmd Struct.Event.Type)) - ) -apply_to model mod = - if (mod == 0.0) - then ({model | ui = (Struct.UI.reset_zoom_level model.ui)}, Cmd.none) - else ({model | ui = (Struct.UI.mod_zoom_level mod model.ui)}, Cmd.none) diff --git a/src/battle/src/Update/Character/DisplayCharacterInfo.elm b/src/battle/src/Update/Character/DisplayCharacterInfo.elm new file mode 100644 index 0000000..bcf972d --- /dev/null +++ b/src/battle/src/Update/Character/DisplayCharacterInfo.elm @@ -0,0 +1,35 @@ +module Update.Character.DisplayInfo exposing (apply_to) + +-- Elm ------------------------------------------------------------------------- + +-- Local Module ---------------------------------------------------------------- +import Struct.Event +import Struct.Model +import Struct.UI + +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- +apply_to : ( + Int -> + Struct.Model.Type -> + (Struct.Model.Type, (Cmd Struct.Event.Type)) + ) +apply_to target_ref model = + ( + {model | + ui = + (Struct.UI.set_displayed_tab + Struct.UI.StatusTab + (Struct.UI.set_previous_action + (Just (Struct.UI.SelectedCharacter target_ref)) + model.ui + ) + ) + }, + Cmd.none + ) diff --git a/src/battle/src/Update/Character/DisplayInfo.elm b/src/battle/src/Update/Character/DisplayInfo.elm new file mode 100644 index 0000000..c43e0bd --- /dev/null +++ b/src/battle/src/Update/Character/DisplayInfo.elm @@ -0,0 +1,32 @@ +module Update.Character.DisplayInfo exposing (apply_to_ref) + +-- Elm ------------------------------------------------------------------------- + +-- Local Module ---------------------------------------------------------------- +import Struct.Event +import Struct.Model +import Struct.UI + +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- +apply_to_ref : ( + Int -> + Struct.Model.Type -> + (Struct.Model.Type, (Cmd Struct.Event.Type)) + ) +apply_to_ref target_ref model = + {model | + ui = + (Struct.UI.set_displayed_tab + Struct.UI.StatusTab + (Struct.UI.set_previous_action + (Just (Struct.UI.SelectedCharacter target_ref)) + model.ui + ) + ) + } diff --git a/src/battle/src/Update/Character/DisplayNavigator.elm b/src/battle/src/Update/Character/DisplayNavigator.elm new file mode 100644 index 0000000..9c935ee --- /dev/null +++ b/src/battle/src/Update/Character/DisplayNavigator.elm @@ -0,0 +1,42 @@ +module Update.Character.ScrollTo exposing (apply_to_ref, apply_to_character) + +-- Elm ------------------------------------------------------------------------- +import Task + +-- Local Module ---------------------------------------------------------------- +import Action.Scroll + +import Struct.Battle +import Struct.Character +import Struct.Event +import Struct.Model + +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- +apply_to_character : ( + Struct.Character.Type -> + Struct.Model.Type -> + (Struct.Model.Type, (Cmd Struct.Event.Type)) + ) +apply_to_character char model = + ( + model, + (Task.attempt + (Struct.Event.attempted) + (Action.Scroll.to + (Struct.Character.get_location char) + model.ui + ) + ) + ) + +apply_to_ref : Int -> Struct.Model.Type -> (Cmd Struct.Event.Type) +apply_to_ref char_ix model = + case (Struct.Battle.get_character char_ix model.battle) of + (Just char) -> (apply_to_character char model) + Nothing -> (model, Cmd.none) diff --git a/src/battle/src/Update/Character/LookForCharacter.elm b/src/battle/src/Update/Character/LookForCharacter.elm new file mode 100644 index 0000000..1c2af0a --- /dev/null +++ b/src/battle/src/Update/Character/LookForCharacter.elm @@ -0,0 +1,52 @@ +module Update.LookForCharacter exposing (apply_to) + +-- Elm ------------------------------------------------------------------------- +import Array +import Task + +-- Local Module ---------------------------------------------------------------- +import Action.Scroll + +import Struct.Battle +import Struct.Character +import Struct.Event +import Struct.Model +import Struct.UI + +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- +scroll_to_char : Struct.Model.Type -> Int -> (Cmd Struct.Event.Type) +scroll_to_char model char_ix = + case (Struct.Battle.get_character char_ix model.battle) of + (Just char) -> + (Task.attempt + (Struct.Event.attempted) + (Action.Scroll.to + (Struct.Character.get_location char) + model.ui + ) + ) + + Nothing -> + Cmd.none + +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- +apply_to : ( + Struct.Model.Type -> + Int -> + (Struct.Model.Type, (Cmd Struct.Event.Type)) + ) +apply_to model target_ix = + ( + {model | + ui = + (Struct.UI.set_previous_action + (Just (Struct.UI.SelectedCharacter target_ix)) + model.ui + ) + }, + (scroll_to_char model target_ix) + ) diff --git a/src/battle/src/Update/Character/ScrollTo.elm b/src/battle/src/Update/Character/ScrollTo.elm new file mode 100644 index 0000000..9c935ee --- /dev/null +++ b/src/battle/src/Update/Character/ScrollTo.elm @@ -0,0 +1,42 @@ +module Update.Character.ScrollTo exposing (apply_to_ref, apply_to_character) + +-- Elm ------------------------------------------------------------------------- +import Task + +-- Local Module ---------------------------------------------------------------- +import Action.Scroll + +import Struct.Battle +import Struct.Character +import Struct.Event +import Struct.Model + +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- +apply_to_character : ( + Struct.Character.Type -> + Struct.Model.Type -> + (Struct.Model.Type, (Cmd Struct.Event.Type)) + ) +apply_to_character char model = + ( + model, + (Task.attempt + (Struct.Event.attempted) + (Action.Scroll.to + (Struct.Character.get_location char) + model.ui + ) + ) + ) + +apply_to_ref : Int -> Struct.Model.Type -> (Cmd Struct.Event.Type) +apply_to_ref char_ix model = + case (Struct.Battle.get_character char_ix model.battle) of + (Just char) -> (apply_to_character char model) + Nothing -> (model, Cmd.none) diff --git a/src/battle/src/Update/CharacterTurn.elm b/src/battle/src/Update/CharacterTurn.elm new file mode 100644 index 0000000..19c75b6 --- /dev/null +++ b/src/battle/src/Update/CharacterTurn.elm @@ -0,0 +1,18 @@ +module Update.CharacterTurn exposing (apply_to) + +-- Elm ------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- +apply_to : ( + Struct.Model.Type -> + Int -> + (Struct.Model.Type, (Cmd Struct.Event.Type)) + ) +apply_to model target_char_id = + diff --git a/src/battle/src/Update/CharacterTurn/AbortTurn.elm b/src/battle/src/Update/CharacterTurn/AbortTurn.elm new file mode 100644 index 0000000..7d45d08 --- /dev/null +++ b/src/battle/src/Update/CharacterTurn/AbortTurn.elm @@ -0,0 +1,22 @@ +module Update.CharacterTurn.AbortTurn exposing (apply_to) + +-- Local Module ---------------------------------------------------------------- +import Struct.CharacterTurn +import Struct.Event +import Struct.Model + +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- +apply_to : Struct.Model.Type -> (Struct.Model.Type, (Cmd Struct.Event.Type)) +apply_to model = + ( + {model | + char_turn = (Struct.CharacterTurn.new) + }, + Cmd.none + ) diff --git a/src/battle/src/Update/CharacterTurn/AttackWithoutMoving.elm b/src/battle/src/Update/CharacterTurn/AttackWithoutMoving.elm new file mode 100644 index 0000000..7946b8f --- /dev/null +++ b/src/battle/src/Update/CharacterTurn/AttackWithoutMoving.elm @@ -0,0 +1,40 @@ +module Update.CharacterTurn.AttackWithoutMoving exposing (apply_to) + +-- Local Module ---------------------------------------------------------------- +import Struct.CharacterTurn +import Struct.Error +import Struct.Event +import Struct.Model + +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- +make_it_so : Struct.Model.Type -> Struct.Model.Type +make_it_so model = + {model | + char_turn = (Struct.CharacterTurn.lock_path model.char_turn) + } + +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- +apply_to : Struct.Model.Type -> (Struct.Model.Type, (Cmd Struct.Event.Type)) +apply_to model = + case (Struct.CharacterTurn.get_state model.char_turn) of + Struct.CharacterTurn.SelectedCharacter -> + ((make_it_so model), Cmd.none) + + _ -> + ( + (Struct.Model.invalidate + (Struct.Error.new + Struct.Error.Programming + ( + "Attempt to do an attack without moving, despite no" + ++ "character being selected." + ) + ) + model + ), + Cmd.none + ) diff --git a/src/battle/src/Update/CharacterTurn/EndTurn.elm b/src/battle/src/Update/CharacterTurn/EndTurn.elm new file mode 100644 index 0000000..b3b6cb0 --- /dev/null +++ b/src/battle/src/Update/CharacterTurn/EndTurn.elm @@ -0,0 +1,96 @@ +module Update.CharacterTurn.EndTurn exposing (apply_to) + +-- Local Module ---------------------------------------------------------------- +import Comm.CharacterTurn + +import Struct.Battle +import Struct.Character +import Struct.CharacterTurn +import Struct.Error +import Struct.Event +import Struct.Model +import Struct.Navigator + +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- +maybe_disable_char : ( + (Maybe Struct.Character.Type) -> + (Maybe Struct.Character.Type) + ) +maybe_disable_char maybe_char = + case maybe_char of + (Just char) -> (Just (Struct.Character.set_enabled False char)) + Nothing -> Nothing + +make_it_so : ( + Struct.Model.Type -> + Struct.Character.Type -> + Struct.Navigator.Type -> + (Struct.Model.Type, (Cmd Struct.Event.Type)) + ) +make_it_so model char nav = + case (Comm.CharacterTurn.try model) of + (Just cmd) -> + ( + {model | + char_turn = (Struct.CharacterTurn.new), + battle = + (Struct.Battle.update_character + (Struct.Character.get_index char) + (maybe_disable_char) + model.battle + ) + }, + cmd + ) + + Nothing -> + (model, Cmd.none) + +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- +apply_to : Struct.Model.Type -> (Struct.Model.Type, (Cmd Struct.Event.Type)) +apply_to model = + case + ( + (Struct.CharacterTurn.get_state model.char_turn), + (Struct.CharacterTurn.maybe_get_active_character + model.char_turn + ), + (Struct.CharacterTurn.maybe_get_navigator model.char_turn) + ) + of + ( + Struct.CharacterTurn.MovedCharacter, + (Just char), + (Just nav)) -> + (make_it_so model char nav) + + ( + Struct.CharacterTurn.ChoseTarget, + (Just char), + (Just nav)) -> + (make_it_so model char nav) + + ( + Struct.CharacterTurn.SwitchedWeapons, + (Just char), + (Just nav)) -> + (make_it_so model char nav) + + (Struct.CharacterTurn.SelectedCharacter, (Just char), (Just nav)) -> + (make_it_so model char nav) + + (_, _, _) -> + ( + (Struct.Model.invalidate + (Struct.Error.new + Struct.Error.Programming + "Character turn appears to be in an illegal state." + ) + model + ), + Cmd.none + ) diff --git a/src/battle/src/Update/CharacterTurn/RequestDirection.elm b/src/battle/src/Update/CharacterTurn/RequestDirection.elm new file mode 100644 index 0000000..9b3ef0e --- /dev/null +++ b/src/battle/src/Update/CharacterTurn/RequestDirection.elm @@ -0,0 +1,101 @@ +module Update.CharacterTurn.RequestDirection exposing (apply_to) + +-- Battle Map ------------------------------------------------------------------ +import BattleMap.Struct.Direction +import BattleMap.Struct.Map + +-- Battle Characters ----------------------------------------------------------- +import BattleCharacters.Struct.Character + +-- Local Module ---------------------------------------------------------------- +import Struct.Battle +import Struct.Character +import Struct.CharacterTurn +import Struct.Error +import Struct.Event +import Struct.Model +import Struct.Navigator +import Struct.UI + +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- +make_it_so : ( + Struct.Model.Type -> + Struct.Character.Type -> + Struct.Navigator.Type -> + BattleMap.Struct.Direction.Type -> + Struct.Model.Type + ) +make_it_so model char navigator dir = + case (Struct.Navigator.maybe_add_step dir navigator) of + (Just new_navigator) -> + {model | + char_turn = + (Struct.CharacterTurn.set_navigator + new_navigator + (Struct.CharacterTurn.set_active_character_no_reset + (Struct.Character.set_base_character + (BattleCharacters.Struct.Character.set_extra_omnimods + (BattleMap.Struct.Map.get_omnimods_at + (Struct.Navigator.get_current_location + new_navigator + ) + model.map_data_set + (Struct.Battle.get_map model.battle) + ) + (Struct.Character.get_base_character char) + ) + char + ) + model.char_turn + ) + ), + ui = + (Struct.UI.set_previous_action + (Just Struct.UI.UsedManualControls) + model.ui + ) + } + + Nothing -> + (Struct.Model.invalidate + (Struct.Error.new + Struct.Error.IllegalAction + "Unreachable/occupied tile." + ) + model + ) + +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- +apply_to : ( + Struct.Model.Type -> + BattleMap.Struct.Direction.Type -> + (Struct.Model.Type, (Cmd Struct.Event.Type)) + ) +apply_to model dir = + case + ( + (Struct.CharacterTurn.maybe_get_navigator model.char_turn), + (Struct.CharacterTurn.maybe_get_active_character model.char_turn) + ) + of + ((Just navigator), (Just char)) -> + ( + (make_it_so model char navigator dir), + Cmd.none + ) + + _ -> + ( + (Struct.Model.invalidate + (Struct.Error.new + Struct.Error.IllegalAction + "This can only be done while moving a character." + ) + model + ), + Cmd.none + ) diff --git a/src/battle/src/Update/CharacterTurn/SwitchWeapon.elm b/src/battle/src/Update/CharacterTurn/SwitchWeapon.elm new file mode 100644 index 0000000..122f2a4 --- /dev/null +++ b/src/battle/src/Update/CharacterTurn/SwitchWeapon.elm @@ -0,0 +1,97 @@ +module Update.CharacterTurn.SwitchWeapon exposing (apply_to) + +-- Battle Characters ----------------------------------------------------------- +import BattleCharacters.Struct.Weapon +import BattleCharacters.Struct.Character + +-- Local module ---------------------------------------------------------------- +import Struct.Character +import Struct.CharacterTurn +import Struct.Error +import Struct.Event +import Struct.Model + +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- +make_it_so : Struct.Model.Type -> Struct.Model.Type +make_it_so model = + case + ( + (Struct.CharacterTurn.maybe_get_active_character model.char_turn), + (Struct.CharacterTurn.maybe_get_navigator model.char_turn) + ) + of + ((Just char), (Just nav)) -> + let + new_base_character = + (BattleCharacters.Struct.Character.switch_weapons + (Struct.Character.get_base_character char) + ) + active_weapon = + (BattleCharacters.Struct.Character.get_active_weapon + new_base_character + ) + in + {model | + char_turn = + (Struct.CharacterTurn.show_attack_range_navigator + (BattleCharacters.Struct.Weapon.get_defense_range + active_weapon + ) + (BattleCharacters.Struct.Weapon.get_attack_range + active_weapon + ) + (Struct.CharacterTurn.set_has_switched_weapons + True + (Struct.CharacterTurn.set_active_character_no_reset + (Struct.Character.set_base_character + new_base_character + char + ) + model.char_turn + ) + ) + ) + } + + (_, _) -> + (Struct.Model.invalidate + (Struct.Error.new + Struct.Error.Programming + """ + CharacterTurn structure in the 'SelectedCharacter' or + 'MovedCharacter' state without any character being selected. + """) + model + ) + +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- +apply_to : ( + Struct.Model.Type -> + (Struct.Model.Type, (Cmd Struct.Event.Type)) + ) +apply_to model = + case (Struct.CharacterTurn.get_state model.char_turn) of + Struct.CharacterTurn.SelectedCharacter -> + ((make_it_so model), Cmd.none) + + Struct.CharacterTurn.MovedCharacter -> + ((make_it_so model), Cmd.none) + + _ -> + ( + (Struct.Model.invalidate + (Struct.Error.new + Struct.Error.Programming + ( + "Attempt to switch weapons as a secondary action or" + ++ " without character being selected." + ) + ) + model + ), + Cmd.none + ) diff --git a/src/battle/src/Update/CharacterTurn/ToggleTarget.elm b/src/battle/src/Update/CharacterTurn/ToggleTarget.elm new file mode 100644 index 0000000..272163e --- /dev/null +++ b/src/battle/src/Update/CharacterTurn/ToggleTarget.elm @@ -0,0 +1,74 @@ +module Update.CharacterTurn.ToggleTarget exposing (apply_to_ref) + +-- Local Module ---------------------------------------------------------------- +import Struct.CharacterTurn +import Struct.Event +import Struct.Model + +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- +can_target_character : ( + Struct.Model.Type -> + Struct.Character.Type -> + Bool + ) +can_target_character model target = + ( + (Struct.Character.is_alive target) + && + ( + case + (Struct.CharacterTurn.maybe_get_navigator + model.char_turn + ) + of + (Just nav) -> + case + (Struct.Navigator.maybe_get_path_to + (BattleMap.Struct.Location.get_ref + (Struct.Character.get_location target) + ) + nav + ) + of + (Just _) -> True + _ -> False + + _ -> + False + ) + ) + +attack_character : ( + Struct.Model.Type -> + Int -> + Struct.Character.Type -> + Struct.Model.Type + ) +attack_character model target_char_id target_char = + {model | + char_turn = + (Struct.CharacterTurn.set_target + (Just target_char_id) + model.char_turn + ), + ui = + (Struct.UI.reset_displayed_nav + (Struct.UI.reset_displayed_tab + (Struct.UI.set_previous_action Nothing model.ui) + ) + ) + } + +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- +apply_to : Struct.Model.Type -> (Struct.Model.Type, (Cmd Struct.Event.Type)) +apply_to model = + ( + {model | + char_turn = (Struct.CharacterTurn.new) + }, + Cmd.none + ) diff --git a/src/battle/src/Update/CharacterTurn/UndoAction.elm b/src/battle/src/Update/CharacterTurn/UndoAction.elm new file mode 100644 index 0000000..284b37d --- /dev/null +++ b/src/battle/src/Update/CharacterTurn/UndoAction.elm @@ -0,0 +1,133 @@ +module Update.CharacterTurn.UndoAction exposing (apply_to) + +-- Elm ------------------------------------------------------------------------- +import Array + +-- Battle ---------------------------------------------------------------------- +import Battle.Struct.Attributes + +-- Battle Characters ----------------------------------------------------------- +import BattleCharacters.Struct.Character +import BattleCharacters.Struct.Weapon + +-- Battle Map ------------------------------------------------------------------ +import BattleMap.Struct.Map + +-- Local Module ---------------------------------------------------------------- +import Struct.Battle +import Struct.Character +import Struct.CharacterTurn +import Struct.Event +import Struct.Model +import Struct.Navigator + +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- +get_character_navigator : ( + Struct.Battle.Type -> + Struct.Character.Type -> + Struct.Navigator.Type + ) +get_character_navigator battle char = + let + base_char = (Struct.Character.get_base_character char) + weapon = (BattleCharacters.Struct.Character.get_active_weapon base_char) + in + (Struct.Navigator.new + (Struct.Character.get_location char) + (Battle.Struct.Attributes.get_movement_points + (BattleCharacters.Struct.Character.get_attributes base_char) + ) + (BattleCharacters.Struct.Weapon.get_defense_range weapon) + (BattleCharacters.Struct.Weapon.get_attack_range weapon) + (BattleMap.Struct.Map.get_tile_data_function + (Struct.Battle.get_map battle) + (List.map + (Struct.Character.get_location) + (Array.toList (Struct.Battle.get_characters battle)) + ) + (Struct.Character.get_location char) + ) + ) + +handle_reset_character_turn : Struct.Model.Type -> Struct.CharacterTurn.Type +handle_reset_character_turn model = + case (Struct.CharacterTurn.maybe_get_active_character model.char_turn) of + Nothing -> model.char_turn + + (Just current_char) -> + case + (Struct.Battle.get_character + (Struct.Character.get_index current_char) + model.battle + ) + of + Nothing -> model.char_turn + + (Just reset_char) -> + (Struct.CharacterTurn.set_navigator + (get_character_navigator model.battle reset_char) + (Struct.CharacterTurn.set_active_character + reset_char + (Struct.CharacterTurn.new) + ) + ) + +handle_undo_switched_weapons : Struct.Model.Type -> Struct.CharacterTurn.Type +handle_undo_switched_weapons model = + case (Struct.CharacterTurn.maybe_get_active_character model.char_turn) of + Nothing -> model.char_turn + + (Just char) -> + (Struct.CharacterTurn.lock_path + (Struct.CharacterTurn.unlock_path + (Struct.CharacterTurn.set_has_switched_weapons + False + (Struct.CharacterTurn.set_active_character_no_reset + (Struct.Character.set_base_character + (BattleCharacters.Struct.Character.switch_weapons + (Struct.Character.get_base_character char) + ) + char + ) + model.char_turn + ) + ) + ) + ) + +handle_undo_chose_target : Struct.Model.Type -> Struct.CharacterTurn.Type +handle_undo_chose_target model = + (Struct.CharacterTurn.set_target Nothing model.char_turn) +-- Was previously something like below, but that looks really wrong: +-- (Struct.CharacterTurn.lock_path +-- (Struct.CharacterTurn.unlock_path +-- model.char_turn +-- ) +-- ) + +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- +apply_to : Struct.Model.Type -> (Struct.Model.Type, (Cmd Struct.Event.Type)) +apply_to model = + ( + {model | + char_turn = + ( + case (Struct.CharacterTurn.get_state model.char_turn) of + Struct.CharacterTurn.ChoseTarget -> + (handle_undo_chose_target model) + + Struct.CharacterTurn.SwitchedWeapons -> + (handle_undo_switched_weapons model) + + Struct.CharacterTurn.MovedCharacter -> + (handle_reset_character_turn model) + + _ -> model.char_turn + ) + }, + Cmd.none + ) diff --git a/src/battle/src/Update/DisplayCharacterInfo.elm b/src/battle/src/Update/DisplayCharacterInfo.elm deleted file mode 100644 index ed1c0ec..0000000 --- a/src/battle/src/Update/DisplayCharacterInfo.elm +++ /dev/null @@ -1,55 +0,0 @@ -module Update.DisplayCharacterInfo exposing (apply_to) - --- Elm ------------------------------------------------------------------------- -import Array -import Task - --- Local Module ---------------------------------------------------------------- -import Action.Scroll - -import Struct.Battle -import Struct.Character -import Struct.Event -import Struct.Model -import Struct.UI - --------------------------------------------------------------------------------- --- LOCAL ----------------------------------------------------------------------- --------------------------------------------------------------------------------- -scroll_to_char : Struct.Model.Type -> Int -> (Cmd Struct.Event.Type) -scroll_to_char model char_ix = - case (Struct.Battle.get_character char_ix model.battle) of - (Just char) -> - (Task.attempt - (Struct.Event.attempted) - (Action.Scroll.to - (Struct.Character.get_location char) - model.ui - ) - ) - - Nothing -> - Cmd.none - --------------------------------------------------------------------------------- --- EXPORTED -------------------------------------------------------------------- --------------------------------------------------------------------------------- -apply_to : ( - Struct.Model.Type -> - Int -> - (Struct.Model.Type, (Cmd Struct.Event.Type)) - ) -apply_to model target_ref = - ( - {model | - ui = - (Struct.UI.set_displayed_tab - Struct.UI.StatusTab - (Struct.UI.set_previous_action - (Just (Struct.UI.SelectedCharacter target_ref)) - model.ui - ) - ) - }, - (scroll_to_char model target_ref) - ) diff --git a/src/battle/src/Update/EndTurn.elm b/src/battle/src/Update/EndTurn.elm deleted file mode 100644 index bc7631b..0000000 --- a/src/battle/src/Update/EndTurn.elm +++ /dev/null @@ -1,96 +0,0 @@ -module Update.EndTurn exposing (apply_to) - --- Local Module ---------------------------------------------------------------- -import Comm.CharacterTurn - -import Struct.Battle -import Struct.Character -import Struct.CharacterTurn -import Struct.Error -import Struct.Event -import Struct.Model -import Struct.Navigator - --------------------------------------------------------------------------------- --- LOCAL ----------------------------------------------------------------------- --------------------------------------------------------------------------------- -maybe_disable_char : ( - (Maybe Struct.Character.Type) -> - (Maybe Struct.Character.Type) - ) -maybe_disable_char maybe_char = - case maybe_char of - (Just char) -> (Just (Struct.Character.set_enabled False char)) - Nothing -> Nothing - -make_it_so : ( - Struct.Model.Type -> - Struct.Character.Type -> - Struct.Navigator.Type -> - (Struct.Model.Type, (Cmd Struct.Event.Type)) - ) -make_it_so model char nav = - case (Comm.CharacterTurn.try model) of - (Just cmd) -> - ( - {model | - char_turn = (Struct.CharacterTurn.new), - battle = - (Struct.Battle.update_character - (Struct.Character.get_index char) - (maybe_disable_char) - model.battle - ) - }, - cmd - ) - - Nothing -> - (model, Cmd.none) - --------------------------------------------------------------------------------- --- EXPORTED -------------------------------------------------------------------- --------------------------------------------------------------------------------- -apply_to : Struct.Model.Type -> (Struct.Model.Type, (Cmd Struct.Event.Type)) -apply_to model = - case - ( - (Struct.CharacterTurn.get_state model.char_turn), - (Struct.CharacterTurn.maybe_get_active_character - model.char_turn - ), - (Struct.CharacterTurn.maybe_get_navigator model.char_turn) - ) - of - ( - Struct.CharacterTurn.MovedCharacter, - (Just char), - (Just nav)) -> - (make_it_so model char nav) - - ( - Struct.CharacterTurn.ChoseTarget, - (Just char), - (Just nav)) -> - (make_it_so model char nav) - - ( - Struct.CharacterTurn.SwitchedWeapons, - (Just char), - (Just nav)) -> - (make_it_so model char nav) - - (Struct.CharacterTurn.SelectedCharacter, (Just char), (Just nav)) -> - (make_it_so model char nav) - - (_, _, _) -> - ( - (Struct.Model.invalidate - (Struct.Error.new - Struct.Error.Programming - "Character turn appears to be in an illegal state." - ) - model - ), - Cmd.none - ) diff --git a/src/battle/src/Update/GoToMainMenu.elm b/src/battle/src/Update/GoToMainMenu.elm deleted file mode 100644 index a0471f2..0000000 --- a/src/battle/src/Update/GoToMainMenu.elm +++ /dev/null @@ -1,24 +0,0 @@ -module Update.GoToMainMenu exposing (apply_to) - --- Shared ---------------------------------------------------------------------- -import Action.Ports - --- Local Module ---------------------------------------------------------------- -import Constants.IO - -import Struct.Model -import Struct.Event - --------------------------------------------------------------------------------- --- LOCAL ----------------------------------------------------------------------- --------------------------------------------------------------------------------- - --------------------------------------------------------------------------------- --- EXPORTED -------------------------------------------------------------------- --------------------------------------------------------------------------------- -apply_to : Struct.Model.Type -> (Struct.Model.Type, (Cmd Struct.Event.Type)) -apply_to model = - ( - model, - (Action.Ports.go_to (Constants.IO.base_url ++"/main-menu/")) - ) diff --git a/src/battle/src/Update/HandleServerReply.elm b/src/battle/src/Update/HandleServerReply.elm index 3bea958..e2dad31 100644 --- a/src/battle/src/Update/HandleServerReply.elm +++ b/src/battle/src/Update/HandleServerReply.elm @@ -20,6 +20,8 @@ import Struct.Flags import Util.Http +import Update.Sequence + -- Battle Characters ----------------------------------------------------------- import BattleCharacters.Struct.DataSetItem import BattleCharacters.Struct.Equipment @@ -54,186 +56,136 @@ import Update.Puppeteer -- LOCAL ----------------------------------------------------------------------- -------------------------------------------------------------------------------- disconnected : ( - (Struct.Model.Type, (List (Cmd Struct.Event.Type))) -> - (Struct.Model.Type, (List (Cmd Struct.Event.Type))) + Struct.Model.Type -> + (Cmd Struct.Event.Type) ) -disconnected current_state = - let (model, cmds) = current_state in - ( - model, - [ - (Action.Ports.go_to +disconnected model = + ( + model, + (Action.Ports.go_to + ( + Constants.IO.base_url + ++ "/login/?action=disconnect&goto=" + ++ + (Url.percentEncode ( - Constants.IO.base_url - ++ "/login/?action=disconnect&goto=" - ++ - (Url.percentEncode - ( - "/battle/?" - ++ (Struct.Flags.get_parameters_as_url model.flags) - ) - ) + "/battle/?" + ++ (Struct.Flags.get_parameters_as_url model.flags) ) ) - ] + ) ) + ) add_characters_data_set_item : ( BattleCharacters.Struct.DataSetItem.Type -> - (Struct.Model.Type, (List (Cmd Struct.Event.Type))) -> - (Struct.Model.Type, (List (Cmd Struct.Event.Type))) + Struct.Model.Type -> + (Cmd Struct.Event.Type) + ) +add_characters_data_set_item item model = + ( + {model | + characters_data_set = + (BattleCharacters.Struct.DataSetItem.add_to + item + model.characters_data_set + ) + }, + Cmd.none ) -add_characters_data_set_item item current_state = - let (model, cmds) = current_state in - ( - {model | - characters_data_set = - (BattleCharacters.Struct.DataSetItem.add_to - item - model.characters_data_set - ) - }, - cmds - ) add_map_data_set_item : ( BattleMap.Struct.DataSetItem.Type -> - (Struct.Model.Type, (List (Cmd Struct.Event.Type))) -> - (Struct.Model.Type, (List (Cmd Struct.Event.Type))) + Struct.Model.Type -> + (Cmd Struct.Event.Type) + ) +add_map_data_set_item item model = + ( + {model | + map_data_set = + (BattleMap.Struct.DataSetItem.add_to item model.map_data_set) + }, + Cmd.none ) -add_map_data_set_item item current_state = - let (model, cmds) = current_state in - ( - {model | - map_data_set = - (BattleMap.Struct.DataSetItem.add_to item model.map_data_set) - }, - cmds - ) add_player : ( Struct.Player.Type -> - (Struct.Model.Type, (List (Cmd Struct.Event.Type))) -> - (Struct.Model.Type, (List (Cmd Struct.Event.Type))) + Struct.Model.Type -> + (Cmd Struct.Event.Type) + ) +add_player pl model = + ( + {model | + battle = (Struct.Battle.add_player model.flags pl model.battle) + }, + Cmd.none ) -add_player pl current_state = - let (model, cmds) = current_state in - ( - {model | - battle = (Struct.Battle.add_player model.flags pl model.battle) - }, - cmds - ) add_character : ( Struct.Character.Unresolved -> - (Struct.Model.Type, (List (Cmd Struct.Event.Type))) -> - (Struct.Model.Type, (List (Cmd Struct.Event.Type))) + Struct.Model.Type -> + (Cmd Struct.Event.Type) ) -add_character unresolved_char current_state = - let (model, cmds) = current_state in - ( - {model | - battle = - (Struct.Battle.add_character - (Struct.Character.resolve - (\loc -> - (BattleMap.Struct.Map.get_omnimods_at - loc - model.map_data_set - (Struct.Battle.get_map model.battle) - ) - ) - (BattleCharacters.Struct.Equipment.resolve - model.characters_data_set +add_character unresolved_char model = + ( + {model | + battle = + (Struct.Battle.add_character + (Struct.Character.resolve + (\loc -> + (BattleMap.Struct.Map.get_omnimods_at + loc + model.map_data_set + (Struct.Battle.get_map model.battle) ) - unresolved_char ) - model.battle + (BattleCharacters.Struct.Equipment.resolve + model.characters_data_set + ) + unresolved_char ) - }, - cmds - ) + model.battle + ) + }, + Cmd.none + ) set_map : ( BattleMap.Struct.Map.Type -> - (Struct.Model.Type, (List (Cmd Struct.Event.Type))) -> - (Struct.Model.Type, (List (Cmd Struct.Event.Type))) + Struct.Model.Type -> + (Cmd Struct.Event.Type) ) -set_map map current_state = - let (model, cmds) = current_state in - ( - {model | - battle = - (Struct.Battle.set_map - (BattleMap.Struct.Map.solve_tiles - model.map_data_set - map - ) - model.battle +set_map map model = + ( + {model | + battle = + (Struct.Battle.set_map + (BattleMap.Struct.Map.solve_tiles + model.map_data_set + map ) - }, - cmds - ) - -add_to_timeline : ( - (List Struct.TurnResult.Type) -> - (Struct.Model.Type, (List (Cmd Struct.Event.Type))) -> - (Struct.Model.Type, (List (Cmd Struct.Event.Type))) - ) -add_to_timeline turn_results current_state = - let - (model, cmds) = current_state - (next_model, new_cmd) = - (Update.Puppeteer.apply_to - ( - {model | - puppeteer = - (List.foldl - (\turn_result puppeteer -> - (Struct.Puppeteer.append_forward - (Struct.PuppeteerAction.from_turn_result - turn_result - ) - puppeteer - ) - ) - model.puppeteer - turn_results - ), - battle = - (Struct.Battle.set_timeline - (Array.append - (Array.fromList turn_results) - (Struct.Battle.get_timeline model.battle) - ) - model.battle - ) - } + model.battle ) - ) - in - ( - next_model, - if (new_cmd == Cmd.none) - then cmds - else (new_cmd :: cmds) - ) + }, + Cmd.none + ) -set_timeline : ( +add_to_timeline : ( (List Struct.TurnResult.Type) -> - (Struct.Model.Type, (List (Cmd Struct.Event.Type))) -> - (Struct.Model.Type, (List (Cmd Struct.Event.Type))) + Struct.Model.Type -> + (Cmd Struct.Event.Type) ) -set_timeline turn_results current_state = - let (model, cmds) = current_state in +add_to_timeline turn_results model = + (Update.Puppeteer.apply_to ( {model | puppeteer = - (List.foldr + (List.foldl (\turn_result puppeteer -> - (Struct.Puppeteer.append_backward - (Struct.PuppeteerAction.from_turn_result turn_result) + (Struct.Puppeteer.append_forward + (Struct.PuppeteerAction.from_turn_result + turn_result + ) puppeteer ) ) @@ -242,44 +194,71 @@ set_timeline turn_results current_state = ), battle = (Struct.Battle.set_timeline - (Array.fromList turn_results) + (Array.append + (Array.fromList turn_results) + (Struct.Battle.get_timeline model.battle) + ) model.battle ) - }, - cmds + } ) + ) + +set_timeline : ( + (List Struct.TurnResult.Type) -> + Struct.Model.Type -> + (Cmd Struct.Event.Type) + ) +set_timeline turn_results model = + ( + {model | + puppeteer = + (List.foldr + (\turn_result puppeteer -> + (Struct.Puppeteer.append_backward + (Struct.PuppeteerAction.from_turn_result turn_result) + puppeteer + ) + ) + model.puppeteer + turn_results + ), + battle = + (Struct.Battle.set_timeline + (Array.fromList turn_results) + model.battle + ) + }, + Cmd.none + ) -apply_command : ( +server_command_to_update : ( Struct.ServerReply.Type -> - (Struct.Model.Type, (List (Cmd Struct.Event.Type))) -> - (Struct.Model.Type, (List (Cmd Struct.Event.Type))) + (Struct.Model.Type -> (Struct.Model.Type, (Cmd Struct.Event.Type))) ) -apply_command command current_state = - case command of - Struct.ServerReply.Disconnected -> (disconnected current_state) +server_command_to_update server_command = + case server_command of + Struct.ServerReply.Disconnected -> (disconnected) (Struct.ServerReply.AddCharactersDataSetItem item) -> - (add_characters_data_set_item item current_state) + (add_characters_data_set_item item) (Struct.ServerReply.AddMapDataSetItem item) -> - (add_map_data_set_item item current_state) + (add_map_data_set_item item) (Struct.ServerReply.AddPlayer pl) -> - (add_player pl current_state) + (add_player pl) (Struct.ServerReply.AddCharacter char) -> - (add_character char current_state) + (add_character char) - (Struct.ServerReply.SetMap map) -> - (set_map map current_state) + (Struct.ServerReply.SetMap map) -> (set_map map) - (Struct.ServerReply.TurnResults results) -> - (add_to_timeline results current_state) + (Struct.ServerReply.TurnResults results) -> (add_to_timeline results) - (Struct.ServerReply.SetTimeline timeline) -> - (set_timeline timeline current_state) + (Struct.ServerReply.SetTimeline timeline) -> (set_timeline timeline) - Struct.ServerReply.Okay -> current_state + Struct.ServerReply.Okay -> (do_nothing) -------------------------------------------------------------------------------- -- EXPORTED -------------------------------------------------------------------- @@ -302,17 +281,8 @@ apply_to model query_result = Cmd.none ) - (Result.Ok commands) -> - let - (new_model, elm_commands) = - (List.foldl (apply_command) (model, [Cmd.none]) commands) - in - ( - new_model, - ( - case elm_commands of - [] -> Cmd.none - [cmd] -> cmd - _ -> (Cmd.batch elm_commands) - ) - ) + (Result.Ok server_command) -> + (Update.Sequence.sequence + (List.map (server_command_to_update) commands) + model + ) diff --git a/src/battle/src/Update/LookForCharacter.elm b/src/battle/src/Update/LookForCharacter.elm deleted file mode 100644 index 1c2af0a..0000000 --- a/src/battle/src/Update/LookForCharacter.elm +++ /dev/null @@ -1,52 +0,0 @@ -module Update.LookForCharacter exposing (apply_to) - --- Elm ------------------------------------------------------------------------- -import Array -import Task - --- Local Module ---------------------------------------------------------------- -import Action.Scroll - -import Struct.Battle -import Struct.Character -import Struct.Event -import Struct.Model -import Struct.UI - --------------------------------------------------------------------------------- --- LOCAL ----------------------------------------------------------------------- --------------------------------------------------------------------------------- -scroll_to_char : Struct.Model.Type -> Int -> (Cmd Struct.Event.Type) -scroll_to_char model char_ix = - case (Struct.Battle.get_character char_ix model.battle) of - (Just char) -> - (Task.attempt - (Struct.Event.attempted) - (Action.Scroll.to - (Struct.Character.get_location char) - model.ui - ) - ) - - Nothing -> - Cmd.none - --------------------------------------------------------------------------------- --- EXPORTED -------------------------------------------------------------------- --------------------------------------------------------------------------------- -apply_to : ( - Struct.Model.Type -> - Int -> - (Struct.Model.Type, (Cmd Struct.Event.Type)) - ) -apply_to model target_ix = - ( - {model | - ui = - (Struct.UI.set_previous_action - (Just (Struct.UI.SelectedCharacter target_ix)) - model.ui - ) - }, - (scroll_to_char model target_ix) - ) diff --git a/src/battle/src/Update/RequestDirection.elm b/src/battle/src/Update/RequestDirection.elm deleted file mode 100644 index de301c0..0000000 --- a/src/battle/src/Update/RequestDirection.elm +++ /dev/null @@ -1,101 +0,0 @@ -module Update.RequestDirection exposing (apply_to) - --- Battle Map ------------------------------------------------------------------ -import BattleMap.Struct.Direction -import BattleMap.Struct.Map - --- Battle Characters ----------------------------------------------------------- -import BattleCharacters.Struct.Character - --- Local Module ---------------------------------------------------------------- -import Struct.Battle -import Struct.Character -import Struct.CharacterTurn -import Struct.Error -import Struct.Event -import Struct.Model -import Struct.Navigator -import Struct.UI - --------------------------------------------------------------------------------- --- LOCAL ----------------------------------------------------------------------- --------------------------------------------------------------------------------- -make_it_so : ( - Struct.Model.Type -> - Struct.Character.Type -> - Struct.Navigator.Type -> - BattleMap.Struct.Direction.Type -> - Struct.Model.Type - ) -make_it_so model char navigator dir = - case (Struct.Navigator.maybe_add_step dir navigator) of - (Just new_navigator) -> - {model | - char_turn = - (Struct.CharacterTurn.set_navigator - new_navigator - (Struct.CharacterTurn.set_active_character_no_reset - (Struct.Character.set_base_character - (BattleCharacters.Struct.Character.set_extra_omnimods - (BattleMap.Struct.Map.get_omnimods_at - (Struct.Navigator.get_current_location - new_navigator - ) - model.map_data_set - (Struct.Battle.get_map model.battle) - ) - (Struct.Character.get_base_character char) - ) - char - ) - model.char_turn - ) - ), - ui = - (Struct.UI.set_previous_action - (Just Struct.UI.UsedManualControls) - model.ui - ) - } - - Nothing -> - (Struct.Model.invalidate - (Struct.Error.new - Struct.Error.IllegalAction - "Unreachable/occupied tile." - ) - model - ) - --------------------------------------------------------------------------------- --- EXPORTED -------------------------------------------------------------------- --------------------------------------------------------------------------------- -apply_to : ( - Struct.Model.Type -> - BattleMap.Struct.Direction.Type -> - (Struct.Model.Type, (Cmd Struct.Event.Type)) - ) -apply_to model dir = - case - ( - (Struct.CharacterTurn.maybe_get_navigator model.char_turn), - (Struct.CharacterTurn.maybe_get_active_character model.char_turn) - ) - of - ((Just navigator), (Just char)) -> - ( - (make_it_so model char navigator dir), - Cmd.none - ) - - _ -> - ( - (Struct.Model.invalidate - (Struct.Error.new - Struct.Error.IllegalAction - "This can only be done while moving a character." - ) - model - ), - Cmd.none - ) diff --git a/src/battle/src/Update/SelectCharacter.elm b/src/battle/src/Update/SelectCharacter.elm index d39b8d0..ae2860f 100644 --- a/src/battle/src/Update/SelectCharacter.elm +++ b/src/battle/src/Update/SelectCharacter.elm @@ -31,35 +31,6 @@ import Struct.UI -------------------------------------------------------------------------------- -- LOCAL ----------------------------------------------------------------------- -------------------------------------------------------------------------------- -get_character_navigator : ( - Struct.Battle.Type -> - Struct.Character.Type -> - Struct.Navigator.Type - ) -get_character_navigator battle char = - let - base_char = (Struct.Character.get_base_character char) - weapon = (BattleCharacters.Struct.Character.get_active_weapon base_char) - in - (Struct.Navigator.new - (Struct.Character.get_location char) - (Battle.Struct.Attributes.get_movement_points - (BattleCharacters.Struct.Character.get_attributes base_char) - ) - (BattleCharacters.Struct.Weapon.get_defense_range weapon) - (BattleCharacters.Struct.Weapon.get_attack_range weapon) - (BattleMap.Struct.Map.get_tile_data_function - (Struct.Battle.get_map battle) - (List.map - (Struct.Character.get_location) - (Array.toList - (Struct.Battle.get_characters battle) - ) - ) - (Struct.Character.get_location char) - ) - ) - attack_character : ( Struct.Model.Type -> Int -> @@ -126,165 +97,36 @@ ctrl_or_focus_character model target_char_id target_char = ) } -can_target_character : ( - Struct.Model.Type -> - Struct.Character.Type -> - Bool - ) -can_target_character model target = - ( - (Struct.Character.is_alive target) - && - ( - case - (Struct.CharacterTurn.maybe_get_navigator - model.char_turn - ) - of - (Just nav) -> - case - (Struct.Navigator.maybe_get_path_to - (BattleMap.Struct.Location.get_ref - (Struct.Character.get_location target) - ) - nav - ) - of - (Just _) -> True - _ -> False - - _ -> - False - ) - ) second_click_on : ( - Struct.Model.Type -> Int -> + Struct.Model.Type -> (Struct.Model.Type, (Cmd Struct.Event.Type)) ) -second_click_on model target_char_id = - case (Struct.Battle.get_character target_char_id model.battle) of - (Just target_char) -> - case - ( - (Struct.CharacterTurn.maybe_get_active_character - model.char_turn - ), - (Struct.CharacterTurn.maybe_get_target model.char_turn) - ) - of - ((Just _), (Just char_turn_target_id)) -> - if (char_turn_target_id == target_char_id) - then - ( - model, - Cmd.none - ) - else - ( - (ctrl_or_focus_character model target_char_id target_char), - (Task.attempt - (Struct.Event.attempted) - (Action.Scroll.to - (Struct.Character.get_location target_char) - model.ui - ) - ) - ) - - ((Just _), Nothing) -> - if (can_target_character model target_char) - then - ( - (attack_character - model - target_char_id - target_char - ), - Cmd.none - ) - else - ( - (ctrl_or_focus_character model target_char_id target_char), - (Task.attempt - (Struct.Event.attempted) - (Action.Scroll.to - (Struct.Character.get_location target_char) - model.ui - ) - ) - ) - - (_, _) -> - ( - (ctrl_or_focus_character model target_char_id target_char), - (Task.attempt - (Struct.Event.attempted) - (Action.Scroll.to - (Struct.Character.get_location target_char) - model.ui - ) - ) - ) - - Nothing -> - ( - (Struct.Model.invalidate - (Struct.Error.new - Struct.Error.Programming - "SelectCharacter: Unknown char selected." - ) - model - ), - Cmd.none - ) +second_click_on target_char_id model = + if (Struct.CharacterTurn.has_active_character model.char_turn) + then (Update.CharacterTurn.ToggleTarget.apply_to_ref target_char_id model) + else (Update.CharacterTurn.apply_to target_char_id model) first_click_on : ( - Struct.Model.Type -> Int -> + Struct.Model.Type -> (Struct.Model.Type, (Cmd Struct.Event.Type)) ) -first_click_on model target_char_id = - if - ( - (Struct.CharacterTurn.maybe_get_target model.char_turn) - == - (Just target_char_id) - ) - then - (model, Cmd.none) - else - case (Struct.Battle.get_character target_char_id model.battle) of - (Just target_char) -> - ( - {model | - ui = - (Struct.UI.set_previous_action - (Just (Struct.UI.SelectedCharacter target_char_id)) - (Struct.UI.set_displayed_tab - Struct.UI.StatusTab - (Struct.UI.set_displayed_nav - (get_character_navigator model.battle target_char) - model.ui - ) - ) - ) - }, - Cmd.none - ) - - Nothing -> - ( - (Struct.Model.invalidate - (Struct.Error.new - Struct.Error.Programming - "SelectCharacter: Unknown char selected." - ) - model - ), - Cmd.none +first_click_on target_char_id model = + (Update.Sequence.sequence + [ + (Update.Character.DisplayInfo.apply_to target_char_id), + (Update.Character.DisplayNavigator.apply_to_ref target_char_id) + ] + {model | + ui = + (Struct.UI.set_previous_action + (Just (Struct.UI.SelectedCharacter target_ref)) + model.ui ) + } + ) -------------------------------------------------------------------------------- -- EXPORTED -------------------------------------------------------------------- @@ -301,5 +143,5 @@ apply_to model target_char_id = == (Just (Struct.UI.SelectedCharacter target_char_id)) ) - then (second_click_on model target_char_id) - else (first_click_on model target_char_id) + then (second_click_on target_char_id model) + else (first_click_on target_char_id model) diff --git a/src/battle/src/Update/SelectTab.elm b/src/battle/src/Update/SelectTab.elm deleted file mode 100644 index 86ef4e7..0000000 --- a/src/battle/src/Update/SelectTab.elm +++ /dev/null @@ -1,31 +0,0 @@ -module Update.SelectTab exposing (apply_to) - --- Local Module ---------------------------------------------------------------- -import Struct.Model -import Struct.Event -import Struct.UI - --------------------------------------------------------------------------------- --- LOCAL ----------------------------------------------------------------------- --------------------------------------------------------------------------------- - --------------------------------------------------------------------------------- --- EXPORTED -------------------------------------------------------------------- --------------------------------------------------------------------------------- -apply_to : ( - Struct.Model.Type -> - Struct.UI.Tab -> - (Struct.Model.Type, (Cmd Struct.Event.Type)) - ) -apply_to model tab = - if ((Struct.UI.maybe_get_displayed_tab model.ui) == (Just tab)) - then - ( - {model | ui = (Struct.UI.reset_displayed_tab model.ui)}, - Cmd.none - ) - else - ( - {model | ui = (Struct.UI.set_displayed_tab tab model.ui)}, - Cmd.none - ) diff --git a/src/battle/src/Update/SwitchWeapon.elm b/src/battle/src/Update/SwitchWeapon.elm deleted file mode 100644 index 0b4816f..0000000 --- a/src/battle/src/Update/SwitchWeapon.elm +++ /dev/null @@ -1,97 +0,0 @@ -module Update.SwitchWeapon exposing (apply_to) - --- Battle Characters ----------------------------------------------------------- -import BattleCharacters.Struct.Weapon -import BattleCharacters.Struct.Character - --- Local module ---------------------------------------------------------------- -import Struct.Character -import Struct.CharacterTurn -import Struct.Error -import Struct.Event -import Struct.Model - --------------------------------------------------------------------------------- --- LOCAL ----------------------------------------------------------------------- --------------------------------------------------------------------------------- -make_it_so : Struct.Model.Type -> Struct.Model.Type -make_it_so model = - case - ( - (Struct.CharacterTurn.maybe_get_active_character model.char_turn), - (Struct.CharacterTurn.maybe_get_navigator model.char_turn) - ) - of - ((Just char), (Just nav)) -> - let - new_base_character = - (BattleCharacters.Struct.Character.switch_weapons - (Struct.Character.get_base_character char) - ) - active_weapon = - (BattleCharacters.Struct.Character.get_active_weapon - new_base_character - ) - in - {model | - char_turn = - (Struct.CharacterTurn.show_attack_range_navigator - (BattleCharacters.Struct.Weapon.get_defense_range - active_weapon - ) - (BattleCharacters.Struct.Weapon.get_attack_range - active_weapon - ) - (Struct.CharacterTurn.set_has_switched_weapons - True - (Struct.CharacterTurn.set_active_character_no_reset - (Struct.Character.set_base_character - new_base_character - char - ) - model.char_turn - ) - ) - ) - } - - (_, _) -> - (Struct.Model.invalidate - (Struct.Error.new - Struct.Error.Programming - """ - CharacterTurn structure in the 'SelectedCharacter' or - 'MovedCharacter' state without any character being selected. - """) - model - ) - --------------------------------------------------------------------------------- --- EXPORTED -------------------------------------------------------------------- --------------------------------------------------------------------------------- -apply_to : ( - Struct.Model.Type -> - (Struct.Model.Type, (Cmd Struct.Event.Type)) - ) -apply_to model = - case (Struct.CharacterTurn.get_state model.char_turn) of - Struct.CharacterTurn.SelectedCharacter -> - ((make_it_so model), Cmd.none) - - Struct.CharacterTurn.MovedCharacter -> - ((make_it_so model), Cmd.none) - - _ -> - ( - (Struct.Model.invalidate - (Struct.Error.new - Struct.Error.Programming - ( - "Attempt to switch weapons as a secondary action or" - ++ " without character being selected." - ) - ) - model - ), - Cmd.none - ) diff --git a/src/battle/src/Update/UI/ChangeScale.elm b/src/battle/src/Update/UI/ChangeScale.elm new file mode 100644 index 0000000..b5884ff --- /dev/null +++ b/src/battle/src/Update/UI/ChangeScale.elm @@ -0,0 +1,23 @@ +module Update.UI.ChangeScale exposing (apply_to) + +-- Local Module ---------------------------------------------------------------- +import Struct.Event +import Struct.Model +import Struct.UI + +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- +apply_to : ( + Struct.Model.Type -> + Float -> + (Struct.Model.Type, (Cmd Struct.Event.Type)) + ) +apply_to model mod = + if (mod == 0.0) + then ({model | ui = (Struct.UI.reset_zoom_level model.ui)}, Cmd.none) + else ({model | ui = (Struct.UI.mod_zoom_level mod model.ui)}, Cmd.none) diff --git a/src/battle/src/Update/UI/GoToMainMenu.elm b/src/battle/src/Update/UI/GoToMainMenu.elm new file mode 100644 index 0000000..7aec7b2 --- /dev/null +++ b/src/battle/src/Update/UI/GoToMainMenu.elm @@ -0,0 +1,24 @@ +module Update.UI.GoToMainMenu exposing (apply_to) + +-- Shared ---------------------------------------------------------------------- +import Action.Ports + +-- Local Module ---------------------------------------------------------------- +import Constants.IO + +import Struct.Model +import Struct.Event + +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- +apply_to : Struct.Model.Type -> (Struct.Model.Type, (Cmd Struct.Event.Type)) +apply_to model = + ( + model, + (Action.Ports.go_to (Constants.IO.base_url ++"/main-menu/")) + ) diff --git a/src/battle/src/Update/UI/SelectTab.elm b/src/battle/src/Update/UI/SelectTab.elm new file mode 100644 index 0000000..37ab910 --- /dev/null +++ b/src/battle/src/Update/UI/SelectTab.elm @@ -0,0 +1,31 @@ +module Update.UI.SelectTab exposing (apply_to) + +-- Local Module ---------------------------------------------------------------- +import Struct.Model +import Struct.Event +import Struct.UI + +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- +apply_to : ( + Struct.Model.Type -> + Struct.UI.Tab -> + (Struct.Model.Type, (Cmd Struct.Event.Type)) + ) +apply_to model tab = + if ((Struct.UI.maybe_get_displayed_tab model.ui) == (Just tab)) + then + ( + {model | ui = (Struct.UI.reset_displayed_tab model.ui)}, + Cmd.none + ) + else + ( + {model | ui = (Struct.UI.set_displayed_tab tab model.ui)}, + Cmd.none + ) diff --git a/src/battle/src/Update/UndoAction.elm b/src/battle/src/Update/UndoAction.elm deleted file mode 100644 index dc5b025..0000000 --- a/src/battle/src/Update/UndoAction.elm +++ /dev/null @@ -1,133 +0,0 @@ -module Update.UndoAction exposing (apply_to) - --- Elm ------------------------------------------------------------------------- -import Array - --- Battle ---------------------------------------------------------------------- -import Battle.Struct.Attributes - --- Battle Characters ----------------------------------------------------------- -import BattleCharacters.Struct.Character -import BattleCharacters.Struct.Weapon - --- Battle Map ------------------------------------------------------------------ -import BattleMap.Struct.Map - --- Local Module ---------------------------------------------------------------- -import Struct.Battle -import Struct.Character -import Struct.CharacterTurn -import Struct.Event -import Struct.Model -import Struct.Navigator - --------------------------------------------------------------------------------- --- LOCAL ----------------------------------------------------------------------- --------------------------------------------------------------------------------- -get_character_navigator : ( - Struct.Battle.Type -> - Struct.Character.Type -> - Struct.Navigator.Type - ) -get_character_navigator battle char = - let - base_char = (Struct.Character.get_base_character char) - weapon = (BattleCharacters.Struct.Character.get_active_weapon base_char) - in - (Struct.Navigator.new - (Struct.Character.get_location char) - (Battle.Struct.Attributes.get_movement_points - (BattleCharacters.Struct.Character.get_attributes base_char) - ) - (BattleCharacters.Struct.Weapon.get_defense_range weapon) - (BattleCharacters.Struct.Weapon.get_attack_range weapon) - (BattleMap.Struct.Map.get_tile_data_function - (Struct.Battle.get_map battle) - (List.map - (Struct.Character.get_location) - (Array.toList (Struct.Battle.get_characters battle)) - ) - (Struct.Character.get_location char) - ) - ) - -handle_reset_character_turn : Struct.Model.Type -> Struct.CharacterTurn.Type -handle_reset_character_turn model = - case (Struct.CharacterTurn.maybe_get_active_character model.char_turn) of - Nothing -> model.char_turn - - (Just current_char) -> - case - (Struct.Battle.get_character - (Struct.Character.get_index current_char) - model.battle - ) - of - Nothing -> model.char_turn - - (Just reset_char) -> - (Struct.CharacterTurn.set_navigator - (get_character_navigator model.battle reset_char) - (Struct.CharacterTurn.set_active_character - reset_char - (Struct.CharacterTurn.new) - ) - ) - -handle_undo_switched_weapons : Struct.Model.Type -> Struct.CharacterTurn.Type -handle_undo_switched_weapons model = - case (Struct.CharacterTurn.maybe_get_active_character model.char_turn) of - Nothing -> model.char_turn - - (Just char) -> - (Struct.CharacterTurn.lock_path - (Struct.CharacterTurn.unlock_path - (Struct.CharacterTurn.set_has_switched_weapons - False - (Struct.CharacterTurn.set_active_character_no_reset - (Struct.Character.set_base_character - (BattleCharacters.Struct.Character.switch_weapons - (Struct.Character.get_base_character char) - ) - char - ) - model.char_turn - ) - ) - ) - ) - -handle_undo_chose_target : Struct.Model.Type -> Struct.CharacterTurn.Type -handle_undo_chose_target model = - (Struct.CharacterTurn.set_target Nothing model.char_turn) --- Was previously something like below, but that looks really wrong: --- (Struct.CharacterTurn.lock_path --- (Struct.CharacterTurn.unlock_path --- model.char_turn --- ) --- ) - --------------------------------------------------------------------------------- --- EXPORTED -------------------------------------------------------------------- --------------------------------------------------------------------------------- -apply_to : Struct.Model.Type -> (Struct.Model.Type, (Cmd Struct.Event.Type)) -apply_to model = - ( - {model | - char_turn = - ( - case (Struct.CharacterTurn.get_state model.char_turn) of - Struct.CharacterTurn.ChoseTarget -> - (handle_undo_chose_target model) - - Struct.CharacterTurn.SwitchedWeapons -> - (handle_undo_switched_weapons model) - - Struct.CharacterTurn.MovedCharacter -> - (handle_reset_character_turn model) - - _ -> model.char_turn - ) - }, - Cmd.none - ) -- cgit v1.2.3-70-g09d2