summaryrefslogtreecommitdiff |
diff options
author | nsensfel <SpamShield0@noot-noot.org> | 2018-06-14 19:09:14 +0200 |
---|---|---|
committer | nsensfel <SpamShield0@noot-noot.org> | 2018-06-14 19:09:14 +0200 |
commit | 1e14bb938ab22976a63342bbd7b7fd2611588338 (patch) | |
tree | 5e58c94a9d6eb4ed1e98ee16d6dee6bd17fd055e | |
parent | 4727d428e505b52b88ff814f27481616621939e4 (diff) |
Improving display of "can't defend" markers...
FIXME: clicking on the 'target character' icon appearing over a
controllable character results in the tile below being selected, making
it annoying to actually take control of that character.
-rw-r--r-- | src/battlemap/src/Struct/Marker.elm | 7 | ||||
-rw-r--r-- | src/battlemap/src/Struct/RangeIndicator.elm | 78 | ||||
-rw-r--r-- | src/battlemap/src/View/Battlemap/Navigator.elm | 18 | ||||
-rw-r--r-- | src/battlemap/www/style.css | 23 |
4 files changed, 88 insertions, 38 deletions
diff --git a/src/battlemap/src/Struct/Marker.elm b/src/battlemap/src/Struct/Marker.elm index 58a7fc9..e3a051d 100644 --- a/src/battlemap/src/Struct/Marker.elm +++ b/src/battlemap/src/Struct/Marker.elm @@ -4,6 +4,7 @@ module Struct.Marker exposing (Type(..)) -- TYPES ----------------------------------------------------------------------- -------------------------------------------------------------------------------- type Type = - CanAttack - | CanGoTo - | CantDefend + CanAttackCanDefend + | CanGoToCanDefend + | CanAttackCantDefend + | CanGoToCantDefend diff --git a/src/battlemap/src/Struct/RangeIndicator.elm b/src/battlemap/src/Struct/RangeIndicator.elm index ed728c0..06b34ec 100644 --- a/src/battlemap/src/Struct/RangeIndicator.elm +++ b/src/battlemap/src/Struct/RangeIndicator.elm @@ -6,6 +6,8 @@ module Struct.RangeIndicator exposing get_path ) +-- FIXME: This module is still too much of a mess... + -- Elm ------------------------------------------------------------------------- import Dict import List @@ -23,7 +25,8 @@ import Constants.Movement type alias Type = { distance: Int, - range: Int, + true_range: Int, + atk_range: Int, path: (List Struct.Direction.Type), marker: Struct.Marker.Type } @@ -46,7 +49,7 @@ get_closest dist ref indicator (prev_ref, prev_indicator) = ( (indicator.distance > dist) && (prev_indicator.distance > dist) - && (indicator.range < prev_indicator.range) + && (indicator.atk_range < prev_indicator.atk_range) ) ) then @@ -61,7 +64,7 @@ is_closer new_dist new_range neighbor = || ( (neighbor.distance > new_dist) - && (new_range < neighbor.range) + && (new_range < neighbor.atk_range) ) ) @@ -71,13 +74,18 @@ handle_neighbors : ( Struct.Location.Type -> Int -> Int -> + Int -> (Dict.Dict Struct.Location.Ref Type) -> (Struct.Location.Type -> Int) -> Struct.Direction.Type -> (Dict.Dict Struct.Location.Ref Type) -> (Dict.Dict Struct.Location.Ref Type) ) -handle_neighbors src_indicator src_loc dist range results cost_fun dir rem = +handle_neighbors + src_indicator src_loc + dist + atk_range def_range + results cost_fun dir rem = let neighbor_loc = (Struct.Location.neighbor dir src_loc) in @@ -88,7 +96,9 @@ handle_neighbors src_indicator src_loc dist range results cost_fun dir rem = let node_cost = (cost_fun neighbor_loc) new_dist = (src_indicator.distance + node_cost) - new_range = (src_indicator.range + 1) + new_atk_range = (src_indicator.atk_range + 1) + new_true_range = (src_indicator.true_range + 1) + can_defend = (new_true_range >= def_range) in if ( @@ -100,7 +110,7 @@ handle_neighbors src_indicator src_loc dist range results cost_fun dir rem = ) of (Just neighbor) -> - (is_closer new_dist new_range neighbor) + (is_closer new_dist new_atk_range neighbor) Nothing -> True @@ -111,7 +121,7 @@ handle_neighbors src_indicator src_loc dist range results cost_fun dir rem = ( (new_dist <= dist) || - (new_range <= range) + (new_atk_range <= atk_range) ) ) then @@ -122,16 +132,28 @@ handle_neighbors src_indicator src_loc dist range results cost_fun dir rem = then { distance = (dist + 1), - range = new_range, + atk_range = new_atk_range, + true_range = new_true_range, path = (dir :: src_indicator.path), - marker = Struct.Marker.CanAttack + marker = + if (can_defend) + then + Struct.Marker.CanAttackCanDefend + else + Struct.Marker.CanAttackCantDefend } else { distance = new_dist, - range = 0, + atk_range = 0, + true_range = new_true_range, path = (dir :: src_indicator.path), - marker = Struct.Marker.CanGoTo + marker = + if (can_defend) + then + Struct.Marker.CanGoToCanDefend + else + Struct.Marker.CanGoToCantDefend } ) rem @@ -162,8 +184,9 @@ search result remaining dist atk_range def_range cost_fun = { distance = Constants.Movement.cost_when_out_of_bounds, path = [], - range = Constants.Movement.cost_when_out_of_bounds, - marker = Struct.Marker.CanAttack + atk_range = Constants.Movement.cost_when_out_of_bounds, + true_range = Constants.Movement.cost_when_out_of_bounds, + marker = Struct.Marker.CanAttackCanDefend } ) remaining @@ -174,17 +197,13 @@ search result remaining dist atk_range def_range cost_fun = min_loc_ref {min | marker = - ( - if (min.range > 0) - then - if (min.range <= def_range) - then - Struct.Marker.CantDefend - else - Struct.Marker.CanAttack - else - Struct.Marker.CanGoTo - ) + case + ((min.atk_range > 0), (min.true_range <= def_range)) + of + (True, True) -> Struct.Marker.CanAttackCantDefend + (True, False) -> Struct.Marker.CanAttackCanDefend + (False, True) -> Struct.Marker.CanGoToCantDefend + (False, False) -> Struct.Marker.CanGoToCanDefend } result ) @@ -194,6 +213,7 @@ search result remaining dist atk_range def_range cost_fun = (Struct.Location.from_ref min_loc_ref) dist atk_range + def_range result (cost_fun) ) @@ -230,8 +250,14 @@ generate location dist atk_range def_range cost_fun = { distance = 0, path = [], - range = 0, - marker = Struct.Marker.CanGoTo + atk_range = 0, + true_range = 0, + marker = + if (def_range == 0) + then + Struct.Marker.CanGoToCanDefend + else + Struct.Marker.CanGoToCantDefend } Dict.empty ) diff --git a/src/battlemap/src/View/Battlemap/Navigator.elm b/src/battlemap/src/View/Battlemap/Navigator.elm index 8740f17..b22b95e 100644 --- a/src/battlemap/src/View/Battlemap/Navigator.elm +++ b/src/battlemap/src/View/Battlemap/Navigator.elm @@ -36,9 +36,15 @@ marker_get_html is_interactive (loc_ref, marker) = ++ ( case marker of - Struct.Marker.CanGoTo -> "can-go-to" - Struct.Marker.CanAttack -> "can-attack" - Struct.Marker.CantDefend -> "cant-defend" + Struct.Marker.CanGoToCanDefend -> "can-go-to-can-defend" + Struct.Marker.CanGoToCantDefend -> + "can-go-to-cant-defend" + + Struct.Marker.CanAttackCanDefend -> + "can-attack-can-defend" + + Struct.Marker.CanAttackCantDefend -> + "can-attack-cant-defend" ) ++ "-marker" @@ -66,7 +72,11 @@ marker_get_html is_interactive (loc_ref, marker) = ( if (is_interactive) then - if (marker == Struct.Marker.CanGoTo) + if + ( + (marker == Struct.Marker.CanGoToCanDefend) + || (marker == Struct.Marker.CanGoToCantDefend) + ) then [ (Html.Attributes.class "battlemap-navigator-interactive"), diff --git a/src/battlemap/www/style.css b/src/battlemap/www/style.css index 5f55dae..04bce9a 100644 --- a/src/battlemap/www/style.css +++ b/src/battlemap/www/style.css @@ -543,20 +543,33 @@ 0px -1px 2px #333; } -.battlemap-can-go-to-marker.battlemap-navigator-interactive +.battlemap-can-go-to-can-defend-marker.battlemap-navigator-interactive { background-color: #FFF; opacity: 0.3; transition: opacity 0.3s ease-out; } +.battlemap-can-go-to-cant-defend-marker.battlemap-navigator-interactive +{ + background: + repeating-linear-gradient( + -55deg, + rgba(255,255,255,0.3), + rgba(255,255,255,0.3) 3px, + rgba(0,0,0,0.3) 3px, + rgba(0,0,0,0.3) 7px + ); + opacity: 0.3; + transition: opacity 0.3s ease-out; +} -.battlemap-can-go-to-marker.battlemap-navigator-interactive:hover +.battlemap-can-go-to-can-defend-marker.battlemap-navigator-interactive:hover { background-color: rgba(255, 255, 255, 0.9); opacity: 1; } -.battlemap-can-attack-marker.battlemap-navigator-interactive +.battlemap-can-attack-can-defend-marker.battlemap-navigator-interactive { background-color:rgba(0,0,0,0.7); width: 28px; @@ -567,12 +580,12 @@ border-radius: 0; } -.battlemap-can-attack-marker.battlemap-navigator-non-interactive +.battlemap-can-attack-can-defend-marker.battlemap-navigator-non-interactive { background-image: url(/asset/svg/marker/blade.svg); } -.battlemap-can-go-to-marker.battlemap-navigator-non-interactive +.battlemap-can-go-to-can-defend-marker.battlemap-navigator-non-interactive { background-image: url(/asset/svg/marker/pawprint.svg); z-index: 3; |