From c18113de991a1fa7c92105426ff331c23a1a3de3 Mon Sep 17 00:00:00 2001 From: AstrlJelly Date: Tue, 5 Dec 2023 17:38:55 -0500 Subject: [PATCH] Crop Stomp Fix + Fork Lifter Animation Tweak (#588) * fork lifter weird reset thingy fixed * crop stomp code review im gonna be fixing that weird bug where inputs aren't scheduled if crop stomp is the first game (or if you start on it) but first some of the code in this is nearly two years old. it needed a lot of check-ups. * oh okay that bug was really easy to fix * convert animation playing to beat scaled playing * crop stomp fix --- .../ForkLifter/Animations/Hand_Flick.anim | 111 +++------- Assets/Scripts/Games/CropStomp/CropStomp.cs | 192 +++++++----------- Assets/Scripts/Games/CropStomp/Farmer.cs | 29 +-- Assets/Scripts/Games/CropStomp/Veggie.cs | 87 ++++---- Assets/Scripts/Games/ForkLifter/ForkLifter.cs | 11 +- 5 files changed, 152 insertions(+), 278 deletions(-) diff --git a/Assets/Resources/Sprites/Games/ForkLifter/Animations/Hand_Flick.anim b/Assets/Resources/Sprites/Games/ForkLifter/Animations/Hand_Flick.anim index e3404d1e..4cd470df 100644 --- a/Assets/Resources/Sprites/Games/ForkLifter/Animations/Hand_Flick.anim +++ b/Assets/Resources/Sprites/Games/ForkLifter/Animations/Hand_Flick.anim @@ -98,6 +98,15 @@ AnimationClip: - serializedVersion: 3 time: 0.35 value: {x: 0.017, y: 0.261, z: 74.52776} + inSlope: {x: 2.7443511, y: -2.188788, z: 0} + outSlope: {x: 2.7443511, y: -2.188788, 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.4 + value: {x: 0.1744351, y: 0.1891212, z: 74.52776} inSlope: {x: 0, y: 0, z: 0} outSlope: {x: 0, y: 0, z: 0} tangentMode: 0 @@ -192,59 +201,6 @@ AnimationClip: classID: 1 script: {fileID: 0} m_PPtrCurves: - - curve: - - time: 0 - value: {fileID: 0} - - time: 0.016666668 - value: {fileID: 0} - - time: 0.033333335 - value: {fileID: 0} - - time: 0.05 - value: {fileID: 0} - - time: 0.06666667 - value: {fileID: 0} - - time: 0.083333336 - value: {fileID: 0} - - time: 0.1 - value: {fileID: 0} - - time: 0.11666667 - value: {fileID: 0} - - time: 0.13333334 - value: {fileID: 0} - - time: 0.15 - value: {fileID: 0} - - time: 0.16666667 - value: {fileID: 0} - - time: 0.18333334 - value: {fileID: 0} - - time: 0.2 - value: {fileID: 0} - - time: 0.21666667 - value: {fileID: 0} - - time: 0.23333333 - value: {fileID: 0} - - time: 0.25 - value: {fileID: 0} - - time: 0.26666668 - value: {fileID: 0} - - time: 0.28333333 - value: {fileID: 0} - - time: 0.3 - value: {fileID: 0} - - time: 0.31666666 - value: {fileID: 0} - - time: 0.33333334 - value: {fileID: 0} - - time: 0.35 - value: {fileID: 0} - - time: 0.36666667 - value: {fileID: 0} - - time: 0.38333333 - value: {fileID: 0} - attribute: m_Sprite - path: Fork_Lifter_Gameplay - classID: 212 - script: {fileID: 0} - curve: - time: 0 value: {fileID: -4922902375269903740, guid: 52117e1d5cd298c42adfea952676c7d6, type: 3} @@ -307,13 +263,6 @@ AnimationClip: typeID: 1 customType: 0 isPPtrCurve: 0 - - serializedVersion: 2 - path: 345648135 - attribute: 0 - script: {fileID: 0} - typeID: 212 - customType: 23 - isPPtrCurve: 1 - serializedVersion: 2 path: 3267382320 attribute: 0 @@ -336,30 +285,6 @@ AnimationClip: customType: 0 isPPtrCurve: 0 pptrCurveMapping: - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - {fileID: -4922902375269903740, guid: 52117e1d5cd298c42adfea952676c7d6, type: 3} - {fileID: -3456084564025576355, guid: 52117e1d5cd298c42adfea952676c7d6, type: 3} - {fileID: -3456084564025576355, guid: 52117e1d5cd298c42adfea952676c7d6, type: 3} @@ -688,6 +613,15 @@ AnimationClip: - serializedVersion: 3 time: 0.35 value: 0.017 + inSlope: 2.7443511 + outSlope: 2.7443511 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4 + value: 0.1744351 inSlope: 0 outSlope: 0 tangentMode: 136 @@ -716,6 +650,15 @@ AnimationClip: - serializedVersion: 3 time: 0.35 value: 0.261 + inSlope: -2.188788 + outSlope: -2.188788 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4 + value: 0.1891212 inSlope: 0 outSlope: 0 tangentMode: 136 diff --git a/Assets/Scripts/Games/CropStomp/CropStomp.cs b/Assets/Scripts/Games/CropStomp/CropStomp.cs index 5295b10d..951c698f 100644 --- a/Assets/Scripts/Games/CropStomp/CropStomp.cs +++ b/Assets/Scripts/Games/CropStomp/CropStomp.cs @@ -16,13 +16,13 @@ namespace HeavenStudio.Games.Loaders { new GameAction("start marching", "Start Marching") { - function = delegate { CropStomp.instance.StartMarching(eventCaller.currentEntity.beat); }, + function = delegate { CropStomp.instance.StartMarching(eventCaller.currentEntity.beat); }, defaultLength = 2f, inactiveFunction = delegate { CropStomp.MarchInactive(eventCaller.currentEntity.beat); } }, new GameAction("veggies", "Veggies") { - defaultLength = 4f, + defaultLength = 4f, resizable = true }, new GameAction("mole", "Mole") @@ -49,7 +49,8 @@ namespace HeavenStudio.Games.Loaders new GameAction("plantCollect", "Veggie Collection Values") { function = delegate { var e = eventCaller.currentEntity; - CropStomp.instance.SetCollectThresholds(e["threshold"], e["limit"], e["force"], e["forceAmount"]); }, + CropStomp.instance.SetCollectThresholds(e["threshold"], e["limit"], e["force"], e["forceAmount"]); + }, defaultLength = 0.5f, parameters = new List() { @@ -125,43 +126,34 @@ namespace HeavenStudio.Games private void Awake() { - instance = this;// Finding grass sprite width for grass scrolling. + instance = this; // Finding grass sprite width for grass scrolling. farmer.Init(); - var grassSprite = grass.sprite; - var borderLeft = grassSprite.rect.xMin + grassSprite.border.x; - var borderRight = grassSprite.rect.xMax - grassSprite.border.z; - var borderWidthPixels = borderRight - borderLeft; - grassWidth = borderWidthPixels / grassSprite.pixelsPerUnit; + Sprite sprite = grass.sprite; + float borderLeft = sprite.rect.xMin + sprite.border.x; + float borderRight = sprite.rect.xMax - sprite.border.z; + float borderWidthPixels = borderRight - borderLeft; + grassWidth = borderWidthPixels / sprite.pixelsPerUnit; legsAnim.Play("LiftFront", 0, 1); // Start with leg up. + } - // Initialize vegetables. - var cond = Conductor.instance; - var entities = GameManager.instance.Beatmap.Entities; - - double startBeat = cond.songPositionInBeatsAsDouble; + public override void OnGameSwitch(double beat) + { + double startBeat; double endBeat = double.MaxValue; - + var entities = GameManager.instance.Beatmap.Entities; if (inactiveStart == -1f) { // Find the beat of the closest "start marching" event. - var marchStarts = entities.FindAll(m => m.datamodel == "cropStomp/start marching"); - for (int i = 0; i < marchStarts.Count; i++) - { - var sampleBeat = marchStarts[i].beat; - if (cond.songPositionInBeatsAsDouble <= sampleBeat + 0.25f) // 0.25-beat buffer in case the start marching event is directly next to the game switch event. - { - startBeat = sampleBeat; - break; - } - } + var lastMarch = entities.Find(c => c.datamodel == "cropStomp/start marching" && beat <= c.beat); + startBeat = lastMarch?.beat ?? beat; } else { // Find the beat of the next step, assuming marching started at inactiveStart. int stepsPassed = 0; - while (inactiveStart + (stepsPassed * 2f) < cond.songPositionInBeatsAsDouble) + while (inactiveStart + (stepsPassed * 2f) < beat) { stepsPassed++; @@ -175,54 +167,31 @@ namespace HeavenStudio.Games startBeat = inactiveStart + (stepsPassed * 2f); // Cue the marching proper to begin when applicable. - BeatAction.New(this, new List() - { - new BeatAction.Action(startBeat - 0.25f, delegate { StartMarching(startBeat); }) - }); + BeatAction.New(this, new() { new(startBeat - 0.25f, delegate { StartMarching(startBeat); }) }); inactiveStart = -1f; } // find out when the next game switch (or remix end) happens - var allEnds = EventCaller.GetAllInGameManagerList("gameManager", new string[] { "switchGame", "end" }); - if (allEnds.Count == 0) - { - endBeat = double.MaxValue; - } - else - { - allEnds.Sort((x, y) => x.beat.CompareTo(y.beat)); - - //get the beat of the closest end event - foreach (var end in allEnds) - { - if (end.datamodel != "gameManager/end" && end.datamodel.Split(2) == "cropStomp") continue; - if (end.beat > startBeat) - { - endBeat = end.beat; - break; - } - } - } + RiqEntity firstEnd = entities.Find(c => c.datamodel is "gameManager/switchGame/cropStomp" or "gameManager/end" && c.beat > startBeat); + endBeat = firstEnd?.beat ?? double.MaxValue; // Veggie and mole events. - var vegEvents = entities.FindAll(v => v.datamodel == "cropStomp/veggies"); - var moleEvents = entities.FindAll(m => m.datamodel == "cropStomp/mole"); + List vegEvents = entities.FindAll(v => v.datamodel == "cropStomp/veggies"); + List moleEvents = entities.FindAll(m => m.datamodel == "cropStomp/mole"); // Spawn veggies. - for (int i = 0; i < vegEvents.Count; i++) - { + for (int i = 0; i < vegEvents.Count; i++) { var vegBeat = vegEvents[i].beat; var vegLength = vegEvents[i].length; // Only consider veggie events that aren't past the start point. - if (startBeat <= vegBeat + vegLength) - { + if (startBeat <= vegBeat + vegLength) { int veggiesInEvent = Mathf.CeilToInt(vegLength + 1) / 2; for (int b = 0; b < veggiesInEvent; b++) { - var targetVeggieBeat = vegBeat + 2f * b; + var targetVeggieBeat = vegBeat + (2f * b); if (startBeat <= targetVeggieBeat && targetVeggieBeat < endBeat) { SpawnVeggie(targetVeggieBeat, startBeat, false); @@ -232,52 +201,40 @@ namespace HeavenStudio.Games } // Spawn moles. - for (int i = 0; i < moleEvents.Count; i++) - { + for (int i = 0; i < moleEvents.Count; i++) { var moleBeat = moleEvents[i].beat; - if (startBeat <= moleBeat && moleBeat < endBeat) - { + if (startBeat <= moleBeat && moleBeat < endBeat) { SpawnVeggie(moleBeat, startBeat, true); } } - } - - List cuedMoleSounds = new List(); - - public override void OnGameSwitch(double beat) - { SetInitTresholds(beat); SetMarchEndBeat(beat); } public override void OnPlay(double beat) { - SetInitTresholds(beat); - SetMarchEndBeat(beat); + OnGameSwitch(beat); } private void SetMarchEndBeat(double beat) { - double nextEndBeat = double.MaxValue; var nextEnd = EventCaller.GetAllInGameManagerList("gameManager", new string[] { "switchGame", "end" }).Find(e => e.beat > beat); - if (nextEnd != null) nextEndBeat = nextEnd.beat; + double nextEndBeat = nextEnd?.beat ?? double.MaxValue; - var allEnds = EventCaller.GetAllInGameManagerList("cropStomp", new string[] { "end" }); - var tempEnds = allEnds.FindAll(x => x.beat >= beat && x.beat < nextEndBeat); - if (tempEnds.Count == 0) return; - - marchEndBeat = tempEnds[0].beat; - willNotHum = tempEnds[0]["mute"]; + var firstEnd = GameManager.instance.Beatmap.Entities.Find(c => c.datamodel == "cropStomp/end" && c.beat >= beat && c.beat < nextEndBeat); + if (firstEnd != null) { + marchEndBeat = firstEnd.beat; + willNotHum = firstEnd["mute"]; + } } public static void MoleSound(double beat) { - MultiSound.Play(new MultiSound.Sound[] - { - new MultiSound.Sound("cropStomp/moleNyeh", beat - 2, 1, 1, false, 0.134), - new MultiSound.Sound("cropStomp/moleHeh1", beat - 1.5, 1, 1, false, 0.05), - new MultiSound.Sound("cropStomp/moleHeh2", beat - 1, 1, 1, false, 0.061) + MultiSound.Play(new MultiSound.Sound[] { + new MultiSound.Sound("cropStomp/moleNyeh", beat - 2, offset: 0.134), + new MultiSound.Sound("cropStomp/moleHeh1", beat - 1.5, offset: 0.05), + new MultiSound.Sound("cropStomp/moleHeh2", beat - 1, offset: 0.061) }, forcePlay: true); } @@ -285,11 +242,8 @@ namespace HeavenStudio.Games { var cond = Conductor.instance; - if (!cond.isPlaying) - return; + if (!cond.isPlaying || !isMarching) return; - if (!isMarching) - return; // Debug.Log(newBeat); bool cameraLocked = cond.songPositionInBeats >= marchEndBeat; @@ -308,11 +262,11 @@ namespace HeavenStudio.Games if (PlayerInput.GetIsAction(InputAction_BasicRelease) && !IsExpectingInputNow(InputAction_BasicRelease)) { - bodyAnim.Play("Raise"); + bodyAnim.DoScaledAnimationAsync("Raise", 0.5f); } if (PlayerInput.GetIsAction(InputAction_Flick) && !IsExpectingInputNow(InputAction_FlickRelease)) { - bodyAnim.Play("Pick"); + bodyAnim.DoScaledAnimationAsync("Pick", 0.5f); } if (cameraLocked) return; @@ -326,7 +280,7 @@ namespace HeavenStudio.Games var grassPos = grassTrans.localPosition; var newGrassX = grassPos.x + (scrollRate * Time.deltaTime); - newGrassX = (newGrassX % (grassWidth * 4.5f)); + newGrassX %= grassWidth * 4.5f; grassTrans.localPosition = new Vector3(newGrassX, grassPos.y, grassPos.z); @@ -334,16 +288,14 @@ namespace HeavenStudio.Games var dotsPos = dotsTrans.localPosition; var newDotsX = dotsPos.x + (scrollRate * Time.deltaTime); - newDotsX = (newDotsX % dotsWidth); + newDotsX %= dotsWidth; dotsTrans.localPosition = new Vector3(newDotsX, dotsPos.y, dotsPos.z); } private void LateUpdate() { - if (!isMarching) - return; - + if (!isMarching) return; isFlicking = false; } @@ -357,12 +309,9 @@ namespace HeavenStudio.Games private void SetInitTresholds(double beat) { - var allCollects = EventCaller.GetAllInGameManagerList("cropStomp", new string[] { "plantCollect" }); - if (allCollects.Count == 0) return; - - var tempCollect = allCollects.FindLast(x => x.beat < beat); - if (tempCollect == null) return; - SetCollectThresholds(tempCollect["threshold"], tempCollect["limit"], tempCollect["force"], tempCollect["forceAmount"]); + var lastCollect = GameManager.instance.Beatmap.Entities.FindLast(c => c.datamodel == "cropStomp/plantCollect" && c.beat < beat); + if (lastCollect == null) return; + SetCollectThresholds(lastCollect["threshold"], lastCollect["limit"], lastCollect["force"], lastCollect["forceAmount"]); } public void CollectPlant(int veggieType) @@ -379,19 +328,18 @@ namespace HeavenStudio.Games if (!isStepping) { stepCount += 1; - var stepAnim = (stepCount % 2 != 0 ? "StepFront" : "StepBack"); - legsAnim.Play(stepAnim, 0, 0); + var stepAnim = (stepCount % 2 != 0) ? "StepFront" : "StepBack"; + legsAnim.DoScaledAnimationAsync(stepAnim, 0.5f); isStepping = true; } - } // Lift. else { - var liftAnim = (stepCount % 2 != 0 ? "LiftBack" : "LiftFront"); - legsAnim.Play(liftAnim, 0, 0); + var liftAnim = (stepCount % 2 != 0) ? "LiftBack" : "LiftFront"; + legsAnim.DoScaledAnimationAsync(liftAnim, 0.5f); var farmerPos = farmerTrans.localPosition; farmerTrans.localPosition = new Vector3(farmerPos.x - stepDistance, farmerPos.y, farmerPos.z); @@ -413,27 +361,28 @@ namespace HeavenStudio.Games public void Stomp() { // Don't increment step counter if autostep stepped already. - if (!isStepping) - stepCount += 1; + if (!isStepping) stepCount += 1; - var stompAnim = (stepCount % 2 != 0 ? "StompFront" : "StompBack"); + var stompAnim = (stepCount % 2 != 0) ? "StompFront" : "StompBack"; - legsAnim.Play(stompAnim, 0, 0); + legsAnim.DoScaledAnimationAsync(stompAnim, 0.5f); SoundByte.PlayOneShotGame("cropStomp/stomp"); - if (shakeTween != null) - shakeTween.Kill(true); + if (shakeTween != null) shakeTween.Kill(true); - DOTween.Punch(() => GameCamera.AdditionalPosition, x => GameCamera.AdditionalPosition = x, new Vector3(0, 0.75f, 0), - Conductor.instance.pitchedSecPerBeat*0.5f, 18, 1f); + DOTween.Punch(() => + GameCamera.AdditionalPosition, + x => GameCamera.AdditionalPosition = x, + new Vector3(0, 0.75f, 0), Conductor.instance.pitchedSecPerBeat * 0.5f, 18, 1f + ); isStepping = true; } private void SpawnVeggie(double beat, double startBeat, bool isMole) { - var newVeggie = GameObject.Instantiate(isMole ? baseMole : baseVeggie, veggieHolder).GetComponent(); + var newVeggie = Instantiate(isMole ? baseMole : baseVeggie, veggieHolder).GetComponent(); newVeggie.targetBeat = beat; @@ -445,21 +394,16 @@ namespace HeavenStudio.Games public static void MarchInactive(double beat) { - if (GameManager.instance.currentGame == "cropStomp") //this function is only meant for making march sounds while the game is inactive - { - return; - } + if (GameManager.instance.currentGame == "cropStomp") return; inactiveStart = beat; RiqEntity gameSwitch = GameManager.instance.Beatmap.Entities.Find(c => c.beat >= beat && c.datamodel == "gameManager/switchGame/cropStomp"); - if (gameSwitch == null) - return; - int length = (int)Math.Ceiling((gameSwitch.beat - beat)/2); + if (gameSwitch == null) return; + int length = (int)Math.Ceiling((gameSwitch.beat - beat) / 2); MultiSound.Sound[] sounds = new MultiSound.Sound[length]; - for(int i = 0; i < length; i++) - { - sounds[i] = new MultiSound.Sound("cropStomp/hmm", beat + i*2); + for(int i = 0; i < length; i++) { + sounds[i] = new MultiSound.Sound("cropStomp/hmm", beat + (i * 2)); } - MultiSound.Play(sounds, forcePlay:true); + MultiSound.Play(sounds, forcePlay: true); } } } diff --git a/Assets/Scripts/Games/CropStomp/Farmer.cs b/Assets/Scripts/Games/CropStomp/Farmer.cs index cc2b33ca..4016cb5d 100644 --- a/Assets/Scripts/Games/CropStomp/Farmer.cs +++ b/Assets/Scripts/Games/CropStomp/Farmer.cs @@ -70,7 +70,7 @@ namespace HeavenStudio.Games.Scripts_CropStomp if (PlayerInput.GetIsAction(CropStomp.InputAction_BasicPress) && !game.IsExpectingInputNow(CropStomp.InputAction_BasicPress)) { - game.bodyAnim.Play("Crouch", 0, 0); + game.bodyAnim.DoScaledAnimationAsync("Crouch", 0.5f); } } @@ -87,8 +87,7 @@ namespace HeavenStudio.Games.Scripts_CropStomp startPlant.SetActive(collectedPlants >= plantThreshold); if (spawnedPlants.Count > 0) { - foreach (var plant in spawnedPlants) - { + foreach (var plant in spawnedPlants) { Destroy(plant); } spawnedPlants.Clear(); @@ -102,8 +101,9 @@ namespace HeavenStudio.Games.Scripts_CropStomp { spawnedPlant = Instantiate(plantLastRef, collectedHolder); spawnedPlant.GetComponent().sprite = veggieSprites[lastVeggieType]; + } else { + spawnedPlant = Instantiate((realIndex % 2 == 0) ? plantRightRef : plantLeftRef, collectedHolder); } - else spawnedPlant = Instantiate((realIndex % 2 == 0) ? plantRightRef : plantLeftRef, collectedHolder); spawnedPlant.transform.localPosition = new Vector3(0, (realIndex * plantDistance) + plantStartDistance, 0); spawnedPlant.GetComponent().sortingOrder = -realIndex - 2; spawnedPlant.SetActive(true); @@ -119,9 +119,8 @@ namespace HeavenStudio.Games.Scripts_CropStomp private void Miss(PlayerActionEvent caller) { - if (GameManager.instance.currentGame != "cropStomp") return; - if (!game.isMarching) - return; + if (GameManager.instance.currentGame != "cropStomp" || !game.isMarching) return; + // REMARK: does not count for performance nextStompBeat += 2f; stomp?.Disable(); @@ -133,18 +132,12 @@ namespace HeavenStudio.Games.Scripts_CropStomp void Stomp(bool ng) { - if (GameManager.instance.currentGame != "cropStomp") return; - if (!game.isMarching) - return; - if (ng) - { - game.bodyAnim.Play("Crouch", 0, 0); - } - else - { + if (GameManager.instance.currentGame != "cropStomp" || !game.isMarching) return; + if (ng) { + game.bodyAnim.DoScaledAnimationAsync("Crouch", 0.5f); + } else { game.Stomp(); - game.bodyAnim.Play("Stomp", 0, 0); - + game.bodyAnim.DoScaledAnimationAsync("Stomp", 0.5f); } nextStompBeat += 2f; stomp?.Disable(); diff --git a/Assets/Scripts/Games/CropStomp/Veggie.cs b/Assets/Scripts/Games/CropStomp/Veggie.cs index 56d6a478..69558981 100644 --- a/Assets/Scripts/Games/CropStomp/Veggie.cs +++ b/Assets/Scripts/Games/CropStomp/Veggie.cs @@ -39,7 +39,7 @@ namespace HeavenStudio.Games.Scripts_CropStomp { game = CropStomp.instance; - if (Conductor.instance.isPlaying) + // if (Conductor.instance.isPlaying) game.ScheduleInput(targetBeat - 1, 1f, CropStomp.InputAction_BasicPress, StompJust, StompMiss, Out); if (!isMole) @@ -56,38 +56,23 @@ namespace HeavenStudio.Games.Scripts_CropStomp private bool gotStomped; // Safeguard in case nested Update() call breaks. private void Update() { - if (!game.isMarching) - return; + if (!game.isMarching) return; - // Veggie missed. Handle missed state. - if (veggieState == -1) + switch (veggieState) { - MissedUpdate(); - return; - } + case -1: MissedUpdate(); return; + // case 0: + case 2: PickedUpdate(); return; + case 1: + float airPosition = Conductor.instance.GetPositionFromBeat(stompedBeat, landBeat - stompedBeat); + veggieTrans.position = curve.GetPoint(Mathf.Clamp(airPosition, 0, 1)); - // Veggie picked. Handle picked state. - if (veggieState == 2) - { - PickedUpdate(); - return; - } - - var cond = Conductor.instance; - // In ground. - if (veggieState == 0) - { - } - // In air. - else if (veggieState == 1) - { - float airPosition = cond.GetPositionFromBeat(stompedBeat, landBeat - stompedBeat); - veggieTrans.position = curve.GetPoint(Mathf.Clamp(airPosition, 0, 1)); - - if (PlayerInput.GetIsAction(CropStomp.InputAction_FlickRelease) && !game.IsExpectingInputNow(CropStomp.InputAction_FlickRelease)) - { - pickEligible = false; - } + if (PlayerInput.GetIsAction(CropStomp.InputAction_FlickRelease) && !game.IsExpectingInputNow(CropStomp.InputAction_FlickRelease)) + { + pickEligible = false; + } + break; + // default: } } @@ -105,17 +90,17 @@ namespace HeavenStudio.Games.Scripts_CropStomp StompVeggie(false); } - private void StompMiss(PlayerActionEvent caller) + private void StompMiss(PlayerActionEvent caller) { veggieState = -1; caller.Disable(); } - private void Out(PlayerActionEvent caller) {} + private void Out(PlayerActionEvent caller) { } private void PickJust(PlayerActionEvent caller, float state) { - game.bodyAnim.Play("Pick", 0, 0); + game.bodyAnim.DoScaledAnimationAsync("Pick", 0.5f); game.isFlicking = true; if (!pickEligible) return; if (GameManager.instance.autoplay) @@ -131,13 +116,20 @@ namespace HeavenStudio.Games.Scripts_CropStomp curve.transform.localScale = Vector3.one; // Return curve to normal size in the case of mole curves. - var key1 = curve.KeyPoints[0]; - var key1Pos = key1.Position; - key1.Position = new Vector3(key1Pos.x, veggieTrans.position.y, key1Pos.z); + for (int i = 0; i < 2; i++) + { + var key = curve.KeyPoints[i]; + var keyPos = key.Position; + key.Position = new Vector3(keyPos.x, veggieTrans.position.y + (i * 2), keyPos.z); + } - var key2 = curve.KeyPoints[1]; - var key2Pos = key2.Position; - key2.Position = new Vector3(key2Pos.x, veggieTrans.position.y + 2f, key2Pos.z); + // var key1 = curve.KeyPoints[0]; + // var key1Pos = key1.Position; + // key1.Position = new Vector3(key1Pos.x, veggieTrans.position.y, key1Pos.z); + + // var key2 = curve.KeyPoints[1]; + // var key2Pos = key2.Position; + // key2.Position = new Vector3(key2Pos.x, veggieTrans.position.y + 2f, key2Pos.z); pickedBeat = Conductor.instance.songPositionInBeatsAsDouble; @@ -154,9 +146,8 @@ namespace HeavenStudio.Games.Scripts_CropStomp private void PickMiss(PlayerActionEvent caller) { veggieState = -1; - - if (!isMole) - SoundByte.PlayOneShotGame("cropStomp/veggieMiss"); + + if (!isMole) SoundByte.PlayOneShotGame("cropStomp/veggieMiss"); caller.Disable(); } @@ -186,7 +177,7 @@ namespace HeavenStudio.Games.Scripts_CropStomp var distDiff = transform.position.x - game.farmerTrans.position.x; if (distDiff > 1.5f) { - moleAnim.Play("Chuckle", 0, 0); + moleAnim.DoScaledAnimationAsync("Chuckle", 0.5f); moleLaughing = true; } } @@ -223,6 +214,8 @@ namespace HeavenStudio.Games.Scripts_CropStomp } gotStomped = true; + Debug.Log("Stomped!"); + var cond = Conductor.instance; ParticleSystem spawnedHit = Instantiate(game.hitParticle, game.hitParticle.transform.parent); @@ -235,12 +228,12 @@ namespace HeavenStudio.Games.Scripts_CropStomp stompedBeat = cond.songPositionInBeatsAsDouble; - landBeat = targetBeat + (float)cond.SecsToBeats(Minigame.NgLateTime()-1, cond.GetBpmAtBeat(targetBeat)); + landBeat = targetBeat + (float)cond.SecsToBeats(Minigame.NgLateTime() - 1, cond.GetBpmAtBeat(targetBeat)); if (autoTriggered) { game.Stomp(); - game.bodyAnim.Play("Stomp", 0, 0); + game.bodyAnim.DoScaledAnimationAsync("Stomp", 0.5f); } if (!isMole) @@ -251,7 +244,7 @@ namespace HeavenStudio.Games.Scripts_CropStomp } else { - moleAnim.Play("Idle", 0, 0); + moleAnim.DoScaledAnimationAsync("Idle", 0.5f); } var veggieScale = veggieTrans.localScale; @@ -267,7 +260,7 @@ namespace HeavenStudio.Games.Scripts_CropStomp if (autoTriggered) { - game.bodyAnim.Play("Pick", 0, 0); + game.bodyAnim.DoScaledAnimationAsync("Pick", 0.5f); game.isFlicking = true; } diff --git a/Assets/Scripts/Games/ForkLifter/ForkLifter.cs b/Assets/Scripts/Games/ForkLifter/ForkLifter.cs index 0c6519ac..6787de94 100644 --- a/Assets/Scripts/Games/ForkLifter/ForkLifter.cs +++ b/Assets/Scripts/Games/ForkLifter/ForkLifter.cs @@ -124,6 +124,12 @@ namespace HeavenStudio.Games BackgroundColorUpdate(); } + public override void OnPlay(double beat) + { + base.OnPlay(beat); + OnGameSwitch(beat); + } + public override void OnGameSwitch(double beat) { base.OnGameSwitch(beat); @@ -247,10 +253,5 @@ namespace HeavenStudio.Games BackgroundColorGrad(lastEventGrad.beat, lastEventGrad.length, lastEventGrad["start"], lastEventGrad["end"], lastEventGrad["ease"]); } } - - public override void OnPlay(double beat) - { - PersistColor(beat); - } } } \ No newline at end of file