From 5a75000ec7b961ad5fe93814e5b7905cacbdba49 Mon Sep 17 00:00:00 2001 From: Nathanael Sensfelder Date: Thu, 12 Oct 2017 19:46:36 +0200 Subject: Started a rather large reorganization. --- elm/battlemap/src/Battlemap/Navigator.elm | 105 ++++++++++++++++++++++-------- 1 file changed, 78 insertions(+), 27 deletions(-) (limited to 'elm/battlemap/src/Battlemap/Navigator.elm') diff --git a/elm/battlemap/src/Battlemap/Navigator.elm b/elm/battlemap/src/Battlemap/Navigator.elm index b040013..9cdfc1f 100644 --- a/elm/battlemap/src/Battlemap/Navigator.elm +++ b/elm/battlemap/src/Battlemap/Navigator.elm @@ -2,43 +2,94 @@ module Battlemap.Navigator exposing ( Type, new, - reset + get_current_location, + get_remaining_points, + get_range_markers, + add_step ) -import Set +import Dict -import Battlemap -import Battlemap.Direction import Battlemap.Location -import Battlemap.Tile +import Battlemap.Navigator.Path +import Battlemap.Navigator.RangeIndicator +-------------------------------------------------------------------------------- +-- TYPES ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- type alias Type = { - current_location : Battlemap.Location.Type, - visited_locations : (Set.Set Battlemap.Location.Ref), - previous_directions : (List Battlemap.Direction.Type), - remaining_points : Int, - starting_location : Battlemap.Location.Type, - starting_points : Int + starting_location: Battlemap.Location.Type, + movement_dist: Int, + attack_dist: Int, + path: Battlemap.Navigator.Path.Type, + range_indicators: + (Dict.Dict + Battlemap.Location.Ref + Battlemap.Navigator.RangeIndicator.Type + ) } -new : Battlemap.Location.Type -> Int -> Type -new start points = +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- + + +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- + +new : ( + Battlemap.Location.Type -> + Int -> + Int -> + (Battlemap.Location.Type -> Bool) -> Type + ) +new start_loc mov_dist atk_dist can_cross_fun = { - current_location = start, - visited_locations = Set.empty, - previous_directions = [], - remaining_points = points, - starting_location = start, - starting_points = points + starting_location = start_loc, + movement_dist = mov_dist, + attack_dist = atk_dist, + path = (Battlemap.Navigator.Path.new start_loc mov_dist), + range_indicators = + (Battlemap.Navigator.RangeIndicator.generate + start_loc + mov_dist + atk_dist + (can_cross_fun) + ) } -reset : Type -> Type -reset nav = - {nav | - current_location = nav.starting_location, - visited_locations = Set.empty, - previous_directions = [], - remaining_points = nav.starting_points - } +get_current_location : Type -> Battlemap.Location.Type +get_current_location navigator = + (Battlemap.Navigator.Path.get_current_location navigator.path) + +get_remaining_points : Type -> Int +get_remaining_points navigator = + (Battlemap.Navigator.Path.get_remaining_points navigator.path) + +get_range_markers : ( + Type -> + (List + (Battlemap.Location.Ref, Battlemap.Navigator.RangeIndicator.Type) + ) + ) +get_range_markers navigator = (Dict.toList navigator.range_indicators) + +add_step : ( + Type -> + Battlemap.Direction.Type -> + (Battlemap.Location.Type -> Bool) -> + (Maybe Type) + ) +add_step navigator dir can_cross = + case + (Battlemap.Navigator.Path.follow_direction + can_cross + (Just navigator.path) + dir + ) + of + (Just path) -> (Just {navigator | path = path} + Nothing -> Nothing -- cgit v1.2.3-70-g09d2