summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'elm/battlemap/src/Battlemap/Navigator/Path.elm')
-rw-r--r--elm/battlemap/src/Battlemap/Navigator/Path.elm168
1 files changed, 0 insertions, 168 deletions
diff --git a/elm/battlemap/src/Battlemap/Navigator/Path.elm b/elm/battlemap/src/Battlemap/Navigator/Path.elm
deleted file mode 100644
index 53e12c0..0000000
--- a/elm/battlemap/src/Battlemap/Navigator/Path.elm
+++ /dev/null
@@ -1,168 +0,0 @@
-module Battlemap.Navigator.Path exposing
- (
- Type,
- new,
- get_current_location,
- get_remaining_points,
- get_summary,
- try_following_direction
- )
-
-import Set
-
-import Util.List
-
-import Battlemap.Direction
-import Battlemap.Location
-
---------------------------------------------------------------------------------
--- TYPES -----------------------------------------------------------------------
---------------------------------------------------------------------------------
-type alias Type =
- {
- current_location : Battlemap.Location.Type,
- visited_locations : (Set.Set Battlemap.Location.Ref),
- previous_directions : (List Battlemap.Direction.Type),
- previous_points : (List Int),
- remaining_points : Int
- }
-
---------------------------------------------------------------------------------
--- LOCAL -----------------------------------------------------------------------
---------------------------------------------------------------------------------
-has_been_to : (
- Type ->
- Battlemap.Location.Type ->
- Bool
- )
-has_been_to path location =
- (
- (path.current_location == location)
- ||
- (Set.member
- (Battlemap.Location.get_ref location)
- path.visited_locations
- )
- )
-
-try_moving_to : (
- Type ->
- Battlemap.Direction.Type ->
- Battlemap.Location.Type ->
- Int ->
- (Maybe Type)
- )
-try_moving_to path dir next_loc cost =
- let
- remaining_points = (path.remaining_points - cost)
- in
- if (remaining_points >= 0)
- then
- (Just
- {path |
- current_location = next_loc,
- visited_locations =
- (Set.insert
- (Battlemap.Location.get_ref path.current_location)
- path.visited_locations
- ),
- previous_directions = (dir :: path.previous_directions),
- previous_points =
- (path.remaining_points :: path.previous_points),
- remaining_points = remaining_points
- }
- )
- else
- Nothing
-
-try_backtracking_to : (
- Type ->
- Battlemap.Direction.Type ->
- Battlemap.Location.Type ->
- (Maybe Type)
- )
-try_backtracking_to path dir location =
- case
- (
- (Util.List.pop path.previous_directions),
- (Util.List.pop path.previous_points)
- )
- of
- (
- (Just (prev_dir_head, prev_dir_tail)),
- (Just (prev_pts_head, prev_pts_tail))
- ) ->
- if (prev_dir_head == (Battlemap.Direction.opposite_of dir))
- then
- (Just
- {path |
- current_location = location,
- visited_locations =
- (Set.remove
- (Battlemap.Location.get_ref location)
- path.visited_locations
- ),
- previous_directions = prev_dir_tail,
- previous_points = prev_pts_tail,
- remaining_points = prev_pts_head
- }
- )
- else
- Nothing
- (_, _) ->
- Nothing
-
---------------------------------------------------------------------------------
--- EXPORTED --------------------------------------------------------------------
---------------------------------------------------------------------------------
-
-new : Battlemap.Location.Type -> Int -> Type
-new start points =
- {
- current_location = start,
- visited_locations = Set.empty,
- previous_directions = [],
- previous_points = [],
- remaining_points = points
- }
-
-get_current_location : Type -> Battlemap.Location.Type
-get_current_location path = path.current_location
-
-get_remaining_points : Type -> Int
-get_remaining_points path = path.remaining_points
-
-get_summary : Type -> (List Battlemap.Direction.Type)
-get_summary path = path.previous_directions
-try_following_direction : (
- (Battlemap.Location.Type -> Bool) ->
- (Battlemap.Location.Type -> Int) ->
- (Maybe Type) ->
- Battlemap.Direction.Type ->
- (Maybe Type)
- )
-try_following_direction can_cross cost_fun maybe_path dir =
- case maybe_path of
- (Just path) ->
- let
- next_location =
- (Battlemap.Location.neighbor
- path.current_location
- dir
- )
- in
- if (can_cross next_location)
- then
- if (has_been_to path next_location)
- then
- (try_backtracking_to path dir next_location)
- else
- (try_moving_to
- path
- dir
- next_location
- (cost_fun next_location)
- )
- else
- Nothing
- Nothing -> Nothing