| summaryrefslogtreecommitdiff | 
diff options
| -rw-r--r-- | src/battlemap/src/Event.elm | 3 | ||||
| -rw-r--r-- | src/battlemap/src/UI.elm | 70 | ||||
| -rw-r--r-- | src/battlemap/src/Update.elm | 3 | ||||
| -rw-r--r-- | src/battlemap/src/Util/Html.elm | 6 | ||||
| -rw-r--r-- | src/battlemap/src/View.elm | 18 | ||||
| -rw-r--r-- | src/battlemap/src/View/Battlemap.elm | 6 | ||||
| -rw-r--r-- | src/battlemap/src/View/Footer.elm | 38 | ||||
| -rw-r--r-- | src/battlemap/src/View/Footer/ManualControls.elm (renamed from src/battlemap/src/View/Controls.elm) | 42 | ||||
| -rw-r--r-- | src/battlemap/src/View/Footer/TabMenu.elm | 94 | ||||
| -rw-r--r-- | src/battlemap/src/View/Footer/TabMenu/Characters.elm | 29 | ||||
| -rw-r--r-- | src/battlemap/src/View/Footer/TabMenu/Settings.elm | 42 | ||||
| -rw-r--r-- | src/battlemap/src/View/Footer/TabMenu/Status.elm (renamed from src/battlemap/src/View/Status.elm) | 28 | ||||
| -rw-r--r-- | src/battlemap/src/View/Header.elm | 24 | 
13 files changed, 355 insertions, 48 deletions
| diff --git a/src/battlemap/src/Event.elm b/src/battlemap/src/Event.elm index 96d4dfa..c56f8cf 100644 --- a/src/battlemap/src/Event.elm +++ b/src/battlemap/src/Event.elm @@ -5,9 +5,12 @@ import Battlemap.Location  import Character +import UI +  type Type =     DirectionRequested Battlemap.Direction.Type     | TileSelected Battlemap.Location.Ref     | CharacterSelected Character.Ref     | TurnEnded     | ScaleChangeRequested Float +   | TabSelected UI.Tab diff --git a/src/battlemap/src/UI.elm b/src/battlemap/src/UI.elm index 5e0718e..7e21a36 100644 --- a/src/battlemap/src/UI.elm +++ b/src/battlemap/src/UI.elm @@ -3,29 +3,51 @@ module UI exposing        Type,        Tab(..),        default, +      -- Zoom        get_zoom_level,        reset_zoom_level, -      mod_zoom_level +      mod_zoom_level, +      -- Tab +      try_getting_displayed_tab, +      set_displayed_tab, +      reset_displayed_tab, +      to_string, +      get_all_tabs, +      -- Manual Controls +      has_manual_controls_enabled     ) +-------------------------------------------------------------------------------- +-- TYPES ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- +type Tab = +   StatusTab +   | CharactersTab +   | SettingsTab +  type alias Type =     {        zoom_level : Float, -      show_manual_controls : Bool +      show_manual_controls : Bool, +      displayed_tab : (Maybe Tab)     } -type Tab = -   NoTab -   | StatusTab -   | SettingsTab +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +--------------------------------------------------------------------------------  default : Type  default =     {        zoom_level = 1.0, -      show_manual_controls = True +      show_manual_controls = True, +      displayed_tab = Nothing     } +-- Zoom ------------------------------------------------------------------------  get_zoom_level : Type -> Float  get_zoom_level ui = ui.zoom_level @@ -34,3 +56,37 @@ reset_zoom_level ui = {ui | zoom_level = 1.0}  mod_zoom_level : Type -> Float -> Type  mod_zoom_level ui mod = {ui | zoom_level = (mod * ui.zoom_level)} + +-- Tab ------------------------------------------------------------------------- +try_getting_displayed_tab : Type -> (Maybe Tab) +try_getting_displayed_tab ui = ui.displayed_tab + +set_displayed_tab : Type -> Tab -> Type +set_displayed_tab ui tab = {ui | displayed_tab = (Just tab)} + +reset_displayed_tab : Type -> Type +reset_displayed_tab ui = {ui | displayed_tab = Nothing} + +to_string : Tab -> String +to_string tab = +   case tab of +      StatusTab -> "Status" +      CharactersTab -> "Characters" +      SettingsTab -> "Settings" + +get_all_tabs : (List Tab) +get_all_tabs = [StatusTab, CharactersTab, SettingsTab] +-- ManualControls -------------------------------------------------------------- +has_manual_controls_enabled : Type -> Bool +has_manual_controls_enabled ui = ui.show_manual_controls + +toggle_manual_controls : Type -> Type +toggle_manual_controls ui = +   if (ui.show_manual_controls) +   then +      {ui | show_manual_controls = False} +   else +      {ui | show_manual_controls = True} + +set_enable_toggle_manual_controls : Type -> Bool -> Type +set_enable_toggle_manual_controls ui val = {ui | show_manual_controls = val} diff --git a/src/battlemap/src/Update.elm b/src/battlemap/src/Update.elm index 6466ddf..60d1f25 100644 --- a/src/battlemap/src/Update.elm +++ b/src/battlemap/src/Update.elm @@ -34,3 +34,6 @@ update event model =              ({model | ui = (UI.reset_zoom_level model.ui)}, Cmd.none)           else              ({model | ui = (UI.mod_zoom_level model.ui mod)}, Cmd.none) + +      (Event.TabSelected tab) -> +            ({model | ui = (UI.set_displayed_tab model.ui tab)}, Cmd.none) diff --git a/src/battlemap/src/Util/Html.elm b/src/battlemap/src/Util/Html.elm new file mode 100644 index 0000000..42eadba --- /dev/null +++ b/src/battlemap/src/Util/Html.elm @@ -0,0 +1,6 @@ +module Util.Html exposing (nothing) + +import Html + +nothing : (Html.Html a) +nothing = (Html.text "") diff --git a/src/battlemap/src/View.elm b/src/battlemap/src/View.elm index 1b84971..4e23561 100644 --- a/src/battlemap/src/View.elm +++ b/src/battlemap/src/View.elm @@ -1,19 +1,24 @@  module View exposing (view) +-- Elm -------------------------------------------------------------------------  import Dict  import Html  import Html.Attributes +-- Battlemap -------------------------------------------------------------------  import UI  import View.Battlemap -import View.Controls -import View.Status +import View.Header +import View.Footer  import Event  import Model +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +--------------------------------------------------------------------------------  view : Model.Type -> (Html.Html Event.Type)  view model =     (Html.div @@ -21,12 +26,7 @@ view model =           (Html.Attributes.class "battlemap")        ]        [ -         (Html.div -            [ -               (Html.Attributes.class "battlemap-controls") -            ] -            (View.Controls.view) -         ), +         (View.Header.get_html model),           (Html.div              [                 (Html.Attributes.class "battlemap-container") @@ -39,6 +39,6 @@ view model =                 )              ]           ), -         (View.Status.view model) +         (View.Footer.get_html model)        ]     ) diff --git a/src/battlemap/src/View/Battlemap.elm b/src/battlemap/src/View/Battlemap.elm index 071cce4..450a392 100644 --- a/src/battlemap/src/View/Battlemap.elm +++ b/src/battlemap/src/View/Battlemap.elm @@ -1,5 +1,6 @@  module View.Battlemap exposing (get_html) +-- Elm -------------------------------------------------------------------------  import Array  import List @@ -9,6 +10,7 @@ import Html.Attributes  import Html.Events  import Html.Lazy +-- Battlemap  ------------------------------------------------------------------  import Battlemap  import Battlemap.Tile @@ -16,6 +18,8 @@ import Character  import Constants.UI +import Util.Html +  import View.Battlemap.Tile  import View.Battlemap.Navigator @@ -106,6 +110,6 @@ get_html battlemap scale characters =              (Just nav_summary) ->                 (View.Battlemap.Navigator.get_html nav_summary) -            Nothing -> [(Html.text "")] +            Nothing -> [(Util.Html.nothing)]        )     ) diff --git a/src/battlemap/src/View/Footer.elm b/src/battlemap/src/View/Footer.elm new file mode 100644 index 0000000..3b4d8ef --- /dev/null +++ b/src/battlemap/src/View/Footer.elm @@ -0,0 +1,38 @@ +module View.Footer exposing (get_html) + +-- Elm ------------------------------------------------------------------------- +import Html +import Html.Attributes + +-- Battlemap ------------------------------------------------------------------- +import Event + +import Model + +import Util.Html + +import UI + +import View.Footer.TabMenu +import View.Footer.ManualControls + +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- +get_html : Model.Type -> (Html.Html Event.Type) +get_html model = +   (Html.div +      [ +         (Html.Attributes.class "battlemap-footer") +      ] +      [ +         (View.Footer.TabMenu.get_html model), +         ( +            if (UI.has_manual_controls_enabled model.ui) +            then +               (View.Footer.ManualControls.get_html) +            else +               (Util.Html.nothing) +         ) +      ] +   ) diff --git a/src/battlemap/src/View/Controls.elm b/src/battlemap/src/View/Footer/ManualControls.elm index a664ffe..83f880f 100644 --- a/src/battlemap/src/View/Controls.elm +++ b/src/battlemap/src/View/Footer/ManualControls.elm @@ -1,8 +1,11 @@ -module View.Controls exposing (view) +module View.Footer.ManualControls exposing (get_html) +-- Elm -------------------------------------------------------------------------  import Html +import Html.Attributes  import Html.Events +-- Battlemap -------------------------------------------------------------------  import Battlemap.Direction  import Event @@ -28,29 +31,20 @@ end_turn_button =        [ (Html.text "End Turn") ]     ) -scale_button : Float -> String -> (Html.Html Event.Type) -scale_button mod label = -   (Html.button -      [ -         (Html.Events.onClick -            (Event.ScaleChangeRequested mod) -         ) -      ] -      [ (Html.text label) ] -   ) -  --------------------------------------------------------------------------------  -- EXPORTED --------------------------------------------------------------------  -------------------------------------------------------------------------------- -view : (List (Html.Html Event.Type)) -view = -   [ -      (direction_button Battlemap.Direction.Left "Left"), -      (direction_button Battlemap.Direction.Down "Down"), -      (direction_button Battlemap.Direction.Up "Up"), -      (direction_button Battlemap.Direction.Right "Right"), -      (end_turn_button), -      (scale_button (0.75) "Zoom -"), -      (scale_button 0 "Zoom Reset"), -      (scale_button (1.15) "Zoom +") -   ] +get_html : (Html.Html Event.Type) +get_html = +   (Html.div +      [ +         (Html.Attributes.class "battlemap-footer-manualcontrols") +      ] +      [ +         (direction_button Battlemap.Direction.Left "Left"), +         (direction_button Battlemap.Direction.Down "Down"), +         (direction_button Battlemap.Direction.Up "Up"), +         (direction_button Battlemap.Direction.Right "Right"), +         (end_turn_button) +      ] +   ) diff --git a/src/battlemap/src/View/Footer/TabMenu.elm b/src/battlemap/src/View/Footer/TabMenu.elm new file mode 100644 index 0000000..73edf23 --- /dev/null +++ b/src/battlemap/src/View/Footer/TabMenu.elm @@ -0,0 +1,94 @@ +module View.Footer.TabMenu exposing (get_html) + +-- Elm ------------------------------------------------------------------------- +import Html +import Html.Attributes +import Html.Events + +-- Battlemap ------------------------------------------------------------------- +import Event + +import Model + +import UI + +import View.Footer.TabMenu.Characters +import View.Footer.TabMenu.Status +import View.Footer.TabMenu.Settings + +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- +get_basic_button_html : UI.Tab -> (Html.Html Event.Type) +get_basic_button_html tab = +   (Html.button +      [ (Html.Events.onClick (Event.TabSelected tab)) ] +      [ (Html.text (UI.to_string tab)) ] +   ) + +get_menu_button_html : UI.Tab -> UI.Tab -> (Html.Html Event.Type) +get_menu_button_html selected_tab tab = +   (Html.button +      ( +         if (tab == selected_tab) +         then +            [ (Html.Attributes.disabled True) ] +         else +            [ (Html.Events.onClick (Event.TabSelected tab)) ] +      ) +      [ (Html.text (UI.to_string tab)) ] +   ) + +get_active_tab_selector_html : UI.Tab -> (Html.Html Event.Type) +get_active_tab_selector_html selected_tab = +   (Html.div +      [ +         (Html.Attributes.class "battlemap-footer-tabmenu-selector") +      ] +      (List.map (get_menu_button_html selected_tab) (UI.get_all_tabs)) +   ) + +get_inactive_tab_selector_html : (Html.Html Event.Type) +get_inactive_tab_selector_html = +   (Html.div +      [ +         (Html.Attributes.class "battlemap-footer-tabmenu-selector") +      ] +      (List.map (get_basic_button_html) (UI.get_all_tabs)) +   ) + +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- +get_html : Model.Type -> (Html.Html Event.Type) +get_html model = +   (Html.div +      [ +         (Html.Attributes.class "battlemap-footer-tabmenu") +      ] +      ( +         let +            displayed_tab = (UI.try_getting_displayed_tab model.ui) +         in +            case displayed_tab of +               (Just UI.StatusTab) -> +                  [ +                     (get_active_tab_selector_html UI.StatusTab), +                     (View.Footer.TabMenu.Status.get_html model) +                  ] + +               (Just UI.CharactersTab) -> +                  [ +                     (get_active_tab_selector_html UI.CharactersTab), +                     (View.Footer.TabMenu.Characters.get_html model) +                  ] + +               (Just UI.SettingsTab) -> +                  [ +                     (get_active_tab_selector_html UI.SettingsTab), +                     (View.Footer.TabMenu.Settings.get_html model) +                  ] + +               Nothing -> [(get_inactive_tab_selector_html)] +      ) +   ) diff --git a/src/battlemap/src/View/Footer/TabMenu/Characters.elm b/src/battlemap/src/View/Footer/TabMenu/Characters.elm new file mode 100644 index 0000000..2929dee --- /dev/null +++ b/src/battlemap/src/View/Footer/TabMenu/Characters.elm @@ -0,0 +1,29 @@ +module View.Footer.TabMenu.Characters exposing (get_html) + +-- Elm ------------------------------------------------------------------------- +import Html +import Html.Attributes +import Html.Events + +-- Battlemap ------------------------------------------------------------------- +import Event + +import Model + +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- +get_html : Model.Type -> (Html.Html Event.Type) +get_html model = +   (Html.div +      [ +         (Html.Attributes.class "battlemap-footer-tabmenu-content"), +         (Html.Attributes.class "battlemap-footer-tabmenu-content-characters") +      ] +      [ +         (Html.text "Not implemented yet.") +      ] +   ) diff --git a/src/battlemap/src/View/Footer/TabMenu/Settings.elm b/src/battlemap/src/View/Footer/TabMenu/Settings.elm new file mode 100644 index 0000000..f11fde0 --- /dev/null +++ b/src/battlemap/src/View/Footer/TabMenu/Settings.elm @@ -0,0 +1,42 @@ +module View.Footer.TabMenu.Settings exposing (get_html) + +-- Elm ------------------------------------------------------------------------- +import Html +import Html.Attributes +import Html.Events + +-- Battlemap ------------------------------------------------------------------- +import Event + +import Model + +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- +scale_button : Float -> String -> (Html.Html Event.Type) +scale_button mod label = +   (Html.button +      [ +         (Html.Events.onClick +            (Event.ScaleChangeRequested mod) +         ) +      ] +      [ (Html.text label) ] +   ) + +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- +get_html : Model.Type -> (Html.Html Event.Type) +get_html model = +   (Html.div +      [ +         (Html.Attributes.class "battlemap-footer-tabmenu-content"), +         (Html.Attributes.class "battlemap-footer-tabmenu-content-settings") +      ] +      [ +         (scale_button (0.75) "Zoom -"), +         (scale_button 0 "Zoom Reset"), +         (scale_button (1.15) "Zoom +") +      ] +   ) diff --git a/src/battlemap/src/View/Status.elm b/src/battlemap/src/View/Footer/TabMenu/Status.elm index 8986590..3bb87c3 100644 --- a/src/battlemap/src/View/Status.elm +++ b/src/battlemap/src/View/Footer/TabMenu/Status.elm @@ -1,10 +1,12 @@ -module View.Status exposing (view) +module View.Footer.TabMenu.Status exposing (get_html) +-- Elm -------------------------------------------------------------------------  import Dict  import Html  import Html.Attributes +-- Battlemap -------------------------------------------------------------------  import Battlemap  import Character @@ -12,6 +14,9 @@ import Error  import Event  import Model +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +--------------------------------------------------------------------------------  moving_character_text : Model.Type -> String  moving_character_text model =     case model.selection of @@ -32,24 +37,33 @@ moving_character_text model =                    ++ (toString (Character.get_movement_points char))                    ++ " movement points remaining."                 ) +        _ -> "Error: model.selection does not match its state." -view : Model.Type -> (Html.Html Event.Type) -view model = +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- +get_html : Model.Type -> (Html.Html Event.Type) +get_html model =     (Html.div        [ -         (Html.Attributes.class "battlemap-status") +         (Html.Attributes.class "battlemap-footer-tabmenu-content"), +         (Html.Attributes.class "battlemap-footer-tabmenu-content-status")        ]        [           (Html.text              (                 (case model.state of                    Model.Default -> "Click on a character to control it." -                  Model.MovingCharacterWithButtons -> (moving_character_text model) -                  Model.MovingCharacterWithClick -> (moving_character_text model)                    Model.FocusingTile -> "Error: Unimplemented." +                  Model.MovingCharacterWithButtons -> +                     (moving_character_text model) + +                  Model.MovingCharacterWithClick -> +                     (moving_character_text model)                 ) -               ++ " " ++ +               ++ " " +               ++                 (case model.error of                    Nothing -> ""                    (Just error) -> (Error.to_string error) diff --git a/src/battlemap/src/View/Header.elm b/src/battlemap/src/View/Header.elm new file mode 100644 index 0000000..3a86741 --- /dev/null +++ b/src/battlemap/src/View/Header.elm @@ -0,0 +1,24 @@ +module View.Header exposing (get_html) + +-- Elm ------------------------------------------------------------------------- +import Html +import Html.Attributes + +-- Battlemap ------------------------------------------------------------------- +import Event + +import Model + +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- +get_html : Model.Type -> (Html.Html Event.Type) +get_html model = +   (Html.div +      [ +         (Html.Attributes.class "battlemap-header") +      ] +      [ +         (Html.text "Tacticians Online - Development Branch") +      ] +   ) | 


