From 75aa816dedb09e0e1bc395f6e9ae94e1b9e993a1 Mon Sep 17 00:00:00 2001 From: Nathanael Sensfelder Date: Thu, 28 May 2020 00:11:00 +0200 Subject: Missing files + New Control UI. --- src/asset/www/svg/damage_type/abort.svg | 75 ++++++ src/asset/www/svg/damage_type/attack.svg | 75 ++++++ src/asset/www/svg/damage_type/endturn.svg | 75 ++++++ src/asset/www/svg/damage_type/move.svg | 106 ++++++++ src/asset/www/svg/damage_type/skill.svg | 154 ++++++++++++ src/asset/www/svg/damage_type/skip.svg | 162 ++++++++++++ src/asset/www/svg/damage_type/snow.svg | 204 +++++++++++++++ src/asset/www/svg/damage_type/swapwp.svg | 123 ++++++++++ src/asset/www/svg/damage_type/warning.svg | 111 +++++++++ src/battle/src/ElmModule/Update.elm | 12 + src/battle/src/Struct/CharacterTurn.elm | 8 + src/battle/src/Struct/Event.elm | 3 + src/battle/src/Struct/Navigator.elm | 2 +- src/battle/src/Update/CharacterTurn/Move.elm | 34 +++ src/battle/src/Update/CharacterTurn/ResetPath.elm | 73 ++++++ src/battle/src/Update/CharacterTurn/Skill.elm | 37 +++ src/battle/src/Update/CharacterTurn/Skip.elm | 42 ++++ src/battle/src/Update/CharacterTurn/UndoAction.elm | 54 ++-- src/battle/src/Util/Navigator.elm | 87 +++++++ src/battle/src/View/Controlled.elm | 273 +++++++++++++++------ src/battle/src/View/Controlled/ManualControls.elm | 15 +- src/css/src/battle/controlled-panel.scss | 17 +- src/css/src/battle/controlled-panel/buttons.scss | 115 +++++++++ .../battle/controlled-panel/manual-control.scss | 11 +- src/shared/elm/Shared/Util/Set.elm | 11 + 25 files changed, 1755 insertions(+), 124 deletions(-) create mode 100644 src/asset/www/svg/damage_type/abort.svg create mode 100644 src/asset/www/svg/damage_type/attack.svg create mode 100644 src/asset/www/svg/damage_type/endturn.svg create mode 100644 src/asset/www/svg/damage_type/move.svg create mode 100644 src/asset/www/svg/damage_type/skill.svg create mode 100644 src/asset/www/svg/damage_type/skip.svg create mode 100644 src/asset/www/svg/damage_type/snow.svg create mode 100644 src/asset/www/svg/damage_type/swapwp.svg create mode 100644 src/asset/www/svg/damage_type/warning.svg create mode 100644 src/battle/src/Update/CharacterTurn/Move.elm create mode 100644 src/battle/src/Update/CharacterTurn/ResetPath.elm create mode 100644 src/battle/src/Update/CharacterTurn/Skill.elm create mode 100644 src/battle/src/Update/CharacterTurn/Skip.elm create mode 100644 src/battle/src/Util/Navigator.elm create mode 100644 src/css/src/battle/controlled-panel/buttons.scss create mode 100644 src/shared/elm/Shared/Util/Set.elm diff --git a/src/asset/www/svg/damage_type/abort.svg b/src/asset/www/svg/damage_type/abort.svg new file mode 100644 index 0000000..a60628d --- /dev/null +++ b/src/asset/www/svg/damage_type/abort.svg @@ -0,0 +1,75 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/src/asset/www/svg/damage_type/attack.svg b/src/asset/www/svg/damage_type/attack.svg new file mode 100644 index 0000000..003407c --- /dev/null +++ b/src/asset/www/svg/damage_type/attack.svg @@ -0,0 +1,75 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/src/asset/www/svg/damage_type/endturn.svg b/src/asset/www/svg/damage_type/endturn.svg new file mode 100644 index 0000000..738f271 --- /dev/null +++ b/src/asset/www/svg/damage_type/endturn.svg @@ -0,0 +1,75 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/src/asset/www/svg/damage_type/move.svg b/src/asset/www/svg/damage_type/move.svg new file mode 100644 index 0000000..2db3eb4 --- /dev/null +++ b/src/asset/www/svg/damage_type/move.svg @@ -0,0 +1,106 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + diff --git a/src/asset/www/svg/damage_type/skill.svg b/src/asset/www/svg/damage_type/skill.svg new file mode 100644 index 0000000..15aa91d --- /dev/null +++ b/src/asset/www/svg/damage_type/skill.svg @@ -0,0 +1,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/src/asset/www/svg/damage_type/skip.svg b/src/asset/www/svg/damage_type/skip.svg new file mode 100644 index 0000000..489ff31 --- /dev/null +++ b/src/asset/www/svg/damage_type/skip.svg @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/src/asset/www/svg/damage_type/snow.svg b/src/asset/www/svg/damage_type/snow.svg new file mode 100644 index 0000000..00cb5fd --- /dev/null +++ b/src/asset/www/svg/damage_type/snow.svg @@ -0,0 +1,204 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/asset/www/svg/damage_type/swapwp.svg b/src/asset/www/svg/damage_type/swapwp.svg new file mode 100644 index 0000000..8dad702 --- /dev/null +++ b/src/asset/www/svg/damage_type/swapwp.svg @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + diff --git a/src/asset/www/svg/damage_type/warning.svg b/src/asset/www/svg/damage_type/warning.svg new file mode 100644 index 0000000..21d9a0b --- /dev/null +++ b/src/asset/www/svg/damage_type/warning.svg @@ -0,0 +1,111 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + diff --git a/src/battle/src/ElmModule/Update.elm b/src/battle/src/ElmModule/Update.elm index cc9b9b8..5e9d4ca 100644 --- a/src/battle/src/ElmModule/Update.elm +++ b/src/battle/src/ElmModule/Update.elm @@ -22,7 +22,10 @@ import Update.Character.DisplayNavigator import Update.CharacterTurn.AbortTurn import Update.CharacterTurn.Attack import Update.CharacterTurn.EndTurn +import Update.CharacterTurn.Move import Update.CharacterTurn.RequestDirection +import Update.CharacterTurn.Skill +import Update.CharacterTurn.Skip import Update.CharacterTurn.SwitchWeapon import Update.CharacterTurn.UndoAction @@ -55,6 +58,15 @@ update event model = Struct.Event.AttackRequest -> (Update.CharacterTurn.Attack.apply_to model) + Struct.Event.SkillRequest -> + (Update.CharacterTurn.Skill.apply_to model) + + Struct.Event.SkipRequest -> + (Update.CharacterTurn.Skip.apply_to model) + + Struct.Event.MoveRequest -> + (Update.CharacterTurn.Move.apply_to model) + Struct.Event.AnimationEnded -> (Update.Puppeteer.apply_to model) diff --git a/src/battle/src/Struct/CharacterTurn.elm b/src/battle/src/Struct/CharacterTurn.elm index 514803d..1a64cce 100644 --- a/src/battle/src/Struct/CharacterTurn.elm +++ b/src/battle/src/Struct/CharacterTurn.elm @@ -43,6 +43,7 @@ module Struct.CharacterTurn exposing clear_path, -- Other + is_aiming_at_something, encode, new ) @@ -71,6 +72,7 @@ import Struct.Navigator -------------------------------------------------------------------------------- type Action = None + | Skipping | Attacking | SwitchingWeapons | UsingSkill @@ -113,6 +115,7 @@ encode_action : Type -> (Json.Encode.Value) encode_action ct = case ct.action of None -> (Json.Encode.null) + Skipping -> (Json.Encode.null) Attacking -> case (List.head (Set.toList ct.targets)) of @@ -267,6 +270,11 @@ override_path path ct = {ct | path = path} clear_path : Type -> Type clear_path ct = {ct | path = []} +---- Other --------------------------------------------------------------------- +is_aiming_at_something : Type -> Bool +is_aiming_at_something ct = + (not ((Set.isEmpty ct.targets) && (Set.isEmpty ct.locations))) + ---- Encode/Decode ------------------------------------------------------------- encode : Type -> (Json.Encode.Value) encode ct = diff --git a/src/battle/src/Struct/Event.elm b/src/battle/src/Struct/Event.elm index 950b00d..7b91ae9 100644 --- a/src/battle/src/Struct/Event.elm +++ b/src/battle/src/Struct/Event.elm @@ -20,6 +20,9 @@ type Type = AbortTurnRequest | AnimationEnded | AttackRequest + | SkillRequest + | SkipRequest + | MoveRequest | CharacterOrTileSelected BattleMap.Struct.Location.Ref | CharacterSelected Int | CharacterCardSelected Int diff --git a/src/battle/src/Struct/Navigator.elm b/src/battle/src/Struct/Navigator.elm index 537351a..be2f460 100644 --- a/src/battle/src/Struct/Navigator.elm +++ b/src/battle/src/Struct/Navigator.elm @@ -173,7 +173,7 @@ unlock_path navigator = navigator.attack_dist (navigator.cost_and_danger_fun) ), - locked_path = True + locked_path = False } lock_path_with_new_attack_ranges : Int -> Int -> Type -> Type diff --git a/src/battle/src/Update/CharacterTurn/Move.elm b/src/battle/src/Update/CharacterTurn/Move.elm new file mode 100644 index 0000000..a8b6a27 --- /dev/null +++ b/src/battle/src/Update/CharacterTurn/Move.elm @@ -0,0 +1,34 @@ +module Update.CharacterTurn.Move exposing (apply_to) + +-- Battle Characters ----------------------------------------------------------- + +-- Local module ---------------------------------------------------------------- +import Struct.CharacterTurn +import Struct.Error +import Struct.Event +import Struct.Model +import Struct.Navigator + +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- +apply_to : Struct.Model.Type -> (Struct.Model.Type, (Cmd Struct.Event.Type)) +apply_to model = + case (Struct.CharacterTurn.maybe_get_navigator model.char_turn) of + (Just nav) -> + ( + {model | + char_turn = + (Struct.CharacterTurn.set_navigator + (Struct.Navigator.lock_path nav) + (Struct.CharacterTurn.store_path model.char_turn) + ) + }, + Cmd.none + ) + + _ -> (model, Cmd.none) diff --git a/src/battle/src/Update/CharacterTurn/ResetPath.elm b/src/battle/src/Update/CharacterTurn/ResetPath.elm new file mode 100644 index 0000000..f6fb97c --- /dev/null +++ b/src/battle/src/Update/CharacterTurn/ResetPath.elm @@ -0,0 +1,73 @@ +module Update.CharacterTurn.ResetPath exposing (apply_to) + +-- Battle Map ------------------------------------------------------------------ +import BattleMap.Struct.Direction +import BattleMap.Struct.Location +import BattleMap.Struct.Map + +-- Battle Characters ----------------------------------------------------------- +import BattleCharacters.Struct.Character + +-- Local Module ---------------------------------------------------------------- +import Struct.Battle +import Struct.Character +import Struct.CharacterTurn +import Struct.Error +import Struct.Event +import Struct.Model +import Struct.Navigator + +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- +apply_to : Struct.Model.Type -> (Struct.Model.Type, (Cmd Struct.Event.Type)) +apply_to model = + case + ( + (Struct.CharacterTurn.maybe_get_active_character model.char_turn), + (Struct.CharacterTurn.maybe_get_navigator model.char_turn) + ) + of + ((Just char), (Just nav)) -> + let + new_location = (Struct.Navigator.get_starting_location nav) + in + ( + {model | + char_turn = + (Struct.CharacterTurn.set_navigator + (Struct.Navigator.clear_path + (Struct.Navigator.unlock_path nav) + ) + (Struct.CharacterTurn.set_active_character + (Struct.Character.set_location + new_location + (BattleMap.Struct.Map.get_omnimods_at + new_location + model.map_data_set + (Struct.Battle.get_map model.battle) + ) + char + ) + (Struct.CharacterTurn.clear_path model.char_turn) + ) + ) + }, + Cmd.none + ) + + _ -> + ( + (Struct.Model.invalidate + (Struct.Error.new + Struct.Error.IllegalAction + "This can only be done while controlling a character." + ) + model + ), + Cmd.none + ) diff --git a/src/battle/src/Update/CharacterTurn/Skill.elm b/src/battle/src/Update/CharacterTurn/Skill.elm new file mode 100644 index 0000000..ee3baf2 --- /dev/null +++ b/src/battle/src/Update/CharacterTurn/Skill.elm @@ -0,0 +1,37 @@ +module Update.CharacterTurn.Skill exposing (apply_to) + +-- Battle Characters ----------------------------------------------------------- + +-- Local module ---------------------------------------------------------------- +import Struct.CharacterTurn +import Struct.Error +import Struct.Event +import Struct.Model +import Struct.Navigator + +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- +apply_to : Struct.Model.Type -> (Struct.Model.Type, (Cmd Struct.Event.Type)) +apply_to model = + case (Struct.CharacterTurn.maybe_get_navigator model.char_turn) of + (Just nav) -> + ( + {model | + char_turn = + (Struct.CharacterTurn.set_action + Struct.CharacterTurn.UsingSkill + (Struct.CharacterTurn.set_navigator + (Struct.Navigator.lock_path nav) + (Struct.CharacterTurn.store_path model.char_turn) + ) + ) + }, + Cmd.none + ) + + _ -> (model, Cmd.none) diff --git a/src/battle/src/Update/CharacterTurn/Skip.elm b/src/battle/src/Update/CharacterTurn/Skip.elm new file mode 100644 index 0000000..b61db05 --- /dev/null +++ b/src/battle/src/Update/CharacterTurn/Skip.elm @@ -0,0 +1,42 @@ +module Update.CharacterTurn.Skip exposing (apply_to) + +-- Shared ---------------------------------------------------------------------- +import Shared.Update.Sequence + +-- Local module ---------------------------------------------------------------- +import Struct.CharacterTurn +import Struct.Error +import Struct.Event +import Struct.Model +import Struct.Navigator + +import Update.CharacterTurn.ResetPath + +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- +set_action : Struct.Model.Type -> (Struct.Model.Type, (Cmd Struct.Event.Type)) +set_action model = + ( + {model | + char_turn = + (Struct.CharacterTurn.set_action + Struct.CharacterTurn.Skipping + model.char_turn + ) + }, + Cmd.none + ) + +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- +apply_to : Struct.Model.Type -> (Struct.Model.Type, (Cmd Struct.Event.Type)) +apply_to model = + (Shared.Update.Sequence.sequence + [ + (Update.CharacterTurn.ResetPath.apply_to), + (set_action) + ] + model + ) diff --git a/src/battle/src/Update/CharacterTurn/UndoAction.elm b/src/battle/src/Update/CharacterTurn/UndoAction.elm index 6a9d7f8..0187752 100644 --- a/src/battle/src/Update/CharacterTurn/UndoAction.elm +++ b/src/battle/src/Update/CharacterTurn/UndoAction.elm @@ -21,8 +21,9 @@ import Struct.Event import Struct.Model import Struct.Navigator -import Util.Navigator +import Update.CharacterTurn.ResetPath +import Util.Navigator -------------------------------------------------------------------------------- -- LOCAL ----------------------------------------------------------------------- -------------------------------------------------------------------------------- @@ -57,27 +58,46 @@ handle_undo_attacking char_turn = ) ) +handle_undo_skipping : Struct.CharacterTurn.Type -> Struct.CharacterTurn.Type +handle_undo_skipping char_turn = + case (Struct.CharacterTurn.maybe_get_navigator char_turn) of + Nothing -> char_turn + (Just nav) -> + (Struct.CharacterTurn.clear_action + (Struct.CharacterTurn.set_navigator + (Struct.Navigator.unlock_path nav) + char_turn + ) + ) + -------------------------------------------------------------------------------- -- EXPORTED -------------------------------------------------------------------- -------------------------------------------------------------------------------- apply_to : Struct.Model.Type -> (Struct.Model.Type, (Cmd Struct.Event.Type)) apply_to model = - ( - {model | - char_turn = - ( - case (Struct.CharacterTurn.get_action model.char_turn) of - Struct.CharacterTurn.Attacking -> - (handle_undo_attacking model.char_turn) + let action = (Struct.CharacterTurn.get_action model.char_turn) in + if (action == Struct.CharacterTurn.None) + then (Update.CharacterTurn.ResetPath.apply_to model) + else + ( + {model | + char_turn = + ( + case action of + Struct.CharacterTurn.Attacking -> + (handle_undo_attacking model.char_turn) - Struct.CharacterTurn.UsingSkill -> - (handle_undo_attacking model.char_turn) + Struct.CharacterTurn.UsingSkill -> + (handle_undo_attacking model.char_turn) - Struct.CharacterTurn.SwitchingWeapons -> - (handle_undo_switching_weapons model.char_turn) + Struct.CharacterTurn.SwitchingWeapons -> + (handle_undo_switching_weapons model.char_turn) - _ -> model.char_turn - ) - }, - Cmd.none - ) + Struct.CharacterTurn.Skipping -> + (handle_undo_skipping model.char_turn) + + Struct.CharacterTurn.None -> model.char_turn + ) + }, + Cmd.none + ) diff --git a/src/battle/src/Util/Navigator.elm b/src/battle/src/Util/Navigator.elm new file mode 100644 index 0000000..c5a8136 --- /dev/null +++ b/src/battle/src/Util/Navigator.elm @@ -0,0 +1,87 @@ +module Util.Navigator exposing + ( + get_character_navigator, + get_character_attack_navigator + ) + +-- Elm ------------------------------------------------------------------------- +import Array +import List + +-- Battle ---------------------------------------------------------------------- +import Battle.Struct.Attributes + +-- Battle Characters ----------------------------------------------------------- +import BattleCharacters.Struct.Character +import BattleCharacters.Struct.Weapon + +-- Battle Map ------------------------------------------------------------------ +import BattleMap.Struct.Map + +-- Local Module ---------------------------------------------------------------- +import Struct.Battle +import Struct.Character +import Struct.Navigator + +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- +get_character_navigator : ( + Struct.Battle.Type -> + Struct.Character.Type -> + Struct.Navigator.Type + ) +get_character_navigator battle char = + let + base_char = (Struct.Character.get_base_character char) + weapon = (BattleCharacters.Struct.Character.get_active_weapon base_char) + in + (Struct.Navigator.new + (Struct.Character.get_location char) + (Battle.Struct.Attributes.get_movement_points + (BattleCharacters.Struct.Character.get_attributes base_char) + ) + (BattleCharacters.Struct.Weapon.get_defense_range weapon) + (BattleCharacters.Struct.Weapon.get_attack_range weapon) + (BattleMap.Struct.Map.get_tile_data_function + (Struct.Battle.get_map battle) + (List.map + (Struct.Character.get_location) + (Array.toList + (Struct.Battle.get_characters battle) + ) + ) + (Struct.Character.get_location char) + ) + ) + +get_character_attack_navigator : ( + Struct.Battle.Type -> + Struct.Character.Type -> + Struct.Navigator.Type + ) +get_character_attack_navigator battle char = + let + base_char = (Struct.Character.get_base_character char) + weapon = (BattleCharacters.Struct.Character.get_active_weapon base_char) + in + (Struct.Navigator.new + (Struct.Character.get_location char) + 0 + (BattleCharacters.Struct.Weapon.get_defense_range weapon) + (BattleCharacters.Struct.Weapon.get_attack_range weapon) + (BattleMap.Struct.Map.get_tile_data_function + (Struct.Battle.get_map battle) + (List.map + (Struct.Character.get_location) + (Array.toList + (Struct.Battle.get_characters battle) + ) + ) + (Struct.Character.get_location char) + ) + ) diff --git a/src/battle/src/View/Controlled.elm b/src/battle/src/View/Controlled.elm index 0293770..8f78fd9 100644 --- a/src/battle/src/View/Controlled.elm +++ b/src/battle/src/View/Controlled.elm @@ -19,102 +19,214 @@ import View.Controlled.ManualControls -------------------------------------------------------------------------------- -- LOCAL ----------------------------------------------------------------------- -------------------------------------------------------------------------------- -has_a_path : Struct.CharacterTurn.Type -> Bool -has_a_path char_turn = - case (Struct.CharacterTurn.maybe_get_navigator char_turn) of - (Just nav) -> ((Struct.Navigator.get_path nav) /= []) - Nothing -> False - +action_to_class : ( + Struct.CharacterTurn.Action -> + (Html.Attribute Struct.Event.Type) + ) +action_to_class action = + (Html.Attributes.class + ( + case action of + Struct.CharacterTurn.None -> "no-action" + Struct.CharacterTurn.Skipping -> "skipping" + Struct.CharacterTurn.Attacking -> "attacking" + Struct.CharacterTurn.SwitchingWeapons -> "switching-weapons" + Struct.CharacterTurn.UsingSkill -> "using-skill" + ) + ) -skill_button : Struct.CharacterTurn.Type -> (Html.Html Struct.Event.Type) -skill_button char_turn = +action_or_undo_button : ( + Struct.CharacterTurn.Action -> + Struct.CharacterTurn.Action -> + Struct.Event.Type -> + (Html.Html Struct.Event.Type) + ) +action_or_undo_button current_action relevant_action event = (Html.button - [ (Html.Events.onClick Struct.Event.AttackRequest) ] + ( + if (current_action == Struct.CharacterTurn.None) + then + [ + (Html.Attributes.class "action-button"), + (action_to_class relevant_action), + (Html.Attributes.class "action"), + (Html.Events.onClick event) + ] + else if (current_action == relevant_action) + then + [ + (Html.Attributes.class "action-button"), + (action_to_class relevant_action), + (Html.Events.onClick Struct.Event.UndoActionRequest), + (Html.Attributes.class "undo") + ] + else + [ + (Html.Attributes.class "action-button"), + (action_to_class relevant_action), + (Html.Attributes.class "disabled") + ] + ) [ - (Html.text - ( - if (has_a_path char_turn) - then ("Go & Select Skill Target(s)") - else ("Select Skill Target(s)") - ) - ) ] ) +inventory_button : Struct.CharacterTurn.Type -> (Html.Html Struct.Event.Type) +inventory_button char_turn = + (action_or_undo_button + (Struct.CharacterTurn.get_action char_turn) + Struct.CharacterTurn.SwitchingWeapons + Struct.Event.WeaponSwitchRequest + ) + + attack_button : Struct.CharacterTurn.Type -> (Html.Html Struct.Event.Type) attack_button char_turn = - (Html.button - [ (Html.Events.onClick Struct.Event.AttackRequest) ] - [ - (Html.text - ( - if (has_a_path char_turn) - then ("Go & Select Attack Target") - else ("Select Attack Target") - ) - ) - ] + (action_or_undo_button + (Struct.CharacterTurn.get_action char_turn) + Struct.CharacterTurn.Attacking + Struct.Event.AttackRequest ) -abort_button : (Html.Html Struct.Event.Type) -abort_button = - (Html.button - [ (Html.Events.onClick Struct.Event.AbortTurnRequest) ] - [ (Html.text "Abort") ] +skip_button : Struct.CharacterTurn.Type -> (Html.Html Struct.Event.Type) +skip_button char_turn = + (action_or_undo_button + (Struct.CharacterTurn.get_action char_turn) + Struct.CharacterTurn.Skipping + Struct.Event.SkipRequest ) -undo_button : (Html.Html Struct.Event.Type) -undo_button = - (Html.button - [ (Html.Events.onClick Struct.Event.UndoActionRequest) ] - [ (Html.text "Undo") ] +skill_button : Struct.CharacterTurn.Type -> (Html.Html Struct.Event.Type) +skill_button char_turn = + (action_or_undo_button + (Struct.CharacterTurn.get_action char_turn) + Struct.CharacterTurn.UsingSkill + Struct.Event.SkillRequest ) -end_turn_button : (Html.Html Struct.Event.Type) -end_turn_button = +abort_button : (Html.Html Struct.Event.Type) +abort_button = (Html.button [ - (Html.Events.onClick Struct.Event.TurnEnded), - (Html.Attributes.class "end-turn-button") + (Html.Attributes.class "action-button"), + (Html.Events.onClick Struct.Event.AbortTurnRequest), + (Html.Attributes.class "abort-button") + ] + [ ] - [ (Html.text ("Confirm Turn")) ] ) -inventory_button : Bool -> (Html.Html Struct.Event.Type) -inventory_button go_prefix = + +path_button : Struct.CharacterTurn.Type -> (Html.Html Struct.Event.Type) +path_button char_turn = (Html.button - [ (Html.Events.onClick Struct.Event.WeaponSwitchRequest) ] - [ - (Html.text + ( + if + ( + ( + (Struct.CharacterTurn.get_action char_turn) + == Struct.CharacterTurn.None + ) + && ( - if (go_prefix) - then ("Go & Switch Weapon") - else ("Switch Weapon") + case (Struct.CharacterTurn.maybe_get_navigator char_turn) of + Nothing -> False + (Just nav) -> ((Struct.Navigator.get_path nav) /= []) ) ) + then + if ((Struct.CharacterTurn.get_path char_turn) == []) + then + [ + (Html.Attributes.class "action-button"), + (Html.Attributes.class "path-button"), + (Html.Events.onClick Struct.Event.MoveRequest) + ] + else + [ + (Html.Attributes.class "action-button"), + (Html.Attributes.class "path-button"), + (Html.Events.onClick Struct.Event.UndoActionRequest), + (Html.Attributes.class "undo") + ] + else + [ + (Html.Attributes.class "action-button"), + (Html.Attributes.class "path-button"), + (Html.Attributes.class "disabled"), + (Html.Attributes.class + ( + if ((Struct.CharacterTurn.get_path char_turn) == []) + then "" + else "undo" + ) + ) + ] + ) + [ ] ) +end_turn_button : Struct.CharacterTurn.Type -> (Html.Html Struct.Event.Type) +end_turn_button char_turn = + let + registered_path = (Struct.CharacterTurn.get_path char_turn) + action = (Struct.CharacterTurn.get_action char_turn) + temporary_path = + case (Struct.CharacterTurn.maybe_get_navigator char_turn) of + Nothing -> [] + (Just nav) -> (Struct.Navigator.get_path nav) + in + (Html.button + [ + ( + if + ( + (temporary_path /= registered_path) + || + ( + (Struct.CharacterTurn.is_aiming_at_something char_turn) + && (action /= Struct.CharacterTurn.Attacking) + && (action /= Struct.CharacterTurn.UsingSkill) + ) + || + ( + (registered_path == []) + && (action == Struct.CharacterTurn.None) + ) + ) + then (Html.Attributes.class "disabled") + else (Html.Events.onClick Struct.Event.TurnEnded) + ), + (Html.Attributes.class "action-button"), + (Html.Attributes.class "end-turn-button"), + (Html.Attributes.class + ( + if (registered_path == []) + then "no-path-was-queued" + else "path-was-queued" + ) + ), + (action_to_class (Struct.CharacterTurn.get_action char_turn)) + ] + [ + ] + ) + get_available_actions : ( Struct.CharacterTurn.Type -> (List (Html.Html Struct.Event.Type)) ) get_available_actions char_turn = - if ((Struct.CharacterTurn.get_action char_turn) == Struct.CharacterTurn.None) - then - [ - (attack_button char_turn), - (skill_button char_turn), - (inventory_button (has_a_path char_turn)), - (end_turn_button), - (abort_button) - ] - else - [ - (end_turn_button), - (undo_button), - (abort_button) - ] + [ + (abort_button), + (skip_button char_turn), + (path_button char_turn), + (attack_button char_turn), + (skill_button char_turn), + (inventory_button char_turn), + (end_turn_button char_turn) + ] -------------------------------------------------------------------------------- -- EXPORTED -------------------------------------------------------------------- @@ -133,19 +245,26 @@ get_html char_turn player_ix = player_ix char ), - ( - if - ( - (Struct.CharacterTurn.get_action char_turn) - == - Struct.CharacterTurn.None - ) - then (View.Controlled.ManualControls.get_html) - else (Shared.Util.Html.nothing) - ), (Html.div - [(Html.Attributes.class "controlled-actions")] - (get_available_actions char_turn) + [ + (Html.Attributes.class "controlled-controls") + ] + [ + (Html.div + [(Html.Attributes.class "controlled-actions")] + (get_available_actions char_turn) + ), + ( + if + ( + (Struct.CharacterTurn.get_action char_turn) + == + Struct.CharacterTurn.None + ) + then (View.Controlled.ManualControls.get_html) + else (Shared.Util.Html.nothing) + ) + ] ) ] ) diff --git a/src/battle/src/View/Controlled/ManualControls.elm b/src/battle/src/View/Controlled/ManualControls.elm index 8c8c802..cb53c59 100644 --- a/src/battle/src/View/Controlled/ManualControls.elm +++ b/src/battle/src/View/Controlled/ManualControls.elm @@ -31,18 +31,6 @@ direction_button dir label = [] ) -go_button : (Html.Html Struct.Event.Type) -go_button = - (Html.button - [ - (Html.Attributes.class "manual-controls-go"), - (Html.Events.onClick Struct.Event.AttackRequest) - ] - [ - (Html.text "Go") - ] - ) - -------------------------------------------------------------------------------- -- EXPORTED -------------------------------------------------------------------- -------------------------------------------------------------------------------- @@ -56,7 +44,6 @@ get_html = (direction_button BattleMap.Struct.Direction.Left "left"), (direction_button BattleMap.Struct.Direction.Down "down"), (direction_button BattleMap.Struct.Direction.Up "up"), - (direction_button BattleMap.Struct.Direction.Right "right"), - (go_button) + (direction_button BattleMap.Struct.Direction.Right "right") ] ) diff --git a/src/css/src/battle/controlled-panel.scss b/src/css/src/battle/controlled-panel.scss index 2a52fe6..6001d39 100644 --- a/src/css/src/battle/controlled-panel.scss +++ b/src/css/src/battle/controlled-panel.scss @@ -19,16 +19,22 @@ display: flex; flex-flow: column; - justify-content: space-between; + justify-content: space-evenly; } -.controlled-actions +.controlled-controls { display: flex; - flex-flow: row wrap; + flex-flow: row; +} - align-items: center; - justify-content: center; +.controlled-actions +{ + width: 50%; + display: grid; + grid-template-columns: 33% 33% 33%; + grid-gap: 2px; + justify-content: space-evenly; } .end-turn-button @@ -39,3 +45,4 @@ } @import 'controlled-panel/manual-control'; +@import 'controlled-panel/buttons'; diff --git a/src/css/src/battle/controlled-panel/buttons.scss b/src/css/src/battle/controlled-panel/buttons.scss new file mode 100644 index 0000000..fb55a61 --- /dev/null +++ b/src/css/src/battle/controlled-panel/buttons.scss @@ -0,0 +1,115 @@ +.action-button +{ + width: 42px; + height: 42px; + background-size: 97%; + background-position: center; +} + +.action-button.disabled +{ + opacity: 0.1; + pointer-events:none; +} + +.action-button + .action-button +{ + margin: 0; +} + +.action-button.abort-button +{ + background-image: url(/asset/svg/damage_type/abort.svg); +} + +.action-button.skipping +{ + --bg-first-act: url(/asset/svg/damage_type/skip.svg); + --bg-second-act: var(--bg-first-act); + background-image: var(--bg-first-act); +} + +.action-button.path-button +{ + --bg-first-act: url(/asset/svg/damage_type/move.svg); + background-image: var(--bg-first-act); +} + +.action-button.attacking +{ + --bg-second-act: url(/asset/svg/damage_type/attack.svg); + background-image: var(--bg-second-act); +} + +.action-button.using-skill +{ + --bg-second-act: url(/asset/svg/damage_type/skill.svg); + background-image: var(--bg-second-act); +} + +.action-button.switching-weapons +{ + --bg-second-act: url(/asset/svg/damage_type/swapwp.svg); + background-image: var(--bg-second-act); +} + +.action-button.end-turn-button +{ + grid-column: span 3; + width: calc(100% - 2px); + --bg-end-turn: url(/asset/svg/damage_type/endturn.svg); +} + +.action-button.end-turn-button.disabled +{ + animation: none; +} + +.action-button.end-turn-button.no-path-was-queued +{ + background-image: var(--bg-second-act), var(--bg-end-turn); + background-size: 42px, 42px; + background-repeat: no-repeat, no-repeat; + background-position: left center, right center; +} + +.action-button.end-turn-button.path-was-queued +{ + background-size: 42px, 42px, 42px; + background-repeat: no-repeat, no-repeat, no-repeat; + background-position: left center, center, right center; + background-image: + url(/asset/svg/damage_type/move.svg), + var(--bg-second-act), + var(--bg-end-turn); +} + +.action-button.end-turn-button.no-path-was-queued, +.action-button.end-turn-button.path-was-queued.no-action +{ + background-size: 42px, 42px; + background-repeat: no-repeat, no-repeat; + background-position: left center, right center; + background-image: + var(--bg-first-act), + var(--bg-end-turn); +} + +.action-button.undo +{ + border-bottom-width: 1px; + filter: brightness(0.8); + +} +.action-button.end-turn-button.no-path-was-queued +{ + background-image: var(--bg-second-act), var(--bg-end-turn); +} + +.action-button.end-turn-button.path-was-queued.no-action +{ + background-image: + url(/asset/svg/damage_type/move.svg), + var(--bg-end-turn); +} + diff --git a/src/css/src/battle/controlled-panel/manual-control.scss b/src/css/src/battle/controlled-panel/manual-control.scss index 7ab41b6..f4f5d99 100644 --- a/src/css/src/battle/controlled-panel/manual-control.scss +++ b/src/css/src/battle/controlled-panel/manual-control.scss @@ -5,7 +5,7 @@ display: grid; grid-template: '. top .' - 'left go right' + 'left . right' '. bottom .'; margin: auto; } @@ -25,15 +25,6 @@ opacity: 1; } -.manual-controls-go -{ - margin: auto; - width: 28px; - height: 28px; - border-radius: 100em; - grid-area: go; -} - .manual-controls-up { transform: rotate(-90deg); diff --git a/src/shared/elm/Shared/Util/Set.elm b/src/shared/elm/Shared/Util/Set.elm new file mode 100644 index 0000000..d9368cd --- /dev/null +++ b/src/shared/elm/Shared/Util/Set.elm @@ -0,0 +1,11 @@ +module Shared.Util.Set exposing (..) + +import Set + +import List + +toggle : comparable -> (Set.Set comparable) -> (Set.Set comparable) +toggle e set = + if (Set.member e set) + then (Set.remove e set) + else (Set.insert e set) -- cgit v1.2.3-70-g09d2