summaryrefslogtreecommitdiff |
diff options
author | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2020-05-28 22:43:36 +0200 |
---|---|---|
committer | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2020-05-28 22:43:36 +0200 |
commit | 55eb0dce8e2b9bb2c26f856640c1116cb07973ce (patch) | |
tree | f593f4ea5ac33aaa69c35d9fb6ec68c7dac08bcf | |
parent | 7365a30773cdedcc89e1df9cd83a4835f9e09a10 (diff) |
Working on Puppeteer driven animations.
There's still some buggy behavior in there...
-rw-r--r-- | src/battle/src/Constants/DisplayEffects.elm | 12 | ||||
-rw-r--r-- | src/battle/src/Struct/PuppeteerAction.elm | 141 | ||||
-rw-r--r-- | src/battle/src/Update/Puppeteer.elm | 88 | ||||
-rw-r--r-- | src/battle/src/Update/Puppeteer/Focus.elm | 2 | ||||
-rw-r--r-- | src/battle/src/Update/Puppeteer/ToggleCharacterEffect.elm | 50 | ||||
-rw-r--r-- | src/battle/src/View/Map/Character.elm | 15 | ||||
-rw-r--r-- | src/css/src/battle/keyframes.scss | 6 | ||||
-rw-r--r-- | src/css/src/battle/map.scss | 1 | ||||
-rw-r--r-- | src/css/src/battle/map/character-effects.scss | 69 | ||||
-rw-r--r-- | src/css/src/battle/map/character.scss | 54 |
10 files changed, 338 insertions, 100 deletions
diff --git a/src/battle/src/Constants/DisplayEffects.elm b/src/battle/src/Constants/DisplayEffects.elm index 366c4e5..21bdd51 100644 --- a/src/battle/src/Constants/DisplayEffects.elm +++ b/src/battle/src/Constants/DisplayEffects.elm @@ -15,6 +15,18 @@ enabled = "enabled" target : String target = "target" +focused : String +focused = "focused" + +switching_weapons : String +switching_weapons = "switching-weapons" + +attacking : String +attacking = "attacking" + +using_skill : String +using_skill = "using-skill" + ally : String ally = "ally" diff --git a/src/battle/src/Struct/PuppeteerAction.elm b/src/battle/src/Struct/PuppeteerAction.elm index cc55cee..6a131eb 100644 --- a/src/battle/src/Struct/PuppeteerAction.elm +++ b/src/battle/src/Struct/PuppeteerAction.elm @@ -14,6 +14,8 @@ import BattleMap.Struct.DataSet import BattleMap.Struct.Direction -- Local Module ---------------------------------------------------------------- +import Constants.DisplayEffects + import Struct.Attack import Struct.Battle import Struct.TurnResult @@ -29,6 +31,7 @@ type Effect = | Move (Int, BattleMap.Struct.Direction.Type) | RefreshCharacter (Bool, Int) | RefreshCharactersOf (Bool, Int) + | ToggleCharacterEffect (Int, String) | StartTurn Int | SwapWeapons Int | Target (Int, Int) @@ -51,7 +54,19 @@ from_attacked attack = (Perform [ (RefreshCharacter (False, attacker_ix)), - (RefreshCharacter (False, defender_ix)) + (RefreshCharacter (False, defender_ix)), + (ToggleCharacterEffect + ( + attacker_ix, + Constants.DisplayEffects.attacking + ) + ), + (ToggleCharacterEffect + ( + defender_ix, + Constants.DisplayEffects.target + ) + ) ] ), (PerformFor @@ -65,7 +80,19 @@ from_attacked attack = (Perform [ (RefreshCharacter (True, attacker_ix)), - (RefreshCharacter (True, defender_ix)) + (RefreshCharacter (True, defender_ix)), + (ToggleCharacterEffect + ( + attacker_ix, + Constants.DisplayEffects.attacking + ) + ), + (ToggleCharacterEffect + ( + defender_ix, + Constants.DisplayEffects.target + ) + ) ] ) ] @@ -73,18 +100,53 @@ from_attacked attack = from_targeted : Struct.TurnResult.Target -> (List Type) from_targeted target = + let + actor_index = (Struct.TurnResult.get_target_actor_index target) + target_index = (Struct.TurnResult.get_target_target_index target) + in [ (PerformFor ( 2.0, - [(Focus (Struct.TurnResult.get_target_actor_index target))] + [ + (Focus actor_index), + (ToggleCharacterEffect + ( + actor_index, + Constants.DisplayEffects.focused + ) + ) + ] ) ), (PerformFor ( 2.0, - [(Focus (Struct.TurnResult.get_target_target_index target))] + [ + (Focus target_index), + (ToggleCharacterEffect + ( + actor_index, + Constants.DisplayEffects.focused) + ), + (ToggleCharacterEffect + ( + target_index, + Constants.DisplayEffects.focused + ) + ) + ] ) + ), + (Perform + [ + (ToggleCharacterEffect + ( + target_index, + Constants.DisplayEffects.focused + ) + ) + ] ) ] @@ -93,16 +155,42 @@ from_moved movement = let actor_ix = (Struct.TurnResult.get_movement_actor_index movement) in ( [ - (PerformFor (1.0, [(Focus actor_ix)])), - (Perform [(RefreshCharacter (False, actor_ix))]) + (PerformFor + ( + 1.0, + [ + (Focus actor_ix), + (ToggleCharacterEffect + ( + actor_ix, + Constants.DisplayEffects.focused + ) + ) + ] + ) + ), + (Perform + [ + (RefreshCharacter (False, actor_ix)), + (ToggleCharacterEffect + ( + actor_ix, + Constants.DisplayEffects.focused + ) + ) + ] + ) ] ++ (List.map (\dir -> (PerformFor ( - 0.5, - [(Move (actor_ix, dir))] + 0.4, + [ + (Focus actor_ix), + (Move (actor_ix, dir)) + ] ) ) ) @@ -118,16 +206,51 @@ from_switched_weapon weapon_switch = actor_ix = (Struct.TurnResult.get_weapon_switch_actor_index weapon_switch) in [ - (PerformFor (1.0, [(Focus actor_ix)])), + (PerformFor + ( + 1.0, + [ + (Focus actor_ix), + (ToggleCharacterEffect + ( + actor_ix, + Constants.DisplayEffects.focused + ) + ) + ] + ) + ), (PerformFor ( 2.0, [ + (ToggleCharacterEffect + ( + actor_ix, + Constants.DisplayEffects.focused + ) + ), + (ToggleCharacterEffect + ( + actor_ix, + Constants.DisplayEffects.switching_weapons + ) + ), (RefreshCharacter (False, actor_ix)), (SwapWeapons actor_ix), (RefreshCharacter (True, actor_ix)) ] ) + ), + (Perform + [ + (ToggleCharacterEffect + ( + actor_ix, + Constants.DisplayEffects.switching_weapons + ) + ) + ] ) ] diff --git a/src/battle/src/Update/Puppeteer.elm b/src/battle/src/Update/Puppeteer.elm index b21584f..b2527e8 100644 --- a/src/battle/src/Update/Puppeteer.elm +++ b/src/battle/src/Update/Puppeteer.elm @@ -19,6 +19,7 @@ import Update.Puppeteer.RefreshCharactersOf import Update.Puppeteer.StartTurn import Update.Puppeteer.SwapWeapons import Update.Puppeteer.Target +import Update.Puppeteer.ToggleCharacterEffect -------------------------------------------------------------------------------- -- LOCAL ----------------------------------------------------------------------- @@ -39,6 +40,13 @@ forward effect model = (Struct.PuppeteerAction.Focus character_ix) -> (Update.Puppeteer.Focus.forward character_ix model) + (Struct.PuppeteerAction.ToggleCharacterEffect (character_ix, deffect)) -> + (Update.Puppeteer.ToggleCharacterEffect.forward + character_ix + deffect + model + ) + (Struct.PuppeteerAction.Hit attack) -> (Update.Puppeteer.Hit.forward attack model) @@ -87,6 +95,13 @@ backward effect model = (Struct.PuppeteerAction.Hit attack) -> (Update.Puppeteer.Hit.backward attack model) + (Struct.PuppeteerAction.ToggleCharacterEffect (character_ix, deffect)) -> + (Update.Puppeteer.ToggleCharacterEffect.backward + character_ix + deffect + model + ) + (Struct.PuppeteerAction.Move (character_ix, direction)) -> (Update.Puppeteer.Move.backward character_ix direction model) @@ -119,24 +134,28 @@ apply_effects_forward : ( (Struct.Model.Type, (List (Cmd Struct.Event.Type))) ) apply_effects_forward effects model = - (List.foldl - (\effect (current_model, current_cmds) -> - let - (updated_model, new_commands) = (forward effect current_model) - in - ( - {updated_model| - puppeteer = - (Struct.Puppeteer.forward - updated_model.puppeteer - ) - }, - (new_commands ++ current_cmds) + let + (last_model, cmd_list) = + (List.foldl + (\effect (current_model, current_cmds) -> + let + (updated_model, new_commands) = (forward effect current_model) + in + ( + updated_model, + (new_commands ++ current_cmds) + ) ) + (model, []) + effects + ) + in + ( + {last_model | + puppeteer = (Struct.Puppeteer.forward last_model.puppeteer) + }, + cmd_list ) - (model, []) - effects - ) apply_effects_backward : ( (List Struct.PuppeteerAction.Effect) -> @@ -144,24 +163,29 @@ apply_effects_backward : ( (Struct.Model.Type, (List (Cmd Struct.Event.Type))) ) apply_effects_backward effects model = - (List.foldr - (\effect (current_model, current_cmds) -> - let - (updated_model, new_commands) = (backward effect current_model) - in - ( - {updated_model| - puppeteer = - (Struct.Puppeteer.backward - updated_model.puppeteer - ) - }, - (current_cmds ++ new_commands) + let + (last_model, cmd_list) = + (List.foldr + (\effect (current_model, current_cmds) -> + let + (updated_model, new_commands) = + (backward effect current_model) + in + ( + updated_model, + (current_cmds ++ new_commands) + ) ) + (model, []) + effects + ) + in + ( + {last_model | + puppeteer = (Struct.Puppeteer.backward last_model.puppeteer) + }, + cmd_list ) - (model, []) - effects - ) apply_to_rec : ( Struct.Model.Type -> diff --git a/src/battle/src/Update/Puppeteer/Focus.elm b/src/battle/src/Update/Puppeteer/Focus.elm index 4e72a53..c502af9 100644 --- a/src/battle/src/Update/Puppeteer/Focus.elm +++ b/src/battle/src/Update/Puppeteer/Focus.elm @@ -46,4 +46,4 @@ backward : ( Struct.Model.Type -> (Struct.Model.Type, (List (Cmd Struct.Event.Type))) ) -backward actor_ix model = (model, []) +backward actor_ix model = (forward actor_ix model) diff --git a/src/battle/src/Update/Puppeteer/ToggleCharacterEffect.elm b/src/battle/src/Update/Puppeteer/ToggleCharacterEffect.elm new file mode 100644 index 0000000..b89362e --- /dev/null +++ b/src/battle/src/Update/Puppeteer/ToggleCharacterEffect.elm @@ -0,0 +1,50 @@ +module Update.Puppeteer.ToggleCharacterEffect exposing (forward, backward) + +-- Local Module ---------------------------------------------------------------- +import Struct.Character +import Struct.Battle +import Struct.Event +import Struct.Model + +-------------------------------------------------------------------------------- +-- LOCAL ----------------------------------------------------------------------- +-------------------------------------------------------------------------------- +perform : ( + Int -> + String -> + Struct.Model.Type -> + (Struct.Model.Type, (List (Cmd Struct.Event.Type))) + ) +perform char_ix effect model = + ( + {model | + battle = + (Struct.Battle.update_character + char_ix + (Struct.Character.toggle_extra_display_effect effect) + model.battle + ) + }, + [] + ) +-------------------------------------------------------------------------------- +-- EXPORTED -------------------------------------------------------------------- +-------------------------------------------------------------------------------- +forward : ( + Int -> + String -> + Struct.Model.Type -> + (Struct.Model.Type, (List (Cmd Struct.Event.Type))) + ) +forward char_ix effect model = + (perform char_ix effect model) + + +backward : ( + Int -> + String -> + Struct.Model.Type -> + (Struct.Model.Type, (List (Cmd Struct.Event.Type))) + ) +backward char_ix effect model = + (perform char_ix effect model) diff --git a/src/battle/src/View/Map/Character.elm b/src/battle/src/View/Map/Character.elm index 67a165b..b865816 100644 --- a/src/battle/src/View/Map/Character.elm +++ b/src/battle/src/View/Map/Character.elm @@ -78,10 +78,15 @@ get_head_html char = ] ) -get_banner_html : Struct.Character.Type -> (Html.Html Struct.Event.Type) -get_banner_html char = - -- TODO: Banner from some status indicator - (Shared.Util.Html.nothing) +get_above_effect_html : Struct.Character.Type -> (Html.Html Struct.Event.Type) +get_above_effect_html char = + (Html.div + [ + (Html.Attributes.class "character-icon-above-effect") + ] + [ + ] + ) get_actual_html : Struct.Character.Type -> (Html.Html Struct.Event.Type) get_actual_html char = @@ -116,7 +121,7 @@ get_actual_html char = [ (get_body_html char), (get_head_html char), - (get_banner_html char) + (get_above_effect_html char) ] ) diff --git a/src/css/src/battle/keyframes.scss b/src/css/src/battle/keyframes.scss index 049e9d5..b6229cb 100644 --- a/src/css/src/battle/keyframes.scss +++ b/src/css/src/battle/keyframes.scss @@ -19,6 +19,12 @@ 100% { opacity: 1.0; transform: scale(1);} } +@keyframes strongly-pulsating-full-opacity { + 0% { transform: scale(1);} + 50% { transform: scale(1.5);} + 100% { transform: scale(1);} +} + @keyframes brown-alarm-bg { 0% {background-color: #917C6F;} 25% {background-color: #AC9D93} diff --git a/src/css/src/battle/map.scss b/src/css/src/battle/map.scss index 1501ca1..2fb3581 100644 --- a/src/css/src/battle/map.scss +++ b/src/css/src/battle/map.scss @@ -54,5 +54,6 @@ @import 'map/animation.scss'; @import 'map/character.scss'; +@import 'map/character-effects.scss'; @import 'map/marker.scss'; @import 'map/path.scss'; diff --git a/src/css/src/battle/map/character-effects.scss b/src/css/src/battle/map/character-effects.scss new file mode 100644 index 0000000..e2902f0 --- /dev/null +++ b/src/css/src/battle/map/character-effects.scss @@ -0,0 +1,69 @@ +.character-icon.display-effect-ally +{ +} + +.character-icon.display-effect-enemy +{ + transform: scale(-1, 1); +} + +.character-icon.display-effect-ally.character-icon-effect-disabled, +{ + filter: contrast(35%); +} + +.character-icon.display-effect-target +{ + background-color: rgba(255,0,0,0.7); + animation-name: red-alarm-bg; + animation-duration: 5s; + animation-iteration-count: infinite; +} + +.character-icon.display-effect-active, +.character-icon.display-effect-focused +{ + animation-name: strongly-pulsating; + animation-duration: 1.5s; + animation-iteration-count: infinite; +} + +.display-effect-team-0 .character-icon-body{background-image: url(/asset/svg/icon/body_team_0.svg);} +.display-effect-team-1 .character-icon-body{background-image: url(/asset/svg/icon/body_team_1.svg);} +.display-effect-team-2 .character-icon-body{background-image: url(/asset/svg/icon/body_team_2.svg);} +.display-effect-team-3 .character-icon-body{background-image: url(/asset/svg/icon/body_team_3.svg);} +.display-effect-team-4 .character-icon-body{background-image: url(/asset/svg/icon/body_team_4.svg);} +.display-effect-team-5 .character-icon-body{background-image: url(/asset/svg/icon/body_team_5.svg);} +.display-effect-team-6 .character-icon-body{background-image: url(/asset/svg/icon/body_team_6.svg);} +.display-effect-team-7 .character-icon-body{background-image: url(/asset/svg/icon/body_team_7.svg);} + +.character-icon.display-effect-enabled +{ + animation-name: pulsating; + animation-duration: 1.5s; + animation-iteration-count: infinite; + transform-origin: center; +} + +.character-icon.display-effect-switching-weapons > .character-icon-above-effect, +.character-icon.display-effect-attacking > .character-icon-above-effect +{ + animation-name: strongly-pulsating-full-opacity; + animation-duration: 2s; + animation-iteration-count: infinite; +} + +.character-icon.display-effect-switching-weapons > .character-icon-above-effect +{ + background-image: url(/asset/svg/damage_type/swapwp.svg); +} + +.character-icon.display-effect-attacking > .character-icon-above-effect +{ + background-image: url(/asset/svg/damage_type/attack.svg); +} + +.character-icon.display-effect-using-skill > .character-icon-above-effect +{ + background-image: url(/asset/svg/damage_type/skill.svg); +} diff --git a/src/css/src/battle/map/character.scss b/src/css/src/battle/map/character.scss index 2ba519b..2090a32 100644 --- a/src/css/src/battle/map/character.scss +++ b/src/css/src/battle/map/character.scss @@ -15,58 +15,6 @@ height: inherit; } -.character-icon.display-effect-enabled, -.character-icon-enabled -{ - animation-name: pulsating; - animation-duration: 1.5s; - animation-iteration-count: infinite; - transform-origin: center; -} - -.character-icon-banner { z-index: 2; } +.character-icon-above-effect { z-index: 2; } .character-icon-head { z-index: 1; } .character-icon-body { z-index: 0; } - -.character-icon.display-effect-ally, -.character-ally -{ -} - -.character-icon.display-effect-enemy, -.character-enemy -{ - transform: scale(-1, 1); -} - -.character-icon.display-effect-ally.character-icon-effect-disabled, -.character-ally.character-icon-disabled -{ - filter: contrast(35%); -} - -.character-icon.display-effect-target, -.character-targeted -{ - background-color: rgba(255,0,0,0.7); - animation-name: red-alarm-bg; - animation-duration: 5s; - animation-iteration-count: infinite; -} - -.character-icon.display-effect-active, -.character-selected -{ - animation-name: strongly-pulsating; - animation-duration: 1.5s; - animation-iteration-count: infinite; -} - -.display-effect-team-0 .character-icon-body{background-image: url(/asset/svg/icon/body_team_0.svg);} -.display-effect-team-1 .character-icon-body{background-image: url(/asset/svg/icon/body_team_1.svg);} -.display-effect-team-2 .character-icon-body{background-image: url(/asset/svg/icon/body_team_2.svg);} -.display-effect-team-3 .character-icon-body{background-image: url(/asset/svg/icon/body_team_3.svg);} -.display-effect-team-4 .character-icon-body{background-image: url(/asset/svg/icon/body_team_4.svg);} -.display-effect-team-5 .character-icon-body{background-image: url(/asset/svg/icon/body_team_5.svg);} -.display-effect-team-6 .character-icon-body{background-image: url(/asset/svg/icon/body_team_6.svg);} -.display-effect-team-7 .character-icon-body{background-image: url(/asset/svg/icon/body_team_7.svg);} |