From 7cebb7bfca4ce78dcb98e1f7d1b9b5dc12b3227c Mon Sep 17 00:00:00 2001 From: fu-majime Date: Sun, 31 Mar 2024 22:45:32 +0900 Subject: [PATCH] Fly Animation --- .../Prefabs/Games/Fillbots/BotLarge.prefab | 7 +- .../Prefabs/Games/Fillbots/BotMedium.prefab | 7 +- .../Prefabs/Games/Fillbots/BotSmall.prefab | 7 +- .../Games/Fillbots/Animations/Large/Fly.anim | 42 +++--- .../Games/Fillbots/Animations/Medium/Fly.anim | 42 +++--- .../Fillbots/Animations/Medium/Success.anim | 138 +++++++++++++++++- .../Games/Fillbots/Animations/Small/Fly.anim | 42 +++--- Assets/Scripts/Games/Fillbots/Fillbots.cs | 109 +++++++------- Assets/Scripts/Games/Fillbots/NtrFillbot.cs | 96 +++++++----- 9 files changed, 321 insertions(+), 169 deletions(-) diff --git a/Assets/Resources/Prefabs/Games/Fillbots/BotLarge.prefab b/Assets/Resources/Prefabs/Games/Fillbots/BotLarge.prefab index b922c7904..e84bb9f5c 100644 --- a/Assets/Resources/Prefabs/Games/Fillbots/BotLarge.prefab +++ b/Assets/Resources/Prefabs/Games/Fillbots/BotLarge.prefab @@ -870,15 +870,16 @@ MonoBehaviour: size: 2 holdLength: 7 limbFallHeight: 15 - fuelCorol: {r: 1, g: 0.385, b: 0.385, a: 1} - lampCorolOff: {r: 0.635, g: 0.635, b: 0.185, a: 1} - lampCorolOn: {r: 1, g: 1, b: 0.42, a: 1} + fuelColor: {r: 1, g: 0.385, b: 0.385, a: 1} + lampColorOff: {r: 0, g: 0, b: 0, a: 0} + lampColorOn: {r: 0, g: 0, b: 0, a: 0} fullBody: {fileID: 7967358876063018519} legs: {fileID: 7489285146181854031} body: {fileID: 233663896046199226} head: {fileID: 1555999227183591988} fuelFill: {fileID: 1253665520920512372} fillAnim: {fileID: 3960380650713155144} + flyDistance: 2.05 --- !u!210 &755017336671867292 SortingGroup: m_ObjectHideFlags: 0 diff --git a/Assets/Resources/Prefabs/Games/Fillbots/BotMedium.prefab b/Assets/Resources/Prefabs/Games/Fillbots/BotMedium.prefab index 43f6f2342..d1faaf349 100644 --- a/Assets/Resources/Prefabs/Games/Fillbots/BotMedium.prefab +++ b/Assets/Resources/Prefabs/Games/Fillbots/BotMedium.prefab @@ -870,15 +870,16 @@ MonoBehaviour: size: 1 holdLength: 3 limbFallHeight: 15 - fuelCorol: {r: 1, g: 0.385, b: 0.385, a: 1} - lampCorolOff: {r: 0.635, g: 0.635, b: 0.185, a: 1} - lampCorolOn: {r: 1, g: 1, b: 0.42, a: 1} + fuelColor: {r: 0, g: 0, b: 0, a: 0} + lampColorOff: {r: 0, g: 0, b: 0, a: 0} + lampColorOn: {r: 0, g: 0, b: 0, a: 0} fullBody: {fileID: 7967358876063018519} legs: {fileID: 7489285146181854031} body: {fileID: 233663896046199226} head: {fileID: 1555999227183591988} fuelFill: {fileID: 1253665520920512372} fillAnim: {fileID: 3960380650713155144} + flyDistance: 2.05 --- !u!210 &755017336671867292 SortingGroup: m_ObjectHideFlags: 0 diff --git a/Assets/Resources/Prefabs/Games/Fillbots/BotSmall.prefab b/Assets/Resources/Prefabs/Games/Fillbots/BotSmall.prefab index 8e188673c..dfcad9276 100644 --- a/Assets/Resources/Prefabs/Games/Fillbots/BotSmall.prefab +++ b/Assets/Resources/Prefabs/Games/Fillbots/BotSmall.prefab @@ -870,15 +870,16 @@ MonoBehaviour: size: 0 holdLength: 1 limbFallHeight: 15 - fuelCorol: {r: 1, g: 0.385, b: 0.385, a: 1} - lampCorolOff: {r: 0.635, g: 0.635, b: 0.185, a: 1} - lampCorolOn: {r: 1, g: 1, b: 0.42, a: 1} + fuelColor: {r: 0, g: 0, b: 0, a: 0} + lampColorOff: {r: 0, g: 0, b: 0, a: 0} + lampColorOn: {r: 0, g: 0, b: 0, a: 0} fullBody: {fileID: 7967358876063018519} legs: {fileID: 7489285146181854031} body: {fileID: 233663896046199226} head: {fileID: 1555999227183591988} fuelFill: {fileID: 1253665520920512372} fillAnim: {fileID: 3960380650713155144} + flyDistance: 2.05 --- !u!210 &755017336671867292 SortingGroup: m_ObjectHideFlags: 0 diff --git a/Assets/Resources/Sprites/Games/Fillbots/Animations/Large/Fly.anim b/Assets/Resources/Sprites/Games/Fillbots/Animations/Large/Fly.anim index a751e7e35..6f1a46172 100644 --- a/Assets/Resources/Sprites/Games/Fillbots/Animations/Large/Fly.anim +++ b/Assets/Resources/Sprites/Games/Fillbots/Animations/Large/Fly.anim @@ -41,15 +41,6 @@ AnimationClip: m_Curve: - serializedVersion: 3 time: 0 - value: 1 - inSlope: Infinity - outSlope: Infinity - tangentMode: 103 - weightedMode: 0 - inWeight: 0 - outWeight: 0 - - serializedVersion: 3 - time: 0.083333336 value: 0 inSlope: Infinity outSlope: Infinity @@ -58,7 +49,7 @@ AnimationClip: inWeight: 0 outWeight: 0 - serializedVersion: 3 - time: 0.16666667 + time: 0.05 value: 1 inSlope: Infinity outSlope: Infinity @@ -66,6 +57,15 @@ AnimationClip: weightedMode: 0 inWeight: 0 outWeight: 0 + - serializedVersion: 3 + time: 0.1 + value: 0 + inSlope: Infinity + outSlope: Infinity + tangentMode: 103 + weightedMode: 0 + inWeight: 0 + outWeight: 0 m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 @@ -116,7 +116,7 @@ AnimationClip: m_AdditiveReferencePoseClip: {fileID: 0} m_AdditiveReferencePoseTime: 0 m_StartTime: 0 - m_StopTime: 0.16666667 + m_StopTime: 0.1 m_OrientationOffsetY: 0 m_Level: 0 m_CycleOffset: 0 @@ -156,15 +156,6 @@ AnimationClip: m_Curve: - serializedVersion: 3 time: 0 - value: 1 - inSlope: Infinity - outSlope: Infinity - tangentMode: 103 - weightedMode: 0 - inWeight: 0 - outWeight: 0 - - serializedVersion: 3 - time: 0.083333336 value: 0 inSlope: Infinity outSlope: Infinity @@ -173,7 +164,7 @@ AnimationClip: inWeight: 0 outWeight: 0 - serializedVersion: 3 - time: 0.16666667 + time: 0.05 value: 1 inSlope: Infinity outSlope: Infinity @@ -181,6 +172,15 @@ AnimationClip: weightedMode: 0 inWeight: 0 outWeight: 0 + - serializedVersion: 3 + time: 0.1 + value: 0 + inSlope: Infinity + outSlope: Infinity + tangentMode: 103 + weightedMode: 0 + inWeight: 0 + outWeight: 0 m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 diff --git a/Assets/Resources/Sprites/Games/Fillbots/Animations/Medium/Fly.anim b/Assets/Resources/Sprites/Games/Fillbots/Animations/Medium/Fly.anim index b5bc3f22b..78897f569 100644 --- a/Assets/Resources/Sprites/Games/Fillbots/Animations/Medium/Fly.anim +++ b/Assets/Resources/Sprites/Games/Fillbots/Animations/Medium/Fly.anim @@ -41,15 +41,6 @@ AnimationClip: m_Curve: - serializedVersion: 3 time: 0 - value: 1 - inSlope: Infinity - outSlope: Infinity - tangentMode: 103 - weightedMode: 0 - inWeight: 0 - outWeight: 0 - - serializedVersion: 3 - time: 0.083333336 value: 0 inSlope: Infinity outSlope: Infinity @@ -58,7 +49,7 @@ AnimationClip: inWeight: 0 outWeight: 0 - serializedVersion: 3 - time: 0.16666667 + time: 0.05 value: 1 inSlope: Infinity outSlope: Infinity @@ -66,6 +57,15 @@ AnimationClip: weightedMode: 0 inWeight: 0 outWeight: 0 + - serializedVersion: 3 + time: 0.1 + value: 0 + inSlope: Infinity + outSlope: Infinity + tangentMode: 103 + weightedMode: 0 + inWeight: 0 + outWeight: 0 m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 @@ -116,7 +116,7 @@ AnimationClip: m_AdditiveReferencePoseClip: {fileID: 0} m_AdditiveReferencePoseTime: 0 m_StartTime: 0 - m_StopTime: 0.16666667 + m_StopTime: 0.1 m_OrientationOffsetY: 0 m_Level: 0 m_CycleOffset: 0 @@ -156,15 +156,6 @@ AnimationClip: m_Curve: - serializedVersion: 3 time: 0 - value: 1 - inSlope: Infinity - outSlope: Infinity - tangentMode: 103 - weightedMode: 0 - inWeight: 0 - outWeight: 0 - - serializedVersion: 3 - time: 0.083333336 value: 0 inSlope: Infinity outSlope: Infinity @@ -173,7 +164,7 @@ AnimationClip: inWeight: 0 outWeight: 0 - serializedVersion: 3 - time: 0.16666667 + time: 0.05 value: 1 inSlope: Infinity outSlope: Infinity @@ -181,6 +172,15 @@ AnimationClip: weightedMode: 0 inWeight: 0 outWeight: 0 + - serializedVersion: 3 + time: 0.1 + value: 0 + inSlope: Infinity + outSlope: Infinity + tangentMode: 103 + weightedMode: 0 + inWeight: 0 + outWeight: 0 m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 diff --git a/Assets/Resources/Sprites/Games/Fillbots/Animations/Medium/Success.anim b/Assets/Resources/Sprites/Games/Fillbots/Animations/Medium/Success.anim index db2719dab..267f3c366 100644 --- a/Assets/Resources/Sprites/Games/Fillbots/Animations/Medium/Success.anim +++ b/Assets/Resources/Sprites/Games/Fillbots/Animations/Medium/Success.anim @@ -14,7 +14,41 @@ AnimationClip: m_RotationCurves: [] m_CompressedRotationCurves: [] m_EulerCurves: [] - m_PositionCurves: [] + m_PositionCurves: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: {x: 0, y: 0, z: 0} + inSlope: {x: Infinity, y: Infinity, z: 0} + outSlope: {x: Infinity, y: Infinity, z: 0} + tangentMode: 0 + weightedMode: 0 + inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + - serializedVersion: 3 + time: 0.083333336 + value: {x: 0, y: 0, z: 0} + inSlope: {x: Infinity, y: Infinity, z: 0} + outSlope: {x: Infinity, y: Infinity, z: 0} + tangentMode: 0 + weightedMode: 0 + inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + - serializedVersion: 3 + time: 0.16666667 + value: {x: 0.15, y: 0.07, z: 0} + inSlope: {x: Infinity, y: Infinity, z: 0} + outSlope: {x: Infinity, y: Infinity, z: 0} + tangentMode: 0 + weightedMode: 0 + inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + path: m_ScaleCurves: [] m_FloatCurves: - curve: @@ -55,6 +89,13 @@ AnimationClip: m_Extent: {x: 0, y: 0, z: 0} m_ClipBindingConstant: genericBindings: + - serializedVersion: 2 + path: 0 + attribute: 1 + script: {fileID: 0} + typeID: 4 + customType: 0 + isPPtrCurve: 0 - serializedVersion: 2 path: 3747441678 attribute: 2086281974 @@ -113,8 +154,101 @@ AnimationClip: path: Mask classID: 1 script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: Infinity + outSlope: Infinity + tangentMode: 103 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.083333336 + value: 0 + inSlope: Infinity + outSlope: Infinity + tangentMode: 103 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.16666667 + value: 0.15 + inSlope: Infinity + outSlope: Infinity + tangentMode: 103 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalPosition.x + path: + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: Infinity + outSlope: Infinity + tangentMode: 103 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.083333336 + value: 0 + inSlope: Infinity + outSlope: Infinity + tangentMode: 103 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.16666667 + value: 0.07 + inSlope: Infinity + outSlope: Infinity + tangentMode: 103 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalPosition.y + path: + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: Infinity + outSlope: Infinity + tangentMode: 103 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalPosition.z + path: + classID: 4 + script: {fileID: 0} m_EulerEditorCurves: [] - m_HasGenericRootTransform: 0 + m_HasGenericRootTransform: 1 m_HasMotionFloatCurves: 0 m_Events: - time: 0 diff --git a/Assets/Resources/Sprites/Games/Fillbots/Animations/Small/Fly.anim b/Assets/Resources/Sprites/Games/Fillbots/Animations/Small/Fly.anim index 47627e7bd..fbd65d70b 100644 --- a/Assets/Resources/Sprites/Games/Fillbots/Animations/Small/Fly.anim +++ b/Assets/Resources/Sprites/Games/Fillbots/Animations/Small/Fly.anim @@ -41,15 +41,6 @@ AnimationClip: m_Curve: - serializedVersion: 3 time: 0 - value: 1 - inSlope: Infinity - outSlope: Infinity - tangentMode: 103 - weightedMode: 0 - inWeight: 0 - outWeight: 0 - - serializedVersion: 3 - time: 0.083333336 value: 0 inSlope: Infinity outSlope: Infinity @@ -58,7 +49,7 @@ AnimationClip: inWeight: 0 outWeight: 0 - serializedVersion: 3 - time: 0.16666667 + time: 0.05 value: 1 inSlope: Infinity outSlope: Infinity @@ -66,6 +57,15 @@ AnimationClip: weightedMode: 0 inWeight: 0 outWeight: 0 + - serializedVersion: 3 + time: 0.1 + value: 0 + inSlope: Infinity + outSlope: Infinity + tangentMode: 103 + weightedMode: 0 + inWeight: 0 + outWeight: 0 m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 @@ -116,7 +116,7 @@ AnimationClip: m_AdditiveReferencePoseClip: {fileID: 0} m_AdditiveReferencePoseTime: 0 m_StartTime: 0 - m_StopTime: 0.16666667 + m_StopTime: 0.1 m_OrientationOffsetY: 0 m_Level: 0 m_CycleOffset: 0 @@ -156,15 +156,6 @@ AnimationClip: m_Curve: - serializedVersion: 3 time: 0 - value: 1 - inSlope: Infinity - outSlope: Infinity - tangentMode: 103 - weightedMode: 0 - inWeight: 0 - outWeight: 0 - - serializedVersion: 3 - time: 0.083333336 value: 0 inSlope: Infinity outSlope: Infinity @@ -173,7 +164,7 @@ AnimationClip: inWeight: 0 outWeight: 0 - serializedVersion: 3 - time: 0.16666667 + time: 0.05 value: 1 inSlope: Infinity outSlope: Infinity @@ -181,6 +172,15 @@ AnimationClip: weightedMode: 0 inWeight: 0 outWeight: 0 + - serializedVersion: 3 + time: 0.1 + value: 0 + inSlope: Infinity + outSlope: Infinity + tangentMode: 103 + weightedMode: 0 + inWeight: 0 + outWeight: 0 m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 diff --git a/Assets/Scripts/Games/Fillbots/Fillbots.cs b/Assets/Scripts/Games/Fillbots/Fillbots.cs index b3d3fc6f0..b9a9d4b74 100644 --- a/Assets/Scripts/Games/Fillbots/Fillbots.cs +++ b/Assets/Scripts/Games/Fillbots/Fillbots.cs @@ -30,12 +30,13 @@ namespace HeavenStudio.Games.Loaders { preFunction = delegate { var e = eventCaller.currentEntity; - Fillbots.PreSpawnFillbot(e.beat, 3, Scripts_Fillbots.BotSize.Medium, e["colorFuel"], e["colorLampOff"], e["colorLampOn"]); + Fillbots.PreSpawnFillbot(e.beat, 3, Scripts_Fillbots.BotSize.Medium, e["colorFuel"], e["colorLampOff"], e["colorLampOn"], e["type"], e["alt"]); }, defaultLength = 8f, parameters = new List() { - new Param("type", Scripts_Fillbots.EndType.Both, "Success Reaction", "Set the reaction of the Robot."), + new Param("alt", false, "Alternate OK"), + new Param("type", Scripts_Fillbots.EndAnim.Both, "Success Reaction", "Set the reaction of the Robot."), new Param("colorFuel", new Color(1f, 0.385f, 0.385f), "Fuel Color", "Set the color of the fuel."), new Param("colorLampOff", new Color(0.635f, 0.635f, 0.185f), "Off Lamp Color", "Set the color of the off lamp."), new Param("colorLampOn", new Color(1f, 1f, 0.42f), "On Lamp Color", "Set the color of the on lamp."), @@ -45,12 +46,13 @@ namespace HeavenStudio.Games.Loaders { preFunction = delegate { var e = eventCaller.currentEntity; - Fillbots.PreSpawnFillbot(e.beat, 7, Scripts_Fillbots.BotSize.Large, e["colorFuel"], e["colorLampOff"], e["colorLampOn"]); + Fillbots.PreSpawnFillbot(e.beat, 7, Scripts_Fillbots.BotSize.Large, e["colorFuel"], e["colorLampOff"], e["colorLampOn"], e["type"], e["alt"]); }, defaultLength = 12f, parameters = new List() { - new Param("type", Scripts_Fillbots.EndType.Both, "Success Reaction", "Set the reaction of the Robot."), + new Param("alt", false, "Alternate OK"), + new Param("type", Scripts_Fillbots.EndAnim.Both, "Success Reaction", "Set the reaction of the Robot."), new Param("colorFuel", new Color(1f, 0.385f, 0.385f), "Fuel Color", "Set the color of the fuel."), new Param("colorLampOff", new Color(0.635f, 0.635f, 0.185f), "Off Lamp Color", "Set the color of the off lamp."), new Param("colorLampOn", new Color(1f, 1f, 0.42f), "On Lamp Color", "Set the color of the on lamp."), @@ -60,12 +62,13 @@ namespace HeavenStudio.Games.Loaders { preFunction = delegate { var e = eventCaller.currentEntity; - Fillbots.PreSpawnFillbot(e.beat, 1, Scripts_Fillbots.BotSize.Small, e["colorFuel"], e["colorLampOff"], e["colorLampOn"]); + Fillbots.PreSpawnFillbot(e.beat, 1, Scripts_Fillbots.BotSize.Small, e["colorFuel"], e["colorLampOff"], e["colorLampOn"], e["type"], e["alt"]); }, defaultLength = 6f, parameters = new List() { - new Param("type", Scripts_Fillbots.EndType.Both, "Success Reaction", "Set the reaction of the Robot."), + new Param("alt", false, "Alternate OK"), + new Param("type", Scripts_Fillbots.EndAnim.Both, "Success Reaction", "Set the reaction of the Robot."), new Param("colorFuel", new Color(1f, 0.385f, 0.385f), "Fuel Color", "Set the color of the fuel."), new Param("colorLampOff", new Color(0.635f, 0.635f, 0.185f), "Off Lamp Color", "Set the color of the off lamp."), new Param("colorLampOn", new Color(1f, 1f, 0.42f), "On Lamp Color", "Set the color of the on lamp."), @@ -119,6 +122,8 @@ namespace HeavenStudio.Games public Color fuelColor; public Color lampColorOff; public Color lampColorOn; + public EndAnim endAnim; + public bool altOK; } private static List queuedBots = new List(); @@ -136,14 +141,16 @@ namespace HeavenStudio.Games [System.NonSerialized] public BotSize fillerPosition = BotSize.Medium; - public static Fillbots instance; - [NonSerialized] public List currentBots = new List(); [NonSerialized] public double conveyerStartBeat = -1; [NonSerialized] public float conveyerNormalizedOffset; + private int toggleGlobal = 0; + + public static Fillbots instance; + private void Awake() { instance = this; @@ -152,8 +159,10 @@ namespace HeavenStudio.Games public override void OnBeatPulse(double beat) { - int toggle = (int)(beat % 2); - if (BeatIsInBopRegion(beat)) Bop(toggle); + if (BeatIsInBopRegion(beat)) { + Bop(toggleGlobal); + toggleGlobal ^= 1; + } } private void OnDestroy() @@ -174,7 +183,7 @@ namespace HeavenStudio.Games { foreach (var queuedBot in queuedBots) { - SpawnFillbot(queuedBot.beat, queuedBot.holdLength, queuedBot.size, queuedBot.fuelColor, queuedBot.lampColorOff, queuedBot.lampColorOn); + SpawnFillbot(queuedBot.beat, queuedBot.holdLength, queuedBot.size, queuedBot.fuelColor, queuedBot.lampColorOff, queuedBot.lampColorOn, queuedBot.endAnim, queuedBot.altOK); } queuedBots.Clear(); } @@ -203,56 +212,16 @@ namespace HeavenStudio.Games SoundByte.PlayOneShotGame("fillbots/armRetractionWhiff"); } - if (conveyerStartBeat >= 0) - { - float normalizedBeat = cond.GetPositionFromBeat(conveyerStartBeat, 1); - - if (normalizedBeat >= 0) - { - for (int i = 0; i < currentBots.Count; i++) - { - var bot = currentBots[i]; - bot.MoveConveyer(normalizedBeat); - } - conveyerBelt.Play("Move", -1, ((normalizedBeat + conveyerNormalizedOffset) % 1) / 4); - foreach (var gear in gears) - { - gear.localEulerAngles = new Vector3(0, 0, Mathf.LerpUnclamped(0, 90, normalizedBeat + conveyerNormalizedOffset)); - } - } - else - { - foreach (var bot in currentBots) - { - bot.StopConveyer(); - } - conveyerBelt.Play("Move", -1, (conveyerNormalizedOffset % 1) / 4); - foreach (var gear in gears) - { - gear.localEulerAngles = new Vector3(0, 0, Mathf.LerpUnclamped(0, 90, conveyerNormalizedOffset)); - } - } - } - else - { - foreach (var bot in currentBots) - { - bot.StopConveyer(); - } - conveyerBelt.Play("Move", -1, (conveyerNormalizedOffset % 1) / 4); - foreach (var gear in gears) - { - gear.localEulerAngles = new Vector3(0, 0, Mathf.LerpUnclamped(0, 90, conveyerNormalizedOffset)); - } - } + UpdateConveyerBelt(conveyerStartBeat, conveyerNormalizedOffset); } } - public static void PreSpawnFillbot(double beat, double holdLength, BotSize size, Color fuelColor, Color lampColorOff, Color lampColorOn) + public static void PreSpawnFillbot(double beat, double holdLength, BotSize size, Color fuelColor, Color lampColorOff, Color lampColorOn, int endAnim, bool altOK) { + Debug.Log(altOK); if (GameManager.instance.currentGame == "fillbots") { - instance.SpawnFillbot(beat, holdLength, size, fuelColor, lampColorOff, lampColorOn); + instance.SpawnFillbot(beat, holdLength, size, fuelColor, lampColorOff, lampColorOn, (EndAnim)endAnim, altOK); } else { @@ -264,11 +233,13 @@ namespace HeavenStudio.Games fuelColor = fuelColor, lampColorOff = lampColorOff, lampColorOn = lampColorOn, + endAnim = (EndAnim)endAnim, + altOK = altOK, }); } } - private void SpawnFillbot(double beat, double holdLength, BotSize size, Color fuelColor, Color lampColorOff, Color lampColorOn) + private void SpawnFillbot(double beat, double holdLength, BotSize size, Color fuelColor, Color lampColorOff, Color lampColorOn, EndAnim endAnim, bool altOK) { NtrFillbot Bot = size switch { @@ -286,11 +257,13 @@ namespace HeavenStudio.Games spawnedBot.fuelColor = fuelColor; spawnedBot.lampColorOff = lampColorOff; spawnedBot.lampColorOn = lampColorOn; + spawnedBot.endAnim = endAnim; + spawnedBot.altOK = altOK; spawnedBot.Init(beat); BeatAction.New(instance, new List() { - new BeatAction.Action(beat, delegate + new BeatAction.Action(beat - 0.5, delegate { if (conveyerStartBeat != -1) conveyerNormalizedOffset = Conductor.instance.GetPositionFromBeat(conveyerStartBeat, 1); conveyerStartBeat = -2; @@ -298,8 +271,8 @@ namespace HeavenStudio.Games new BeatAction.Action(beat + 3, delegate { if (!PlayerInput.GetIsAction(InputAction_BasicPress)) filler.DoScaledAnimationAsync("FillerPrepare", 0.5f); - fillerPosition = size; conveyerStartBeat = beat + 3; + fillerPosition = size; }) }); } @@ -313,8 +286,8 @@ namespace HeavenStudio.Games BeatAction.New(instance, new List() { new BeatAction.Action(beat + i, delegate { - int toggle = (int)((beat + i) % 2); - Bop(toggle); + Bop(toggleGlobal); + toggleGlobal ^= 1; }) }); } @@ -334,6 +307,22 @@ namespace HeavenStudio.Games } } + private void UpdateConveyerBelt(double startBeat, float offset) + { + float normalizedBeat = Conductor.instance.GetPositionFromBeat(startBeat, 1); + float playTime = ((startBeat >= 0 && normalizedBeat >= 0) ? (normalizedBeat + offset) : offset) % 1 / 4; + + conveyerBelt.Play("Move", -1, playTime); + UpdateGears((startBeat >= 0 && normalizedBeat >= 0) ? normalizedBeat + offset : offset); + } + private void UpdateGears(float beat) + { + foreach (var gear in gears) + { + gear.localEulerAngles = new Vector3(0, 0, Mathf.LerpUnclamped(0, -90, beat)); + } + } + public void Blackout() { blackout.SetActive(!blackout.activeSelf); diff --git a/Assets/Scripts/Games/Fillbots/NtrFillbot.cs b/Assets/Scripts/Games/Fillbots/NtrFillbot.cs index 0ee3feb2c..5f3b63950 100644 --- a/Assets/Scripts/Games/Fillbots/NtrFillbot.cs +++ b/Assets/Scripts/Games/Fillbots/NtrFillbot.cs @@ -21,7 +21,7 @@ namespace HeavenStudio.Games.Scripts_Fillbots Ng, } - public enum EndType + public enum EndAnim { Both, Ace, @@ -34,11 +34,17 @@ namespace HeavenStudio.Games.Scripts_Fillbots [SerializeField] private BotSize size; public double holdLength = 4f; [SerializeField] private float limbFallHeight = 15f; - public Color fuelColor; - public Color lampColorOff; - public Color lampColorOn; + [System.NonSerialized] public Color fuelColor; + [System.NonSerialized] public Color lampColorOff; + [System.NonSerialized] public Color lampColorOn; double conveyerRestartLength = 0.5; + private Vector2 startPos; + + private float lerpDistance; + [SerializeField] private float flyDistance; + private float stackDistanceRate = 0.2f; + [Header("Body Parts")] [SerializeField] private Animator fullBody; private Material fullBodyMaterial; @@ -57,6 +63,7 @@ namespace HeavenStudio.Games.Scripts_Fillbots private float headPosY; private double startBeat = -1; + private double conveyerStartBeat = -1; private bool legsHaveFallen; private bool bodyHasFallen; @@ -64,8 +71,6 @@ namespace HeavenStudio.Games.Scripts_Fillbots private Fillbots game; - private float startPosX; - private GameEvent beepEvent; private PlayerActionEvent releaseEvent; @@ -75,8 +80,8 @@ namespace HeavenStudio.Games.Scripts_Fillbots private BotState botState = BotState.Idle; private bool isExplode = false; - private float lerpDistance; - private float stackDistanceRate = 0.2f; + [System.NonSerialized] public EndAnim endAnim; + [System.NonSerialized] public bool altOK; private float normalizedFill; @@ -100,9 +105,9 @@ namespace HeavenStudio.Games.Scripts_Fillbots bodyTrans.position = new Vector3(bodyTrans.position.x, bodyTrans.position.y + limbFallHeight); headTrans.position = new Vector3(headTrans.position.x, headTrans.position.y + limbFallHeight); - startPosX = transform.position.x; + startPos = transform.position; - lerpDistance = 0 - startPosX; + lerpDistance = 0 - startPos.x; } public void MoveConveyer(float normalized) @@ -113,7 +118,7 @@ namespace HeavenStudio.Games.Scripts_Fillbots return; } if (!headHasFallen || !bodyHasFallen || !legsHaveFallen) return; - transform.position = new Vector3(Mathf.LerpUnclamped(startPosX, startPosX + lerpDistance, normalized), transform.position.y); + transform.position = new Vector3(Mathf.LerpUnclamped(startPos.x, startPos.x + lerpDistance, normalized), startPos.y); if (normalized >= 4) { @@ -122,15 +127,29 @@ namespace HeavenStudio.Games.Scripts_Fillbots } } + public void FlyConveyer(float normalized) + { + if (botState is not BotState.Ace) return; + if (!headHasFallen || !bodyHasFallen || !legsHaveFallen) return; + transform.position = new Vector3(Mathf.LerpUnclamped(startPos.x, startPos.x + lerpDistance, normalized), + Mathf.LerpUnclamped(startPos.y, startPos.y + flyDistance, normalized)); + if (normalized >= 4) + { + game.currentBots.Remove(this); + Destroy(gameObject); + } + } + public void StopConveyer() { if (!headHasFallen || !bodyHasFallen || !legsHaveFallen) return; - startPosX = transform.position.x; + startPos = transform.position; } public void Init(double beat) { startBeat = beat; + conveyerStartBeat = beat + 3; fullBodyMaterial = fullBody.GetComponent().material; fullBodyMaterial.SetColor("_ColorBravo", fuelColor); @@ -207,6 +226,16 @@ namespace HeavenStudio.Games.Scripts_Fillbots float lerpedY = Mathf.Lerp(headPosY + limbFallHeight, headPosY, normalizedBeat); headTrans.position = new Vector3(headTrans.position.x, Mathf.Clamp(lerpedY, headPosY, headPosY + limbFallHeight)); } + if (true) + { + float normalizedBeat = cond.GetPositionFromBeat(this.conveyerStartBeat, 1); + if (normalizedBeat >= 0) + { + if (botState is BotState.Ace) FlyConveyer(normalizedBeat); + else MoveConveyer(normalizedBeat); + } + } + } if (botState is BotState.Holding) @@ -251,30 +280,19 @@ namespace HeavenStudio.Games.Scripts_Fillbots if (normalizedBeat < 1) { fullBody.Play("Dead", 0, 0); - fillSound.KillLoop(0); - beepEvent.enabled = false; - botState = BotState.Ng; - normalizedFill = normalizedBeat; SoundByte.PlayOneShotGame("fillbots/miss"); - if (game.conveyerStartBeat == -1) game.conveyerStartBeat = cond.songPositionInBeats + conveyerRestartLength; } else if (!isExplode) { fullBody.DoScaledAnimationAsync("ReleaseLate", 0.5f); - fillSound.KillLoop(0); - beepEvent.enabled = false; - botState = BotState.Ng; - normalizedFill = normalizedBeat; SoundByte.PlayOneShotGame("fillbots/miss"); - if (game.conveyerStartBeat == -1) game.conveyerStartBeat = cond.songPositionInBeats + conveyerRestartLength; - } - else - { - fillSound.KillLoop(0); - beepEvent.enabled = false; - normalizedFill = normalizedBeat; - if (game.conveyerStartBeat == -1) game.conveyerStartBeat = cond.songPositionInBeats + conveyerRestartLength; } + fillSound.KillLoop(0); + beepEvent.enabled = false; + botState = BotState.Ng; + normalizedFill = normalizedBeat; + this.conveyerStartBeat = cond.songPositionInBeats + conveyerRestartLength; + if (game.conveyerStartBeat == -1) game.conveyerStartBeat = this.conveyerStartBeat; releaseEvent.Disable(); } } @@ -302,9 +320,9 @@ namespace HeavenStudio.Games.Scripts_Fillbots BotSize.Large => "Large", _ => throw new System.NotImplementedException() }; - game.filler.DoScaledAnimationAsync("Hold" + sizeSuffix, 0.5f); SoundByte.PlayOneShotGame("fillbots/armExtension"); + if (state >= 1f || state <= -1f) { fullBody.Play("HoldBarely", 0, 0); @@ -331,7 +349,8 @@ namespace HeavenStudio.Games.Scripts_Fillbots { fillSound.KillLoop(0); beepEvent.enabled = false; - if (game.conveyerStartBeat != -2) game.conveyerStartBeat = caller.timer + caller.startBeat + conveyerRestartLength; + this.conveyerStartBeat = caller.timer + caller.startBeat + conveyerRestartLength; + if (game.conveyerStartBeat != -2) game.conveyerStartBeat = this.conveyerStartBeat; string sizeSuffix = game.fillerPosition switch { @@ -358,9 +377,16 @@ namespace HeavenStudio.Games.Scripts_Fillbots fullBody.DoScaledAnimationAsync("ReleaseEarly", 0.5f); return; } - if (state == 0) + + if ((endAnim is EndAnim.Both && state == 0) || endAnim is EndAnim.Ace) { botState = BotState.Ace; + BeatAction.New(game, new List() + { + new BeatAction.Action(caller.startBeat + caller.timer + 0.5, delegate { + fullBody.DoScaledAnimationAsync("Fly", 0.5f); + }), + }); } else { @@ -389,9 +415,9 @@ namespace HeavenStudio.Games.Scripts_Fillbots }; MultiSound.Play(new MultiSound.Sound[] { - new MultiSound.Sound("fillbots/" + sizePrefix + "Move", caller.startBeat + caller.timer + 0.5), - new MultiSound.Sound("fillbots/" + sizePrefix + "OK1", caller.startBeat + caller.timer + 0.5), - new MultiSound.Sound("fillbots/" + sizePrefix + "OK2", caller.startBeat + caller.timer + 1), + new MultiSound.Sound("fillbots/" + sizePrefix + "Move", caller.startBeat + caller.timer + (altOK ? 0 : 0.5)), + new MultiSound.Sound("fillbots/" + sizePrefix + "OK1", caller.startBeat + caller.timer + (altOK ? 0 : 0.5)), + new MultiSound.Sound("fillbots/" + sizePrefix + "OK2", caller.startBeat + caller.timer + (altOK ? 0.5 : 1)), }); }