| 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 -> | 


