summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2017-09-18 21:22:45 +0200
committerNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2017-09-18 21:22:45 +0200
commit1b72f37fc04cd7851bd2f289d7776a1c7c35f48d (patch)
tree2349fe545bfa81451f81a7cef8e5838c1cf6acb6
parent36344e727e45b6a1d39f372a6a39ab973e023bdf (diff)
Adds backtrack support.
-rw-r--r--client/elm/battlemap/src/Battlemap/Direction.elm11
-rw-r--r--client/elm/battlemap/src/Battlemap/Navigator.elm54
2 files changed, 54 insertions, 11 deletions
diff --git a/client/elm/battlemap/src/Battlemap/Direction.elm b/client/elm/battlemap/src/Battlemap/Direction.elm
index b943c2d..e301177 100644
--- a/client/elm/battlemap/src/Battlemap/Direction.elm
+++ b/client/elm/battlemap/src/Battlemap/Direction.elm
@@ -1,4 +1,4 @@
-module Battlemap.Direction exposing (..)
+module Battlemap.Direction exposing (Direction(..), opposite_of)
type Direction =
None
@@ -6,3 +6,12 @@ type Direction =
| Right
| Up
| Down
+
+opposite_of : Direction -> Direction
+opposite_of d =
+ case d of
+ Left -> Right
+ Right -> Left
+ Up -> Down
+ Down -> Up
+ None -> None
diff --git a/client/elm/battlemap/src/Battlemap/Navigator.elm b/client/elm/battlemap/src/Battlemap/Navigator.elm
index df0e2cf..d26a56a 100644
--- a/client/elm/battlemap/src/Battlemap/Navigator.elm
+++ b/client/elm/battlemap/src/Battlemap/Navigator.elm
@@ -6,10 +6,11 @@ module Battlemap.Navigator exposing
go
)
-import Set exposing (Set, member, empty, insert)
+import Set exposing (Set, member, empty, insert, remove)
+import List as Lt exposing (head, tail)
import Battlemap exposing (Battlemap, has_location, apply_to_tile)
-import Battlemap.Direction exposing (Direction(..))
+import Battlemap.Direction exposing (Direction(..), opposite_of)
import Battlemap.Tile exposing (Tile, set_direction)
import Battlemap.Location exposing
@@ -23,14 +24,16 @@ import Battlemap.Location exposing
type alias Navigator =
{
current_location : Location,
- visited_locations : (Set LocationRef)
+ visited_locations : (Set LocationRef),
+ previous_directions : (List Direction)
}
new_navigator : Location -> Navigator
new_navigator start =
{
current_location = start,
- visited_locations = empty
+ visited_locations = empty,
+ previous_directions = []
}
@@ -63,17 +66,48 @@ go battlemap nav dir =
Nothing -> battlemap
(Just bmap) -> bmap
),
- {
+ {nav |
current_location = next_location,
visited_locations =
(insert
(to_comparable nav.current_location)
nav.visited_locations
- )
+ ),
+ previous_directions = (dir :: nav.previous_directions)
}
)
else
- (
- battlemap,
- nav
- )
+ case
+ (
+ (Lt.head nav.previous_directions),
+ (Lt.tail nav.previous_directions)
+ )
+ of
+ (Nothing, _) -> (battlemap, nav)
+ (_ , Nothing) -> (battlemap, nav)
+ ((Just prev_dir), (Just prev_dir_list)) ->
+ if (dir == (opposite_of prev_dir))
+ then
+ (
+ (case
+ (apply_to_tile
+ battlemap
+ next_location
+ (set_direction None)
+ )
+ of
+ Nothing -> battlemap
+ (Just bmap) -> bmap
+ ),
+ {nav |
+ current_location = next_location,
+ visited_locations =
+ (remove
+ (to_comparable next_location)
+ nav.visited_locations
+ ),
+ previous_directions = prev_dir_list
+ }
+ )
+ else
+ (battlemap, nav)