summaryrefslogtreecommitdiff |
diff options
Diffstat (limited to 'src/battle')
-rw-r--r-- | src/battle/src/Struct/Navigator.elm | 4 | ||||
-rw-r--r-- | src/battle/src/Update/CharacterTurn/UndoAction.elm | 15 | ||||
-rw-r--r-- | src/battle/src/Update/CharacterTurn/UnlockPath.elm | 42 | ||||
-rw-r--r-- | src/battle/src/Update/SelectTile.elm | 23 |
4 files changed, 81 insertions, 3 deletions
diff --git a/src/battle/src/Struct/Navigator.elm b/src/battle/src/Struct/Navigator.elm index be2f460..da46045 100644 --- a/src/battle/src/Struct/Navigator.elm +++ b/src/battle/src/Struct/Navigator.elm @@ -10,6 +10,7 @@ module Struct.Navigator exposing get_path, get_summary, clear_path, + path_is_locked, lock_path, lock_path_with_new_attack_ranges, unlock_path, @@ -148,6 +149,9 @@ clear_path navigator = ) } +path_is_locked : Type -> Bool +path_is_locked navigator = navigator.locked_path + lock_path : Type -> Type lock_path navigator = {navigator | diff --git a/src/battle/src/Update/CharacterTurn/UndoAction.elm b/src/battle/src/Update/CharacterTurn/UndoAction.elm index 0187752..7eb82e3 100644 --- a/src/battle/src/Update/CharacterTurn/UndoAction.elm +++ b/src/battle/src/Update/CharacterTurn/UndoAction.elm @@ -21,7 +21,9 @@ import Struct.Event import Struct.Model import Struct.Navigator +import Update.CharacterTurn.AbortTurn import Update.CharacterTurn.ResetPath +import Update.CharacterTurn.UnlockPath import Util.Navigator -------------------------------------------------------------------------------- @@ -77,7 +79,18 @@ apply_to : Struct.Model.Type -> (Struct.Model.Type, (Cmd Struct.Event.Type)) apply_to model = let action = (Struct.CharacterTurn.get_action model.char_turn) in if (action == Struct.CharacterTurn.None) - then (Update.CharacterTurn.ResetPath.apply_to model) + then + case (Struct.CharacterTurn.maybe_get_navigator model.char_turn) of + Nothing -> (model, Cmd.none) + (Just nav) -> + if ((Struct.Navigator.get_path nav) == []) + then + (Update.CharacterTurn.AbortTurn.apply_to model) + else if (Struct.Navigator.path_is_locked nav) + then + (Update.CharacterTurn.UnlockPath.apply_to model) + else + (Update.CharacterTurn.ResetPath.apply_to model) else ( {model | diff --git a/src/battle/src/Update/CharacterTurn/UnlockPath.elm b/src/battle/src/Update/CharacterTurn/UnlockPath.elm new file mode 100644 index 0000000..41d0313 --- /dev/null +++ b/src/battle/src/Update/CharacterTurn/UnlockPath.elm @@ -0,0 +1,42 @@ +module Update.CharacterTurn.UnlockPath exposing (apply_to) + +-- Local Module ---------------------------------------------------------------- +import Struct.CharacterTurn +import Struct.Error +import Struct.Event +import Struct.Model +import Struct.Navigator + +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- +apply_to : Struct.Model.Type -> (Struct.Model.Type, (Cmd Struct.Event.Type)) +apply_to model = + case (Struct.CharacterTurn.maybe_get_navigator model.char_turn) of + (Just nav) -> + ( + {model | + char_turn = + (Struct.CharacterTurn.set_navigator + (Struct.Navigator.unlock_path nav) + (Struct.CharacterTurn.clear_path model.char_turn) + ) + }, + Cmd.none + ) + + _ -> + ( + (Struct.Model.invalidate + (Struct.Error.new + Struct.Error.IllegalAction + "This can only be done while controlling a character." + ) + model + ), + Cmd.none + ) diff --git a/src/battle/src/Update/SelectTile.elm b/src/battle/src/Update/SelectTile.elm index 56a23f3..50f6420 100644 --- a/src/battle/src/Update/SelectTile.elm +++ b/src/battle/src/Update/SelectTile.elm @@ -18,7 +18,7 @@ import Struct.Model import Struct.Navigator import Struct.UI -import Update.CharacterTurn.AbortTurn +import Update.CharacterTurn.UndoAction -------------------------------------------------------------------------------- -- LOCAL ----------------------------------------------------------------------- @@ -148,7 +148,26 @@ go_to_another_tile model char navigator loc_ref = ) Nothing -> -- Clicked outside of the range indicator - (Update.CharacterTurn.AbortTurn.apply_to model) + if + ( + (Struct.UI.maybe_get_displayed_tab model.ui) + == (Just (Struct.UI.TileStatusTab loc_ref)) + ) + then (Update.CharacterTurn.UndoAction.apply_to model) + else + ( + {model | + ui = + (Struct.UI.set_displayed_tab + (Struct.UI.TileStatusTab loc_ref) + (Struct.UI.set_previous_action + (Just (Struct.UI.SelectedLocation loc_ref)) + model.ui + ) + ) + }, + Cmd.none + ) go_to_tile : ( Struct.Model.Type -> |