summaryrefslogtreecommitdiff |
diff options
Diffstat (limited to 'src/battlemap')
-rw-r--r-- | src/battlemap/src/Struct/CharacterTurn.elm | 21 | ||||
-rw-r--r-- | src/battlemap/src/Update/SelectCharacter.elm | 128 |
2 files changed, 104 insertions, 45 deletions
diff --git a/src/battlemap/src/Struct/CharacterTurn.elm b/src/battlemap/src/Struct/CharacterTurn.elm index c4dcecd..48703fe 100644 --- a/src/battlemap/src/Struct/CharacterTurn.elm +++ b/src/battlemap/src/Struct/CharacterTurn.elm @@ -2,17 +2,18 @@ module Struct.CharacterTurn exposing ( Type, State(..), - new, - try_getting_controlled_character, - set_controlled_character, - get_state, + add_target, + can_select_targets, get_path, + get_state, + get_targets, lock_path, - try_getting_navigator, - set_navigator, - add_target, + new, remove_target, - get_targets + set_controlled_character, + set_navigator, + try_getting_controlled_character, + try_getting_navigator ) -- Elm ------------------------------------------------------------------------- @@ -64,6 +65,10 @@ try_getting_controlled_character : Type -> (Maybe Struct.Character.Ref) try_getting_controlled_character ct = ct.controlled_character +can_select_targets : Type -> Bool +can_select_targets ct = + ((ct.state == MovedCharacter) || ((ct.state == ChoseTarget))) + set_controlled_character : ( Type -> Struct.Character.Type -> diff --git a/src/battlemap/src/Update/SelectCharacter.elm b/src/battlemap/src/Update/SelectCharacter.elm index e8dd734..fe5521c 100644 --- a/src/battlemap/src/Update/SelectCharacter.elm +++ b/src/battlemap/src/Update/SelectCharacter.elm @@ -10,9 +10,10 @@ import Struct.CharacterTurn import Struct.Direction import Struct.Error import Struct.Event -import Struct.UI +import Struct.Location import Struct.Model import Struct.Navigator +import Struct.UI import Update.RequestDirection @@ -34,13 +35,13 @@ attack_character model main_char_id target_char_id target_char = (Struct.UI.set_previous_action model.ui Nothing) } -select_character : ( +ctrl_or_focus_character : ( Struct.Model.Type -> Struct.Character.Ref -> Struct.Character.Type -> Struct.Model.Type ) -select_character model target_char_id target_char = +ctrl_or_focus_character model target_char_id target_char = if (Struct.Character.is_enabled target_char) then {model | @@ -72,30 +73,54 @@ select_character model target_char_id target_char = ) } --------------------------------------------------------------------------------- --- EXPORTED -------------------------------------------------------------------- --------------------------------------------------------------------------------- -apply_to : ( +can_target_character : ( Struct.Model.Type -> - Struct.Character.Ref -> - (Struct.Model.Type, (Cmd Struct.Event.Type)) + Struct.Character.Type -> + Bool ) -apply_to model target_char_id = - if +can_target_character model target = ( - (Struct.UI.get_previous_action model.ui) - == - (Just (Struct.UI.SelectedCharacter target_char_id)) + (Struct.CharacterTurn.can_select_targets model.char_turn) + && + ( + case + (Struct.CharacterTurn.try_getting_navigator + model.char_turn + ) + of + (Just nav) -> + case + (Struct.Navigator.try_getting_path_to + nav + (Struct.Location.get_ref + (Struct.Character.get_location target) + ) + ) + of + (Just _) -> True + _ -> False + + _ -> + False + ) ) - then - case (Dict.get target_char_id model.characters) of - (Just target_char) -> - case - (Struct.CharacterTurn.try_getting_controlled_character - model.char_turn - ) - of - (Just main_char_id) -> + +double_clicked_character : ( + Struct.Model.Type -> + Struct.Character.Ref -> + (Struct.Model.Type, (Cmd Struct.Event.Type)) + ) +double_clicked_character model target_char_id = + case (Dict.get target_char_id model.characters) of + (Just target_char) -> + case + (Struct.CharacterTurn.try_getting_controlled_character + model.char_turn + ) + of + (Just main_char_id) -> + if (can_target_character model target_char) + then ( (attack_character model @@ -105,24 +130,53 @@ apply_to model target_char_id = ), Cmd.none ) - - _ -> + else ( - (select_character model target_char_id target_char), + (Struct.Model.invalidate + model + (Struct.Error.new + Struct.Error.IllegalAction + "Has not yet moved or target is out of range." + ) + ), Cmd.none ) - Nothing -> - ( - (Struct.Model.invalidate - model - (Struct.Error.new - Struct.Error.Programming - "SelectCharacter: Unknown char selected." - ) - ), - Cmd.none - ) + _ -> + ( + (ctrl_or_focus_character model target_char_id target_char), + Cmd.none + ) + + Nothing -> + ( + (Struct.Model.invalidate + model + (Struct.Error.new + Struct.Error.Programming + "SelectCharacter: Unknown char selected." + ) + ), + Cmd.none + ) + +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- +apply_to : ( + Struct.Model.Type -> + Struct.Character.Ref -> + (Struct.Model.Type, (Cmd Struct.Event.Type)) + ) +apply_to model target_char_id = + if + ( + (Struct.UI.get_previous_action model.ui) + == + (Just (Struct.UI.SelectedCharacter target_char_id)) + ) + then + (double_clicked_character model target_char_id) else ( {model | |