summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/battlemap/src/Struct/UI.elm24
-rw-r--r--src/battlemap/src/Update/SelectCharacter.elm140
-rw-r--r--src/battlemap/src/View/Battlemap.elm16
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 ->