| summaryrefslogtreecommitdiff | 
diff options
| author | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2018-05-22 16:10:37 +0200 | 
|---|---|---|
| committer | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2018-05-22 16:10:37 +0200 | 
| commit | e2459f4e8ab6a340e3509b6f2a08e74800ff83cd (patch) | |
| tree | ecb95a3ddd4105a511c5f2c8556de013bde27205 /src | |
| parent | d3800376304f908f65dfd7ec38fcc1189fcf5396 (diff) | |
Scrolls to show focused character (WIP).
Diffstat (limited to 'src')
| -rw-r--r-- | src/battlemap/elm-package.json | 1 | ||||
| -rw-r--r-- | src/battlemap/src/Action/Scroll.elm | 53 | ||||
| -rw-r--r-- | src/battlemap/src/Constants/UI.elm | 3 | ||||
| -rw-r--r-- | src/battlemap/src/ElmModule/Update.elm | 8 | ||||
| -rw-r--r-- | src/battlemap/src/ElmModule/View.elm | 5 | ||||
| -rw-r--r-- | src/battlemap/src/Struct/Error.elm | 2 | ||||
| -rw-r--r-- | src/battlemap/src/Struct/Event.elm | 12 | ||||
| -rw-r--r-- | src/battlemap/src/Update/SelectCharacter.elm | 20 | 
8 files changed, 100 insertions, 4 deletions
| diff --git a/src/battlemap/elm-package.json b/src/battlemap/elm-package.json index 82d19f0..5f6573f 100644 --- a/src/battlemap/elm-package.json +++ b/src/battlemap/elm-package.json @@ -10,6 +10,7 @@      "dependencies": {          "NoRedInk/elm-decode-pipeline": "3.0.0 <= v < 4.0.0",          "elm-lang/core": "5.1.1 <= v < 6.0.0", +        "elm-lang/dom": "1.1.1 <= v < 2.0.0",          "elm-lang/html": "2.0.0 <= v < 3.0.0",          "elm-lang/http": "1.0.0 <= v < 2.0.0"      }, diff --git a/src/battlemap/src/Action/Scroll.elm b/src/battlemap/src/Action/Scroll.elm new file mode 100644 index 0000000..e84e6d5 --- /dev/null +++ b/src/battlemap/src/Action/Scroll.elm @@ -0,0 +1,53 @@ +module Action.Scroll exposing (to) + +-- Elm ------------------------------------------------------------------------- +import Dom +import Dom.Scroll + +import Task + +-- Battlemap ------------------------------------------------------------------- +import Constants.UI + +import Struct.UI +import Struct.Location + +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- +-- FIXME: Scrolling so that the focused element is in the middle, not in the top +-- left corner, would be much better. + +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) +      ) +   ) + +scroll_to_y : Int -> Struct.UI.Type -> (Task.Task Dom.Error ()) +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) +      ) +   ) + +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- +to : Struct.Location.Type -> Struct.UI.Type -> (Task.Task Dom.Error (List ())) +to loc ui = +   (Task.sequence +      [ +         (scroll_to_x loc.x ui), +         (scroll_to_y loc.y ui) +      ] +   ) diff --git a/src/battlemap/src/Constants/UI.elm b/src/battlemap/src/Constants/UI.elm index eca47b7..303f69e 100644 --- a/src/battlemap/src/Constants/UI.elm +++ b/src/battlemap/src/Constants/UI.elm @@ -2,3 +2,6 @@ module Constants.UI exposing (..)  tile_size : Int  tile_size = 32 + +viewer_html_id : String +viewer_html_id = "battlemap_viewer" diff --git a/src/battlemap/src/ElmModule/Update.elm b/src/battlemap/src/ElmModule/Update.elm index 3a01c23..14fd7f3 100644 --- a/src/battlemap/src/ElmModule/Update.elm +++ b/src/battlemap/src/ElmModule/Update.elm @@ -38,6 +38,14 @@ update event model =        new_model = (Struct.Model.clear_error model)     in     case event of +      Struct.Event.None -> (model, Cmd.none) + +      (Struct.Event.Failed err) -> +         ( +            (Struct.Model.invalidate err new_model), +            Cmd.none +         ) +        Struct.Event.AttackWithoutMovingRequest ->           (Update.AttackWithoutMoving.apply_to new_model) diff --git a/src/battlemap/src/ElmModule/View.elm b/src/battlemap/src/ElmModule/View.elm index bb25fb7..05fbc1c 100644 --- a/src/battlemap/src/ElmModule/View.elm +++ b/src/battlemap/src/ElmModule/View.elm @@ -5,6 +5,8 @@ import Html  import Html.Attributes  -- Battlemap ------------------------------------------------------------------- +import Constants.UI +  import Struct.Event  import Struct.Model @@ -32,7 +34,8 @@ view model =           (View.Controlled.get_html model),           (Html.div              [ -               (Html.Attributes.class "battlemap-container") +               (Html.Attributes.class "battlemap-container"), +               (Html.Attributes.id Constants.UI.viewer_html_id)              ]              [(View.Battlemap.get_html model)]           ), diff --git a/src/battlemap/src/Struct/Error.elm b/src/battlemap/src/Struct/Error.elm index 3607d1d..5f40c09 100644 --- a/src/battlemap/src/Struct/Error.elm +++ b/src/battlemap/src/Struct/Error.elm @@ -8,6 +8,7 @@ type Mode =     | Programming     | Unimplemented     | Networking +   | Failure  type alias Type =     { @@ -33,6 +34,7 @@ to_string : Type -> String  to_string e =     (        (case e.mode of +         Failure -> "The action failed: "           IllegalAction -> "Request discarded: "           Programming -> "Error in the program (please report): "           Unimplemented -> "Update discarded due to unimplemented feature: " diff --git a/src/battlemap/src/Struct/Event.elm b/src/battlemap/src/Struct/Event.elm index bc4de17..0aaa774 100644 --- a/src/battlemap/src/Struct/Event.elm +++ b/src/battlemap/src/Struct/Event.elm @@ -1,4 +1,4 @@ -module Struct.Event exposing (Type(..)) +module Struct.Event exposing (Type(..), attempted)  -- Elm -------------------------------------------------------------------------  import Http @@ -6,6 +6,7 @@ import Http  -- Battlemap -------------------------------------------------------------------  import Struct.Character  import Struct.Direction +import Struct.Error  import Struct.Location  import Struct.ServerReply  import Struct.UI @@ -27,3 +28,12 @@ type Type =     | WeaponSwitchRequest     | AttackWithoutMovingRequest     | AbortTurnRequest +   | None +   | Failed Struct.Error.Type + +attempted : (Result.Result err val) -> Type +attempted act = +   case act of +      (Result.Ok _) -> None +      (Result.Err msg) -> +         (Failed (Struct.Error.new Struct.Error.Failure (toString msg))) diff --git a/src/battlemap/src/Update/SelectCharacter.elm b/src/battlemap/src/Update/SelectCharacter.elm index 1e2c2df..7a4e736 100644 --- a/src/battlemap/src/Update/SelectCharacter.elm +++ b/src/battlemap/src/Update/SelectCharacter.elm @@ -3,7 +3,11 @@ module Update.SelectCharacter exposing (apply_to)  -- Elm -------------------------------------------------------------------------  import Dict +import Task +  -- Battlemap ------------------------------------------------------------------- +import Action.Scroll +  import Struct.Battlemap  import Struct.Character  import Struct.CharacterTurn @@ -149,13 +153,25 @@ double_clicked_character model target_char_id =                 else                    (                       (ctrl_or_focus_character model target_char_id target_char), -                     Cmd.none +                     (Task.attempt +                        (Struct.Event.attempted) +                        (Action.Scroll.to +                           (Struct.Character.get_location target_char) +                           model.ui +                        ) +                     )                    )              _ ->                 (                    (ctrl_or_focus_character model target_char_id target_char), -                  Cmd.none +                  (Task.attempt +                     (Struct.Event.attempted) +                     (Action.Scroll.to +                        (Struct.Character.get_location target_char) +                        model.ui +                     ) +                  )                 )        Nothing -> | 


