aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'elm/battlemap/src/Model/RequestDirection.elm')
-rw-r--r--elm/battlemap/src/Model/RequestDirection.elm60
1 files changed, 60 insertions, 0 deletions
diff --git a/elm/battlemap/src/Model/RequestDirection.elm b/elm/battlemap/src/Model/RequestDirection.elm
new file mode 100644
index 0000000..f47a902
--- /dev/null
+++ b/elm/battlemap/src/Model/RequestDirection.elm
@@ -0,0 +1,60 @@
+module Model.RequestDirection exposing (apply_to)
+
+import Dict
+
+import Battlemap
+import Battlemap.Direction
+
+import Model
+import Error
+
+make_it_so : Model.Type -> Battlemap.Direction.Type -> Model.Type
+make_it_so model dir =
+ case model.selection of
+ (Model.SelectedCharacter char_id) ->
+ let
+ new_bmap =
+ (Battlemap.add_step_to_navigator
+ model.battlemap
+ dir
+ (Dict.values model.characters)
+ )
+ in
+ case new_bmap of
+ (Just bmap) ->
+ {model |
+ state = Model.MovingCharacterWithButtons,
+ battlemap = new_bmap
+ }
+
+ Nothing ->
+ (Model.invalidate
+ model
+ (Error.new
+ Error.IllegalAction
+ "Unreachable/occupied tile."
+ )
+ )
+
+ _ ->
+ (Model.invalidate
+ model
+ (Error.new
+ Error.Programming
+ "DirectionRequest: model moving char, no char selected."
+ )
+ )
+
+apply_to : Model.Type -> Battlemap.Direction.Type -> Model.Type
+apply_to model dir =
+ case (Model.get_state model) of
+ Model.MovingCharacterWithButtons -> (make_it_so model dir)
+ Model.MovingCharacterWithClick -> (make_it_so model dir)
+ _ ->
+ (Model.invalidate
+ model
+ (Error.new
+ Error.IllegalAction
+ "This can only be done while moving a character."
+ )
+ )