summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2020-05-28 00:43:43 +0200
committerNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2020-05-28 00:43:43 +0200
commita57c213e5e642b3441b0dff9e8b6f5dc2bed5b27 (patch)
treea1a0d2792a14895adae5ed4f460bba4bec2868c6 /src
parent75aa816dedb09e0e1bc395f6e9ae94e1b9e993a1 (diff)
Improves move "Undo", click-on-map to undo.
Diffstat (limited to 'src')
-rw-r--r--src/battle/src/Struct/Navigator.elm4
-rw-r--r--src/battle/src/Update/CharacterTurn/UndoAction.elm15
-rw-r--r--src/battle/src/Update/CharacterTurn/UnlockPath.elm42
-rw-r--r--src/battle/src/Update/SelectTile.elm23
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 ->