| summaryrefslogtreecommitdiff | 
diff options
| -rw-r--r-- | src/battlemap/src/Action/Scroll.elm | 21 | ||||
| -rw-r--r-- | src/battlemap/src/Constants/UI.elm | 6 | ||||
| -rw-r--r-- | src/battlemap/src/Update/DisplayCharacterInfo.elm | 24 | 
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)     ) | 


