summaryrefslogtreecommitdiff |
diff options
-rw-r--r-- | src/battlemap/src/Struct/UI.elm | 24 | ||||
-rw-r--r-- | src/battlemap/src/Update/SelectCharacter.elm | 140 | ||||
-rw-r--r-- | src/battlemap/src/View/Battlemap.elm | 16 |
3 files changed, 128 insertions, 52 deletions
diff --git a/src/battlemap/src/Struct/UI.elm b/src/battlemap/src/Struct/UI.elm index 6c6765c..eb6b98a 100644 --- a/src/battlemap/src/Struct/UI.elm +++ b/src/battlemap/src/Struct/UI.elm @@ -14,6 +14,10 @@ module Struct.UI exposing reset_displayed_tab, to_string, get_all_tabs, + -- Navigator + try_getting_displayed_nav, + set_displayed_nav, + reset_displayed_nav, -- Manual Controls has_manual_controls_enabled, -- Previous Action @@ -23,9 +27,9 @@ module Struct.UI exposing ) -- Battlemap ------------------------------------------------------------------- -import Struct.Location - import Struct.Character +import Struct.Location +import Struct.Navigator -------------------------------------------------------------------------------- -- TYPES ----------------------------------------------------------------------- @@ -47,7 +51,8 @@ type alias Type = zoom_level : Float, show_manual_controls : Bool, displayed_tab : (Maybe Tab), - previous_action : (Maybe Action) + previous_action : (Maybe Action), + displayed_nav : (Maybe Struct.Navigator.Type) } -------------------------------------------------------------------------------- @@ -63,7 +68,8 @@ default = zoom_level = 1.0, show_manual_controls = True, displayed_tab = Nothing, - previous_action = Nothing + previous_action = Nothing, + displayed_nav = Nothing } -- Zoom ------------------------------------------------------------------------ @@ -98,6 +104,16 @@ get_all_tabs : (List Tab) get_all_tabs = [StatusTab, CharactersTab, SettingsTab, TimelineTab] +-- Navigator ------------------------------------------------------------------- +try_getting_displayed_nav : Type -> (Maybe Struct.Navigator.Type) +try_getting_displayed_nav ui = ui.displayed_nav + +set_displayed_nav : Struct.Navigator.Type -> Type -> Type +set_displayed_nav nav ui = {ui | displayed_nav = (Just nav)} + +reset_displayed_nav : Type -> Type +reset_displayed_nav ui = {ui | displayed_nav = Nothing} + -- ManualControls -------------------------------------------------------------- has_manual_controls_enabled : Type -> Bool has_manual_controls_enabled ui = ui.show_manual_controls diff --git a/src/battlemap/src/Update/SelectCharacter.elm b/src/battlemap/src/Update/SelectCharacter.elm index 42b2b27..1263e67 100644 --- a/src/battlemap/src/Update/SelectCharacter.elm +++ b/src/battlemap/src/Update/SelectCharacter.elm @@ -24,6 +24,32 @@ import Struct.WeaponSet -------------------------------------------------------------------------------- -- LOCAL ----------------------------------------------------------------------- -------------------------------------------------------------------------------- +get_character_navigator : ( + Struct.Model.Type -> + Struct.Character.Type -> + Struct.Navigator.Type + ) +get_character_navigator model char = + let + weapon = + (Struct.WeaponSet.get_active_weapon + (Struct.Character.get_weapons char) + ) + in + (Struct.Navigator.new + (Struct.Character.get_location char) + (Struct.Statistics.get_movement_points + (Struct.Character.get_statistics char) + ) + (Struct.Weapon.get_attack_range weapon) + (Struct.Weapon.get_defense_range weapon) + (Struct.Battlemap.get_movement_cost_function + model.battlemap + (Struct.Character.get_location char) + (Dict.values model.characters) + ) + ) + attack_character : ( Struct.Model.Type -> Struct.Character.Ref -> @@ -38,8 +64,10 @@ attack_character model target_char_id target_char = model.char_turn ), ui = - (Struct.UI.reset_displayed_tab - (Struct.UI.set_previous_action Nothing model.ui) + (Struct.UI.reset_displayed_nav + (Struct.UI.reset_displayed_tab + (Struct.UI.set_previous_action Nothing model.ui) + ) ) } @@ -53,35 +81,27 @@ ctrl_or_focus_character model target_char_id target_char = if (Struct.Character.is_enabled target_char) then let - weapon = - (Struct.WeaponSet.get_active_weapon - (Struct.Character.get_weapons target_char) + nav = + (case (Struct.UI.try_getting_displayed_nav model.ui) of + (Just dnav) -> dnav + Nothing -> + (get_character_navigator model target_char) ) in {model | char_turn = (Struct.CharacterTurn.set_navigator - (Struct.Navigator.new - (Struct.Character.get_location target_char) - (Struct.Statistics.get_movement_points - (Struct.Character.get_statistics target_char) - ) - (Struct.Weapon.get_attack_range weapon) - (Struct.Weapon.get_defense_range weapon) - (Struct.Battlemap.get_movement_cost_function - model.battlemap - (Struct.Character.get_location target_char) - (Dict.values model.characters) - ) - ) + nav (Struct.CharacterTurn.set_active_character target_char model.char_turn ) ), ui = - (Struct.UI.reset_displayed_tab - (Struct.UI.set_previous_action Nothing model.ui) + (Struct.UI.reset_displayed_nav + (Struct.UI.reset_displayed_tab + (Struct.UI.set_previous_action Nothing model.ui) + ) ) } else @@ -89,7 +109,10 @@ ctrl_or_focus_character model target_char_id target_char = ui = (Struct.UI.set_previous_action (Just (Struct.UI.SelectedCharacter target_char_id)) - model.ui + (Struct.UI.set_displayed_nav + (get_character_navigator model target_char) + model.ui + ) ) } @@ -126,12 +149,12 @@ can_target_character model target = ) ) -double_clicked_character : ( +second_click_on : ( Struct.Model.Type -> Struct.Character.Ref -> (Struct.Model.Type, (Cmd Struct.Event.Type)) ) -double_clicked_character model target_char_id = +second_click_on model target_char_id = case (Dict.get target_char_id model.characters) of (Just target_char) -> case @@ -208,6 +231,52 @@ double_clicked_character model target_char_id = Cmd.none ) +first_click_on : ( + Struct.Model.Type -> + Struct.Character.Ref -> + (Struct.Model.Type, (Cmd Struct.Event.Type)) + ) +first_click_on model target_char_id = + if + ( + (Struct.CharacterTurn.try_getting_target model.char_turn) + == + (Just target_char_id) + ) + then + (model, Cmd.none) + else + case (Dict.get target_char_id model.characters) of + (Just target_char) -> + ( + {model | + ui = + (Struct.UI.set_previous_action + (Just (Struct.UI.SelectedCharacter target_char_id)) + (Struct.UI.set_displayed_tab + Struct.UI.StatusTab + (Struct.UI.set_displayed_nav + (get_character_navigator model target_char) + model.ui + ) + ) + ) + }, + Cmd.none + ) + + Nothing -> + ( + (Struct.Model.invalidate + (Struct.Error.new + Struct.Error.Programming + "SelectCharacter: Unknown char selected." + ) + model + ), + Cmd.none + ) + -------------------------------------------------------------------------------- -- EXPORTED -------------------------------------------------------------------- -------------------------------------------------------------------------------- @@ -224,27 +293,6 @@ apply_to model target_char_id = (Just (Struct.UI.SelectedCharacter target_char_id)) ) then - (double_clicked_character model target_char_id) + (second_click_on model target_char_id) else - if - ( - (Struct.CharacterTurn.try_getting_target model.char_turn) - == - (Just target_char_id) - ) - then - (model, Cmd.none) - else - ( - {model | - ui = - (Struct.UI.set_previous_action - (Just (Struct.UI.SelectedCharacter target_char_id)) - (Struct.UI.set_displayed_tab - Struct.UI.StatusTab - model.ui - ) - ) - }, - Cmd.none - ) + (first_click_on model target_char_id) diff --git a/src/battlemap/src/View/Battlemap.elm b/src/battlemap/src/View/Battlemap.elm index db62722..829ed45 100644 --- a/src/battlemap/src/View/Battlemap.elm +++ b/src/battlemap/src/View/Battlemap.elm @@ -108,11 +108,23 @@ get_html model = (Dict.values model.characters) ) ++ - case (Struct.CharacterTurn.try_getting_navigator model.char_turn) of + ( + case (Struct.CharacterTurn.try_getting_navigator model.char_turn) of + (Just navigator) -> + (View.Battlemap.Navigator.get_html + (Struct.Navigator.get_summary navigator) + True + ) + + Nothing -> + [(Util.Html.nothing)] + ) + ++ + case (Struct.UI.try_getting_displayed_nav model.ui) of (Just navigator) -> (View.Battlemap.Navigator.get_html (Struct.Navigator.get_summary navigator) - True + False ) Nothing -> |