From 4a2976d634040f16fd85262f4fbf7b97e4dec36c Mon Sep 17 00:00:00 2001 From: nsensfel Date: Thu, 30 Nov 2017 20:00:42 +0100 Subject: Changes how the GUI looks. --- src/battlemap/src/Model.elm | 3 +- src/battlemap/src/Model/EndTurn.elm | 4 +- src/battlemap/src/Model/RequestDirection.elm | 4 +- src/battlemap/src/Model/SelectCharacter.elm | 7 +- src/battlemap/src/Model/SelectTile.elm | 4 +- src/battlemap/src/Send/CharacterTurn.elm | 4 +- src/battlemap/src/Shim/Model.elm | 1 + src/battlemap/src/UI.elm | 4 + src/battlemap/src/View.elm | 32 +++- src/battlemap/src/View/Footer.elm | 59 ++++-- src/battlemap/src/View/Footer/ManualControls.elm | 50 ----- src/battlemap/src/View/Footer/TabMenu.elm | 115 ----------- .../src/View/Footer/TabMenu/Characters.elm | 46 ----- src/battlemap/src/View/Footer/TabMenu/Settings.elm | 54 ------ src/battlemap/src/View/Footer/TabMenu/Status.elm | 211 --------------------- src/battlemap/src/View/Header.elm | 24 --- src/battlemap/src/View/SideBar.elm | 38 ++++ src/battlemap/src/View/SideBar/ManualControls.elm | 50 +++++ src/battlemap/src/View/SideBar/TabMenu.elm | 115 +++++++++++ .../src/View/SideBar/TabMenu/Characters.elm | 46 +++++ .../src/View/SideBar/TabMenu/Settings.elm | 54 ++++++ src/battlemap/src/View/SideBar/TabMenu/Status.elm | 171 +++++++++++++++++ src/battlemap/www/style.css | 37 +++- src/global/www/style.css | 15 +- 24 files changed, 595 insertions(+), 553 deletions(-) delete mode 100644 src/battlemap/src/View/Footer/ManualControls.elm delete mode 100644 src/battlemap/src/View/Footer/TabMenu.elm delete mode 100644 src/battlemap/src/View/Footer/TabMenu/Characters.elm delete mode 100644 src/battlemap/src/View/Footer/TabMenu/Settings.elm delete mode 100644 src/battlemap/src/View/Footer/TabMenu/Status.elm delete mode 100644 src/battlemap/src/View/Header.elm create mode 100644 src/battlemap/src/View/SideBar.elm create mode 100644 src/battlemap/src/View/SideBar/ManualControls.elm create mode 100644 src/battlemap/src/View/SideBar/TabMenu.elm create mode 100644 src/battlemap/src/View/SideBar/TabMenu/Characters.elm create mode 100644 src/battlemap/src/View/SideBar/TabMenu/Settings.elm create mode 100644 src/battlemap/src/View/SideBar/TabMenu/Status.elm diff --git a/src/battlemap/src/Model.elm b/src/battlemap/src/Model.elm index 255190b..5a0b754 100644 --- a/src/battlemap/src/Model.elm +++ b/src/battlemap/src/Model.elm @@ -27,7 +27,6 @@ import Character -------------------------------------------------------------------------------- type State = Default - | ControllingCharacter Character.Ref | InspectingTile Battlemap.Location.Ref | InspectingCharacter Character.Ref @@ -38,6 +37,7 @@ type alias Type = characters: (Dict.Dict Character.Ref Character.Type), error: (Maybe Error.Type), controlled_team: Int, + controlled_character: (Maybe Character.Ref), player_id: String, ui: UI.Type } @@ -70,6 +70,7 @@ reset model characters = battlemap = (Battlemap.reset model.battlemap), characters = characters, error = Nothing, + controlled_character = Nothing, ui = (UI.set_previous_action model.ui Nothing) } diff --git a/src/battlemap/src/Model/EndTurn.elm b/src/battlemap/src/Model/EndTurn.elm index f62c108..f26beba 100644 --- a/src/battlemap/src/Model/EndTurn.elm +++ b/src/battlemap/src/Model/EndTurn.elm @@ -65,8 +65,8 @@ make_it_so model char_ref = -------------------------------------------------------------------------------- apply_to : Model.Type -> (Model.Type, (Cmd Event.Type)) apply_to model = - case (Model.get_state model) of - (Model.ControllingCharacter char_ref) -> + case model.controlled_character of + (Just char_ref) -> (make_it_so model char_ref) _ -> diff --git a/src/battlemap/src/Model/RequestDirection.elm b/src/battlemap/src/Model/RequestDirection.elm index 30bc54e..4e52897 100644 --- a/src/battlemap/src/Model/RequestDirection.elm +++ b/src/battlemap/src/Model/RequestDirection.elm @@ -57,8 +57,8 @@ make_it_so model char_ref dir = -------------------------------------------------------------------------------- apply_to : Model.Type -> Battlemap.Direction.Type -> Model.Type apply_to model dir = - case (Model.get_state model) of - (Model.ControllingCharacter char_ref) -> + case model.controlled_character of + (Just char_ref) -> (make_it_so model char_ref dir) _ -> diff --git a/src/battlemap/src/Model/SelectCharacter.elm b/src/battlemap/src/Model/SelectCharacter.elm index 2f10f1e..a4a077d 100644 --- a/src/battlemap/src/Model/SelectCharacter.elm +++ b/src/battlemap/src/Model/SelectCharacter.elm @@ -49,7 +49,8 @@ select_character model target_char_id target_char = if ((Character.is_enabled target_char)) then {model | - state = (Model.ControllingCharacter target_char_id), + state = Model.Default, + controlled_character = (Just target_char_id), ui = (UI.set_previous_action model.ui Nothing), battlemap = (Battlemap.set_navigator @@ -83,8 +84,8 @@ apply_to model target_char_id = then case (Dict.get target_char_id model.characters) of (Just target_char) -> - case (Model.get_state model) of - (Model.ControllingCharacter main_char_id) -> + case model.controlled_character of + (Just main_char_id) -> (attack_character model main_char_id diff --git a/src/battlemap/src/Model/SelectTile.elm b/src/battlemap/src/Model/SelectTile.elm index 2191d27..5ce3c3c 100644 --- a/src/battlemap/src/Model/SelectTile.elm +++ b/src/battlemap/src/Model/SelectTile.elm @@ -103,8 +103,8 @@ apply_to : ( (Model.Type, (Cmd Event.Type)) ) apply_to model loc_ref = - case (Model.get_state model) of - (Model.ControllingCharacter char_ref) -> + case model.controlled_character of + (Just char_ref) -> (go_to_tile model char_ref loc_ref) _ -> ({model | state = (Model.InspectingTile loc_ref)}, Cmd.none) diff --git a/src/battlemap/src/Send/CharacterTurn.elm b/src/battlemap/src/Send/CharacterTurn.elm index 092f31f..0235122 100644 --- a/src/battlemap/src/Send/CharacterTurn.elm +++ b/src/battlemap/src/Send/CharacterTurn.elm @@ -24,8 +24,8 @@ import Send -------------------------------------------------------------------------------- try_encoding : Model.Type -> (Maybe Json.Encode.Value) try_encoding model = - case (Model.get_state model) of - (Model.ControllingCharacter char_ref) -> + case model.controlled_character of + (Just char_ref) -> (Just (Json.Encode.object [ diff --git a/src/battlemap/src/Shim/Model.elm b/src/battlemap/src/Shim/Model.elm index 396a8f8..e7bd2c3 100644 --- a/src/battlemap/src/Shim/Model.elm +++ b/src/battlemap/src/Shim/Model.elm @@ -24,6 +24,7 @@ generate = error = Nothing, battlemap = (Battlemap.empty), controlled_team = 0, + controlled_character = Nothing, player_id = "0", characters = (Dict.empty), ui = (UI.default) diff --git a/src/battlemap/src/UI.elm b/src/battlemap/src/UI.elm index f30a0fc..978ed00 100644 --- a/src/battlemap/src/UI.elm +++ b/src/battlemap/src/UI.elm @@ -17,6 +17,7 @@ module UI exposing -- Manual Controls has_manual_controls_enabled, -- Previous Action + has_focus, get_previous_action, set_previous_action ) @@ -111,6 +112,9 @@ set_enable_manual_controls : Type -> Bool -> Type set_enable_manual_controls ui val = {ui | show_manual_controls = val} -- Previous Action ------------------------------------------------------------- +has_focus : Type -> Bool +has_focus ui = True + set_previous_action : Type -> (Maybe Action) -> Type set_previous_action ui act = {ui | previous_action = act} diff --git a/src/battlemap/src/View.elm b/src/battlemap/src/View.elm index b8fae72..9073d93 100644 --- a/src/battlemap/src/View.elm +++ b/src/battlemap/src/View.elm @@ -10,7 +10,7 @@ import Html.Attributes import UI import View.Battlemap -import View.Header +import View.SideBar import View.Footer import Event @@ -26,19 +26,33 @@ view model = (Html.Attributes.class "fullscreen-module") ] [ - (View.Header.get_html model), (Html.div [ - (Html.Attributes.class "battlemap-container") + (Html.Attributes.class "battlemap-left-panel") ] [ - (View.Battlemap.get_html - model.battlemap - (UI.get_zoom_level model.ui) - (Dict.values model.characters) - ) + (Html.div + [ + (Html.Attributes.class "battlemap-container") + ] + [ + (View.Battlemap.get_html + model.battlemap + (UI.get_zoom_level model.ui) + (Dict.values model.characters) + ) + ] + ), + (View.Footer.get_html model) ] ), - (View.Footer.get_html model) + (Html.div + [ + (Html.Attributes.class "battlemap-right-panel") + ] + [ + (View.SideBar.get_html model) + ] + ) ] ) diff --git a/src/battlemap/src/View/Footer.elm b/src/battlemap/src/View/Footer.elm index 3b4d8ef..26a08ef 100644 --- a/src/battlemap/src/View/Footer.elm +++ b/src/battlemap/src/View/Footer.elm @@ -4,7 +4,12 @@ module View.Footer exposing (get_html) import Html import Html.Attributes +import Dict + -- Battlemap ------------------------------------------------------------------- +import Battlemap +import Character + import Event import Model @@ -13,26 +18,48 @@ import Util.Html import UI -import View.Footer.TabMenu -import View.Footer.ManualControls +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- +get_curr_char_info_htmls : ( + Model.Type -> + Character.Ref -> + (List (Html.Html Event.Type)) + ) +get_curr_char_info_htmls model char_ref = + case (Dict.get char_ref model.characters) of + (Just char) -> + [ + (Html.text + ( + "Controlling " + ++ char.name + ++ ": " + ++ (toString + (Battlemap.get_navigator_remaining_points + model.battlemap + ) + ) + ++ "/" + ++ (toString (Character.get_movement_points char)) + ++ " movement points remaining." + ) + ) + ] + + Nothing -> + [(Html.text "Error: Unknown character selected.")] -------------------------------------------------------------------------------- -- 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) + case model.controlled_character of + (Just char_id) -> + (Html.div + [(Html.Attributes.class "battlemap-footer")] + (get_curr_char_info_htmls model char_id) ) - ] - ) + + Nothing -> (Util.Html.nothing) diff --git a/src/battlemap/src/View/Footer/ManualControls.elm b/src/battlemap/src/View/Footer/ManualControls.elm deleted file mode 100644 index c56e954..0000000 --- a/src/battlemap/src/View/Footer/ManualControls.elm +++ /dev/null @@ -1,50 +0,0 @@ -module View.Footer.ManualControls exposing (get_html) - --- Elm ------------------------------------------------------------------------- -import Html -import Html.Attributes -import Html.Events - --- Battlemap ------------------------------------------------------------------- -import Battlemap.Direction - -import Event - --------------------------------------------------------------------------------- --- LOCAL ----------------------------------------------------------------------- --------------------------------------------------------------------------------- -direction_button : Battlemap.Direction.Type -> String -> (Html.Html Event.Type) -direction_button dir label = - (Html.button - [ - (Html.Events.onClick - (Event.DirectionRequested dir) - ) - ] - [ (Html.text label) ] - ) - -end_turn_button : (Html.Html Event.Type) -end_turn_button = - (Html.button - [ (Html.Events.onClick Event.TurnEnded) ] - [ (Html.text "End Turn") ] - ) - --------------------------------------------------------------------------------- --- EXPORTED -------------------------------------------------------------------- --------------------------------------------------------------------------------- -get_html : (Html.Html Event.Type) -get_html = - (Html.div - [ - (Html.Attributes.class "battlemap-manual-controls") - ] - [ - (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 deleted file mode 100644 index 967610a..0000000 --- a/src/battlemap/src/View/Footer/TabMenu.elm +++ /dev/null @@ -1,115 +0,0 @@ -module View.Footer.TabMenu exposing (get_html) - --- Elm ------------------------------------------------------------------------- -import Html -import Html.Attributes -import Html.Events - --- Battlemap ------------------------------------------------------------------- -import Event - -import Error - -import Model - -import UI -import Util.Html - -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-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-tabmenu-selector") - ] - (List.map (get_basic_button_html) (UI.get_all_tabs)) - ) - -get_error_message_html : Model.Type -> (Html.Html Event.Type) -get_error_message_html model = - case model.error of - (Just error) -> - (Html.div - [ - (Html.Attributes.class "battlemap-tabmenu-error-message") - ] - [ - (Html.text (Error.to_string error)) - ] - ) - - Nothing -> Util.Html.nothing --------------------------------------------------------------------------------- --- EXPORTED -------------------------------------------------------------------- --------------------------------------------------------------------------------- -get_html : Model.Type -> (Html.Html Event.Type) -get_html model = - (Html.div - [ - (Html.Attributes.class "battlemap-tabmenu") - ] - ( - (get_error_message_html model) - :: - ( - 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 deleted file mode 100644 index 2e15ce1..0000000 --- a/src/battlemap/src/View/Footer/TabMenu/Characters.elm +++ /dev/null @@ -1,46 +0,0 @@ -module View.Footer.TabMenu.Characters exposing (get_html) - --- Elm ------------------------------------------------------------------------- -import Dict - -import Html -import Html.Attributes ---import Html.Events - --- Battlemap ------------------------------------------------------------------- -import Character - -import Event - -import Model - --------------------------------------------------------------------------------- --- LOCAL ----------------------------------------------------------------------- --------------------------------------------------------------------------------- -get_character_portrait_html : Character.Type -> (Html.Html Event.Type) -get_character_portrait_html char = - (Html.div - [ - (Html.Attributes.class "battlemap-character-portrait"), - (Html.Attributes.class - ("asset-char-portrait-" ++ (Character.get_portrait_id char)) - ) - ] - [ - ] - ) --------------------------------------------------------------------------------- --- EXPORTED -------------------------------------------------------------------- --------------------------------------------------------------------------------- -get_html : Model.Type -> (Html.Html Event.Type) -get_html model = - (Html.div - [ - (Html.Attributes.class "battlemap-tabmenu-content"), - (Html.Attributes.class "battlemap-tabmenu-characters-tab") - ] - (List.map - (get_character_portrait_html) - (Dict.values model.characters) - ) - ) diff --git a/src/battlemap/src/View/Footer/TabMenu/Settings.elm b/src/battlemap/src/View/Footer/TabMenu/Settings.elm deleted file mode 100644 index 3c23a15..0000000 --- a/src/battlemap/src/View/Footer/TabMenu/Settings.elm +++ /dev/null @@ -1,54 +0,0 @@ -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-tabmenu-content"), - (Html.Attributes.class "battlemap-tabmenu-settings-tab") - ] - [ - (scale_button (0.75) "Zoom -"), - (scale_button 0 "Zoom Reset"), - (scale_button (1.15) "Zoom +"), - (Html.button - [ - (Html.Events.onClick Event.DebugTeamSwitchRequest) - ] - [ (Html.text "[DEBUG] Switch team") ] - ), - (Html.button - [ - (Html.Events.onClick Event.DebugLoadBattlemapRequest) - ] - [ (Html.text "[DEBUG] Load battlemap") ] - ) - ] - ) diff --git a/src/battlemap/src/View/Footer/TabMenu/Status.elm b/src/battlemap/src/View/Footer/TabMenu/Status.elm deleted file mode 100644 index e3dd19b..0000000 --- a/src/battlemap/src/View/Footer/TabMenu/Status.elm +++ /dev/null @@ -1,211 +0,0 @@ -module View.Footer.TabMenu.Status exposing (get_html) - --- Elm ------------------------------------------------------------------------- -import Dict - -import Html -import Html.Attributes - --- Battlemap ------------------------------------------------------------------- -import Battlemap -import Battlemap.Location -import Battlemap.Tile - -import Character - -import UI - -import Util.Html - -import Error -import Event -import Model - --------------------------------------------------------------------------------- --- LOCAL ----------------------------------------------------------------------- --------------------------------------------------------------------------------- -get_navigator_info_html : Model.Type -> Character.Ref -> (Html.Html Event.Type) -get_navigator_info_html model char_ref = - case (Dict.get char_ref model.characters) of - Nothing -> (Html.text "Error: Unknown character selected.") - (Just char) -> - (Html.text - ( - "Controlling " - ++ char.name - ++ ": " - ++ (toString - (Battlemap.get_navigator_remaining_points - model.battlemap - ) - ) - ++ "/" - ++ (toString (Character.get_movement_points char)) - ++ " movement points remaining." - ) - ) - -get_char_info_html : Model.Type -> Character.Ref -> (Html.Html Event.Type) -get_char_info_html model char_ref = - case (Dict.get char_ref model.characters) of - Nothing -> (Html.text "Error: Unknown character selected.") - (Just char) -> - (Html.text - ( - "Focusing " - ++ char.name - ++ " (Team " - ++ (toString (Character.get_team char)) - ++ "): " - ++ (toString (Character.get_movement_points char)) - ++ " movement points; " - ++ (toString (Character.get_attack_range char)) - ++ " attack range. Health: " - ++ (toString (Character.get_current_health char)) - ++ "/" - ++ (toString (Character.get_max_health char)) - ) - ) - -get_char_attack_info_html : Model.Type -> Character.Ref -> (Html.Html Event.Type) -get_char_attack_info_html model char_ref = - case (Dict.get char_ref model.characters) of - Nothing -> (Html.text "Error: Unknown character selected.") - (Just char) -> - (Html.text - ( - "Attacking " - ++ char.name - ++ " (Team " - ++ (toString (Character.get_team char)) - ++ "): " - ++ (toString (Character.get_movement_points char)) - ++ " movement points; " - ++ (toString (Character.get_attack_range char)) - ++ " attack range. Health: " - ++ (toString (Character.get_current_health char)) - ++ "/" - ++ (toString (Character.get_max_health char)) - ) - ) - -get_error_html : Error.Type -> (Html.Html Event.Type) -get_error_html err = - (Html.div - [ - (Html.Attributes.class "battlemap-tabmenu-error-message") - ] - [ - (Html.text (Error.to_string err)) - ] - ) - -get_tile_info_html : ( - Model.Type -> - Battlemap.Location.Type -> - (Html.Html Event.Type) - ) -get_tile_info_html model loc = - case (Battlemap.try_getting_tile_at model.battlemap loc) of - (Just tile) -> - (Html.div - [ - (Html.Attributes.class - "battlemap-tabmenu-tile-info-tab" - ) - ] - [ - (Html.div - [ - (Html.Attributes.class "battlemap-tile-icon"), - (Html.Attributes.class "battlemap-tiled"), - (Html.Attributes.class - ( - "asset-tile-" - ++ - (Battlemap.Tile.get_icon_id tile) - ) - ) - ] - [ - ] - ), - (Html.div - [ - ] - [ - (Html.text - ( - "Focusing tile (" - ++ (toString loc.x) - ++ ", " - ++ (toString loc.y) - ++ "). {ID = " - ++ (Battlemap.Tile.get_icon_id tile) - ++ ", cost = " - ++ (toString (Battlemap.Tile.get_cost tile)) - ++ "}." - ) - ) - ] - ) - ] - ) - - Nothing -> (Html.text "Error: Unknown tile location selected.") - --------------------------------------------------------------------------------- --- 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-status") - ] - (case model.state of - Model.Default -> - [ - (case (UI.get_previous_action model.ui) of - (Just (UI.SelectedLocation loc)) -> - (get_tile_info_html - model - (Battlemap.Location.from_ref loc) - ) - - (Just (UI.SelectedCharacter target_char)) -> - (get_char_info_html model target_char) - - _ -> - (Html.text "Double-click on a character to control it.") - ) - ] - - (Model.InspectingTile tile_loc) -> - [(get_tile_info_html model (Battlemap.Location.from_ref tile_loc))] - - (Model.InspectingCharacter char_ref) -> - [(get_char_info_html model char_ref)] - - (Model.ControllingCharacter char_ref) -> - [ - (get_navigator_info_html model char_ref), - (case (UI.get_previous_action model.ui) of - (Just (UI.SelectedLocation loc)) -> - (get_tile_info_html - model - (Battlemap.Location.from_ref loc) - ) - - (Just (UI.SelectedCharacter target_char)) -> - (get_char_info_html model target_char) - - (Just (UI.AttackedCharacter target_char)) -> - (get_char_attack_info_html model target_char) - - _ -> (Util.Html.nothing) - ) - ] - ) - ) diff --git a/src/battlemap/src/View/Header.elm b/src/battlemap/src/View/Header.elm deleted file mode 100644 index d2bd2da..0000000 --- a/src/battlemap/src/View/Header.elm +++ /dev/null @@ -1,24 +0,0 @@ -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 "global-ingame-header") - ] - [ - (Html.text "Tacticians Online - Development Branch") - ] - ) diff --git a/src/battlemap/src/View/SideBar.elm b/src/battlemap/src/View/SideBar.elm new file mode 100644 index 0000000..050ee29 --- /dev/null +++ b/src/battlemap/src/View/SideBar.elm @@ -0,0 +1,38 @@ +module View.SideBar exposing (get_html) + +-- Elm ------------------------------------------------------------------------- +import Html +import Html.Attributes + +-- Battlemap ------------------------------------------------------------------- +import Event + +import Model + +import Util.Html + +import UI + +import View.SideBar.TabMenu +import View.SideBar.ManualControls + +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- +get_html : Model.Type -> (Html.Html Event.Type) +get_html model = + (Html.div + [ + (Html.Attributes.class "battlemap-side-bar") + ] + [ + (View.SideBar.TabMenu.get_html model), + ( + if (UI.has_manual_controls_enabled model.ui) + then + (View.SideBar.ManualControls.get_html) + else + (Util.Html.nothing) + ) + ] + ) diff --git a/src/battlemap/src/View/SideBar/ManualControls.elm b/src/battlemap/src/View/SideBar/ManualControls.elm new file mode 100644 index 0000000..15edd2a --- /dev/null +++ b/src/battlemap/src/View/SideBar/ManualControls.elm @@ -0,0 +1,50 @@ +module View.SideBar.ManualControls exposing (get_html) + +-- Elm ------------------------------------------------------------------------- +import Html +import Html.Attributes +import Html.Events + +-- Battlemap ------------------------------------------------------------------- +import Battlemap.Direction + +import Event + +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- +direction_button : Battlemap.Direction.Type -> String -> (Html.Html Event.Type) +direction_button dir label = + (Html.button + [ + (Html.Events.onClick + (Event.DirectionRequested dir) + ) + ] + [ (Html.text label) ] + ) + +end_turn_button : (Html.Html Event.Type) +end_turn_button = + (Html.button + [ (Html.Events.onClick Event.TurnEnded) ] + [ (Html.text "End Turn") ] + ) + +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- +get_html : (Html.Html Event.Type) +get_html = + (Html.div + [ + (Html.Attributes.class "battlemap-manual-controls") + ] + [ + (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/SideBar/TabMenu.elm b/src/battlemap/src/View/SideBar/TabMenu.elm new file mode 100644 index 0000000..864618b --- /dev/null +++ b/src/battlemap/src/View/SideBar/TabMenu.elm @@ -0,0 +1,115 @@ +module View.SideBar.TabMenu exposing (get_html) + +-- Elm ------------------------------------------------------------------------- +import Html +import Html.Attributes +import Html.Events + +-- Battlemap ------------------------------------------------------------------- +import Event + +import Error + +import Model + +import UI +import Util.Html + +import View.SideBar.TabMenu.Characters +import View.SideBar.TabMenu.Status +import View.SideBar.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-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-tabmenu-selector") + ] + (List.map (get_basic_button_html) (UI.get_all_tabs)) + ) + +get_error_message_html : Model.Type -> (Html.Html Event.Type) +get_error_message_html model = + case model.error of + (Just error) -> + (Html.div + [ + (Html.Attributes.class "battlemap-tabmenu-error-message") + ] + [ + (Html.text (Error.to_string error)) + ] + ) + + Nothing -> Util.Html.nothing +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- +get_html : Model.Type -> (Html.Html Event.Type) +get_html model = + (Html.div + [ + (Html.Attributes.class "battlemap-tabmenu") + ] + ( + (get_error_message_html model) + :: + ( + 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.SideBar.TabMenu.Status.get_html model) + ] + + (Just UI.CharactersTab) -> + [ + (get_active_tab_selector_html UI.CharactersTab), + (View.SideBar.TabMenu.Characters.get_html model) + ] + + (Just UI.SettingsTab) -> + [ + (get_active_tab_selector_html UI.SettingsTab), + (View.SideBar.TabMenu.Settings.get_html model) + ] + + Nothing -> [(get_inactive_tab_selector_html)] + ) + ) + ) diff --git a/src/battlemap/src/View/SideBar/TabMenu/Characters.elm b/src/battlemap/src/View/SideBar/TabMenu/Characters.elm new file mode 100644 index 0000000..7768ff2 --- /dev/null +++ b/src/battlemap/src/View/SideBar/TabMenu/Characters.elm @@ -0,0 +1,46 @@ +module View.SideBar.TabMenu.Characters exposing (get_html) + +-- Elm ------------------------------------------------------------------------- +import Dict + +import Html +import Html.Attributes +--import Html.Events + +-- Battlemap ------------------------------------------------------------------- +import Character + +import Event + +import Model + +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- +get_character_portrait_html : Character.Type -> (Html.Html Event.Type) +get_character_portrait_html char = + (Html.div + [ + (Html.Attributes.class "battlemap-character-portrait"), + (Html.Attributes.class + ("asset-char-portrait-" ++ (Character.get_portrait_id char)) + ) + ] + [ + ] + ) +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- +get_html : Model.Type -> (Html.Html Event.Type) +get_html model = + (Html.div + [ + (Html.Attributes.class "battlemap-tabmenu-content"), + (Html.Attributes.class "battlemap-tabmenu-characters-tab") + ] + (List.map + (get_character_portrait_html) + (Dict.values model.characters) + ) + ) diff --git a/src/battlemap/src/View/SideBar/TabMenu/Settings.elm b/src/battlemap/src/View/SideBar/TabMenu/Settings.elm new file mode 100644 index 0000000..d73956a --- /dev/null +++ b/src/battlemap/src/View/SideBar/TabMenu/Settings.elm @@ -0,0 +1,54 @@ +module View.SideBar.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-tabmenu-content"), + (Html.Attributes.class "battlemap-tabmenu-settings-tab") + ] + [ + (scale_button (0.75) "Zoom -"), + (scale_button 0 "Zoom Reset"), + (scale_button (1.15) "Zoom +"), + (Html.button + [ + (Html.Events.onClick Event.DebugTeamSwitchRequest) + ] + [ (Html.text "[DEBUG] Switch team") ] + ), + (Html.button + [ + (Html.Events.onClick Event.DebugLoadBattlemapRequest) + ] + [ (Html.text "[DEBUG] Load battlemap") ] + ) + ] + ) diff --git a/src/battlemap/src/View/SideBar/TabMenu/Status.elm b/src/battlemap/src/View/SideBar/TabMenu/Status.elm new file mode 100644 index 0000000..a0a66f9 --- /dev/null +++ b/src/battlemap/src/View/SideBar/TabMenu/Status.elm @@ -0,0 +1,171 @@ +module View.SideBar.TabMenu.Status exposing (get_html) + +-- Elm ------------------------------------------------------------------------- +import Dict + +import Html +import Html.Attributes + +-- Battlemap ------------------------------------------------------------------- +import Battlemap +import Battlemap.Location +import Battlemap.Tile + +import Character + +import UI + +import Util.Html + +import Error +import Event +import Model + +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- + +get_char_info_html : Model.Type -> Character.Ref -> (Html.Html Event.Type) +get_char_info_html model char_ref = + case (Dict.get char_ref model.characters) of + Nothing -> (Html.text "Error: Unknown character selected.") + (Just char) -> + (Html.text + ( + "Focusing " + ++ char.name + ++ " (Team " + ++ (toString (Character.get_team char)) + ++ "): " + ++ (toString (Character.get_movement_points char)) + ++ " movement points; " + ++ (toString (Character.get_attack_range char)) + ++ " attack range. Health: " + ++ (toString (Character.get_current_health char)) + ++ "/" + ++ (toString (Character.get_max_health char)) + ) + ) + +get_char_attack_info_html : Model.Type -> Character.Ref -> (Html.Html Event.Type) +get_char_attack_info_html model char_ref = + case (Dict.get char_ref model.characters) of + Nothing -> (Html.text "Error: Unknown character selected.") + (Just char) -> + (Html.text + ( + "Attacking " + ++ char.name + ++ " (Team " + ++ (toString (Character.get_team char)) + ++ "): " + ++ (toString (Character.get_movement_points char)) + ++ " movement points; " + ++ (toString (Character.get_attack_range char)) + ++ " attack range. Health: " + ++ (toString (Character.get_current_health char)) + ++ "/" + ++ (toString (Character.get_max_health char)) + ) + ) + +get_error_html : Error.Type -> (Html.Html Event.Type) +get_error_html err = + (Html.div + [ + (Html.Attributes.class "battlemap-tabmenu-error-message") + ] + [ + (Html.text (Error.to_string err)) + ] + ) + +get_tile_info_html : ( + Model.Type -> + Battlemap.Location.Type -> + (Html.Html Event.Type) + ) +get_tile_info_html model loc = + case (Battlemap.try_getting_tile_at model.battlemap loc) of + (Just tile) -> + (Html.div + [ + (Html.Attributes.class + "battlemap-tabmenu-tile-info-tab" + ) + ] + [ + (Html.div + [ + (Html.Attributes.class "battlemap-tile-icon"), + (Html.Attributes.class "battlemap-tiled"), + (Html.Attributes.class + ( + "asset-tile-" + ++ + (Battlemap.Tile.get_icon_id tile) + ) + ) + ] + [ + ] + ), + (Html.div + [ + ] + [ + (Html.text + ( + "Focusing tile (" + ++ (toString loc.x) + ++ ", " + ++ (toString loc.y) + ++ "). {ID = " + ++ (Battlemap.Tile.get_icon_id tile) + ++ ", cost = " + ++ (toString (Battlemap.Tile.get_cost tile)) + ++ "}." + ) + ) + ] + ) + ] + ) + + Nothing -> (Html.text "Error: Unknown tile location selected.") + +-------------------------------------------------------------------------------- +-- 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-status") + ] + (case model.state of + (Model.InspectingTile tile_loc) -> + [(get_tile_info_html model (Battlemap.Location.from_ref tile_loc))] + + (Model.InspectingCharacter char_ref) -> + [(get_char_info_html model char_ref)] + + _ -> + [ + (case (UI.get_previous_action model.ui) of + (Just (UI.SelectedLocation loc)) -> + (get_tile_info_html + model + (Battlemap.Location.from_ref loc) + ) + + (Just (UI.SelectedCharacter target_char)) -> + (get_char_info_html model target_char) + + _ -> + (Html.text "Double-click on a character to control it.") + ) + ] + ) + ) diff --git a/src/battlemap/www/style.css b/src/battlemap/www/style.css index b8f60ff..4044e38 100644 --- a/src/battlemap/www/style.css +++ b/src/battlemap/www/style.css @@ -1,15 +1,45 @@ +.battlemap-left-panel +{ + flex-grow: 1; + min-width: 70%; + display: flex; + flex-direction: column; +} + +.battlemap-right-panel +{ + height: inherit; + max-width: 30%; + + display: flex; +} + .battlemap-container { + flex-grow: 1; + min-height: 70%; + overflow: auto; width: inherit; - flex: 1; +} + +.battlemap-side-bar +{ + flex-grow: 1; + overflow-y: auto; + width: inherit; + height: inherit; + word-wrap: break-word; } .battlemap-footer { - display: flex; - flex: 0; max-height: 30%; + + overflow-y: auto; + width: inherit; + word-wrap: break-word; + padding-bottom: 1em; } .battlemap-actual @@ -121,6 +151,7 @@ .battlemap-tabmenu { flex: 1; + height: inherit; } .battlemap-manual-controls diff --git a/src/global/www/style.css b/src/global/www/style.css index 406c60e..f0cfb6a 100644 --- a/src/global/www/style.css +++ b/src/global/www/style.css @@ -10,18 +10,7 @@ html, body, .fullscreen-module bottom: 0; right: 0; left: 0; -} - -.fullscreen-module -{ + margin: 0; + padding: 0; display: flex; - flex-flow: column; - align-content: stretch; - justify-content: stretch; -} - -.global-ingame-header -{ - text-align: center; - flex: 0; } -- cgit v1.2.3-70-g09d2