summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/battlemap/src/Action/Scroll.elm21
-rw-r--r--src/battlemap/src/Constants/UI.elm6
-rw-r--r--src/battlemap/src/Update/DisplayCharacterInfo.elm24
3 files changed, 44 insertions, 7 deletions
diff --git a/src/battlemap/src/Action/Scroll.elm b/src/battlemap/src/Action/Scroll.elm
index e84e6d5..b949fc7 100644
--- a/src/battlemap/src/Action/Scroll.elm
+++ b/src/battlemap/src/Action/Scroll.elm
@@ -17,15 +17,23 @@ import Struct.Location
--------------------------------------------------------------------------------
-- FIXME: Scrolling so that the focused element is in the middle, not in the top
-- left corner, would be much better.
+tile_to_px : Struct.UI.Type -> Int -> Float
+tile_to_px ui t =
+ (
+ (toFloat t)
+ * (Struct.UI.get_zoom_level ui)
+ * (toFloat Constants.UI.tile_size)
+ )
scroll_to_x : Int -> Struct.UI.Type -> (Task.Task Dom.Error ())
scroll_to_x x ui =
(Dom.Scroll.toX
Constants.UI.viewer_html_id
(
- (toFloat x)
- * (Struct.UI.get_zoom_level ui)
- * (toFloat Constants.UI.tile_size)
+ (tile_to_px ui x)
+ - Constants.UI.half_viewer_min_width
+ -- center on that tile, not its top left corner
+ + ((tile_to_px ui 1) / 2.0)
)
)
@@ -34,9 +42,10 @@ scroll_to_y y ui =
(Dom.Scroll.toY
Constants.UI.viewer_html_id
(
- (toFloat y)
- * (Struct.UI.get_zoom_level ui)
- * (toFloat Constants.UI.tile_size)
+ (tile_to_px ui y)
+ - Constants.UI.half_viewer_min_height
+ -- center on that tile, not its top left corner
+ + ((tile_to_px ui 1) / 2.0)
)
)
diff --git a/src/battlemap/src/Constants/UI.elm b/src/battlemap/src/Constants/UI.elm
index 303f69e..701caac 100644
--- a/src/battlemap/src/Constants/UI.elm
+++ b/src/battlemap/src/Constants/UI.elm
@@ -5,3 +5,9 @@ tile_size = 32
viewer_html_id : String
viewer_html_id = "battlemap_viewer"
+
+half_viewer_min_width : Float
+half_viewer_min_width = 109.0
+
+half_viewer_min_height : Float
+half_viewer_min_height = 180.0
diff --git a/src/battlemap/src/Update/DisplayCharacterInfo.elm b/src/battlemap/src/Update/DisplayCharacterInfo.elm
index 25ddb6c..37fe88e 100644
--- a/src/battlemap/src/Update/DisplayCharacterInfo.elm
+++ b/src/battlemap/src/Update/DisplayCharacterInfo.elm
@@ -1,7 +1,11 @@
module Update.DisplayCharacterInfo exposing (apply_to)
-- Elm -------------------------------------------------------------------------
+import Dict
+import Task
-- Battlemap -------------------------------------------------------------------
+import Action.Scroll
+
import Struct.Character
import Struct.Event
import Struct.Model
@@ -10,6 +14,24 @@ import Struct.UI
--------------------------------------------------------------------------------
-- LOCAL -----------------------------------------------------------------------
--------------------------------------------------------------------------------
+scroll_to_char : (
+ Struct.Model.Type ->
+ Struct.Character.Ref ->
+ (Cmd Struct.Event.Type)
+ )
+scroll_to_char model char_ref =
+ case (Dict.get char_ref model.characters) of
+ (Just char) ->
+ (Task.attempt
+ (Struct.Event.attempted)
+ (Action.Scroll.to
+ (Struct.Character.get_location char)
+ model.ui
+ )
+ )
+
+ Nothing ->
+ Cmd.none
--------------------------------------------------------------------------------
-- EXPORTED --------------------------------------------------------------------
@@ -31,5 +53,5 @@ apply_to model target_ref =
)
)
},
- Cmd.none
+ (scroll_to_char model target_ref)
)