diff --git a/Assets/Scripts/Games/MonkeyWatch/MonkeyClockArrow.cs b/Assets/Scripts/Games/MonkeyWatch/MonkeyClockArrow.cs index a16e1cb10..9ef8fd2a8 100644 --- a/Assets/Scripts/Games/MonkeyWatch/MonkeyClockArrow.cs +++ b/Assets/Scripts/Games/MonkeyWatch/MonkeyClockArrow.cs @@ -29,7 +29,7 @@ namespace HeavenStudio.Games.Scripts_MonkeyWatch private void Update() { - if (PlayerInput.Pressed() && !game.IsExpectingInputNow(InputType.STANDARD_DOWN)) + if (PlayerInput.GetIsAction(MonkeyWatch.InputAction_BasicPress) && !game.IsExpectingInputNow(MonkeyWatch.InputAction_BasicPress)) { PlayerClap(false, false, true); } @@ -89,13 +89,13 @@ namespace HeavenStudio.Games.Scripts_MonkeyWatch public void PlayerClap(bool big, bool barely, bool whiff) { - if (playerMonkeyAnim.IsPlayingAnimationName("PlayerClapBarely") && whiff) return; - if (whiff) + if (playerMonkeyAnim.IsPlayingAnimationNames("PlayerClapBarely") && whiff) return; + if (whiff) { game.middleMonkey.DoScaledAnimationAsync("MiddleMonkeyMiss", 0.4f); SoundByte.PlayOneShot("miss"); - } - if (barely || whiff) + } + if (barely || whiff) { playerMonkeyAnim.DoScaledAnimationAsync("PlayerClapBarely", 0.4f); } diff --git a/Assets/Scripts/Games/MonkeyWatch/MonkeyWatch.cs b/Assets/Scripts/Games/MonkeyWatch/MonkeyWatch.cs index f92def5a5..eecee36a1 100644 --- a/Assets/Scripts/Games/MonkeyWatch/MonkeyWatch.cs +++ b/Assets/Scripts/Games/MonkeyWatch/MonkeyWatch.cs @@ -15,7 +15,7 @@ namespace HeavenStudio.Games.Loaders { new GameAction("appear", "Monkeys Appear") { - function = delegate + function = delegate { var e = eventCaller.currentEntity; MonkeyWatch.instance.MonkeysAppear(e.beat, e.length, e["value"], e.beat); @@ -29,7 +29,7 @@ namespace HeavenStudio.Games.Loaders }, new GameAction("clap", "Clapping") { - preFunction = delegate + preFunction = delegate { MonkeyWatch.PreStartClapping(eventCaller.currentEntity.beat); }, @@ -37,7 +37,7 @@ namespace HeavenStudio.Games.Loaders defaultLength = 2f, parameters = new List() { - new Param("min", new EntityTypes.Integer(0, 59, 0), "Set Starting Second", "1 second is equivalent to 1 monkey.") + new Param("min", new EntityTypes.Integer(0, 59, 0), "Set Starting Second", "A second is equivalent to one monkey.") } }, new GameAction("off", "Pink Monkeys") @@ -99,7 +99,7 @@ namespace HeavenStudio.Games.Loaders parameters = new List() { new Param("instant", false, "Instant"), - new Param("timeMode", MonkeyWatch.TimeMode.RealTime, "Time Mode", "Will the clock set the time to the current time or a certain time?"), + new Param("timeMode", MonkeyWatch.TimeMode.RealTime, "Time Mode", "Set the clock to system time or a certain time"), new Param("hour", new EntityTypes.Integer(0, 12, 3), "Hour"), new Param("minute", new EntityTypes.Integer(0, 59, 0), "Minute") } @@ -115,7 +115,7 @@ namespace HeavenStudio.Games.Loaders parameters = new List() { new Param("instant", false, "Instant"), - new Param("timeMode", MonkeyWatch.TimeMode.RealTime, "Time Mode", "Will the clock set the time to the current time or a certain time?"), + new Param("timeMode", MonkeyWatch.TimeMode.RealTime, "Time Mode", "Set the clock to system time or a certain time"), new Param("hour", new EntityTypes.Integer(0, 12, 3), "Hour"), new Param("minute", new EntityTypes.Integer(0, 59, 0), "Minute") } @@ -174,13 +174,8 @@ namespace HeavenStudio.Games [SerializeField] private Util.EasingFunction.Ease zoomInEase; private float lastAngle = 0f; private int cameraIndex = 0; - private struct MonkeyCamera - { - public float degreeTo; - public float length; - public double beat; - } - private List cameraMovements = new(); + private float cameraWantAngle, cameraAngleDelay; + private float delayRate = 0.5f, targetDelayRate; private void Awake() { @@ -189,6 +184,10 @@ namespace HeavenStudio.Games funcIn = Util.EasingFunction.GetEasingFunction(zoomInEase); pinkMonkeys = EventCaller.GetAllInGameManagerList("monkeyWatch", new string[] { "off", "offStretch" }); pinkMonkeysCustom = EventCaller.GetAllInGameManagerList("monkeyWatch", new string[] { "offInterval" }); + } + + private void Start() + { CameraUpdate(); } @@ -197,10 +196,11 @@ namespace HeavenStudio.Games private void Update() { CameraUpdate(); - if (Conductor.instance.ReportBeat(ref lastReportedBeat)) - { - middleMonkey.DoScaledAnimationAsync("MiddleMonkeyBop", 0.4f); - } + } + + public override void OnBeatPulse(double beat) + { + middleMonkey.DoScaledAnimationAsync("MiddleMonkeyBop", 0.4f); } public void PlayerMonkeyClap(bool big, bool barely) @@ -291,7 +291,7 @@ namespace HeavenStudio.Games int index = 0; while (index < repeatAmount) { - + if (IsPinkMonkeyAtBeat(lastBeat, out float pinkLength)) { for (int i = 0; i < pinkLength; i++) @@ -336,7 +336,6 @@ namespace HeavenStudio.Games index++; lastBeat += 2; } - Debug.Log(index); } actions.Sort((x, y) => x.beat.CompareTo(y.beat)); @@ -410,6 +409,7 @@ namespace HeavenStudio.Games { monkeyHandler.SpawnMonkey(beat, false, beat - 4 < persistBeat); ClapRecursing(beat + 2); + cameraWantAngle += degreePerMonkey; }), new BeatAction.Action(beat - 1, delegate { @@ -431,11 +431,12 @@ namespace HeavenStudio.Games for (int i = 0; i < length; i++) { int index = i; - actions.AddRange(new List() + actions.AddRange(new List() { new BeatAction.Action(beat + i - 4, delegate { monkeyHandler.SpawnMonkey(beat + index, true, beat + index - 4 < persistBeat); + cameraWantAngle += degreePerMonkey; }), new BeatAction.Action(beat + i - 1, delegate { @@ -468,6 +469,7 @@ namespace HeavenStudio.Games new BeatAction.Action(e.beat - 4, delegate { monkeyHandler.SpawnMonkey(e.beat, true, e.beat - 4 < persistBeat); + cameraWantAngle += degreePerMonkey; }), new BeatAction.Action(e.beat - 1.5, delegate { @@ -520,6 +522,8 @@ namespace HeavenStudio.Games clappingEvents.Sort((x, y) => x.beat.CompareTo(y.beat)); startClappingBeat = clappingEvents[0].beat; startAngle = clappingEvents[0]["min"] * degreePerMonkey; + cameraWantAngle = startAngle; + cameraAngleDelay = startAngle; overrideStartBeat = false; } lastAngle = startAngle; @@ -555,20 +559,8 @@ namespace HeavenStudio.Games if (e.beat - lastClappingBeat > 0) { - cameraMovements.Add(new MonkeyCamera() - { - beat = lastClappingBeat, - length = (float)(e.beat - lastClappingBeat), - degreeTo = lastAngleToCheck + (float)((e.beat - lastClappingBeat) / 2) * degreePerMonkey + (angleToAdd / 2) - }); lastAngleToCheck += (float)((e.beat - lastClappingBeat) / 2) * degreePerMonkey; } - cameraMovements.Add(new MonkeyCamera() - { - beat = e.beat, - length = e.length, - degreeTo = lastAngleToCheck + angleToAdd - }); lastAngleToCheck += angleToAdd; lastClappingBeat = e.beat + e.length; @@ -576,33 +568,16 @@ namespace HeavenStudio.Games startClappingBeat = lastClappingBeat; startAngle = lastAngleToCheck; } - - if (clappingEvents.Count > 0 || pinkClappingEvents.Count > 0) - { - cameraMovements.Add(new MonkeyCamera - { - beat = startClappingBeat, - degreeTo = startAngle + degreePerMonkey, - length = 2 - }); - } - - - Debug.Log("Camera Movements Count: " + cameraMovements.Count); - foreach (var cameraMovement in cameraMovements) - { - Debug.Log("Beat: " + cameraMovement.beat + ", Length: " + cameraMovement.length + " , DegreeTo: " + cameraMovement.degreeTo); - } } private void UpdateCamera() { - lastAngle = cameraMovements[cameraIndex].degreeTo; - cameraIndex++; - if (cameraIndex + 1 < cameraMovements.Count && Conductor.instance.songPositionInBeats >= cameraMovements[cameraIndex].beat + cameraMovements[cameraIndex].length) - { - UpdateCamera(); - } + // lastAngle = cameraMovements[cameraIndex].degreeTo; + // cameraIndex++; + // if (cameraIndex + 1 < cameraMovements.Count && conductor.songPositionInBeats >= cameraMovements[cameraIndex].beat + cameraMovements[cameraIndex].length) + // { + // UpdateCamera(); + // } } private double zoomOutStartBeat = -2; @@ -612,31 +587,21 @@ namespace HeavenStudio.Games private void CameraUpdate() { - var cond = Conductor.instance; - if (cond.isPlaying && !cond.isPaused && cameraMovements.Count > 0) + if (conductor.isPlaying && !conductor.isPaused) { - if (cameraIndex + 1 < cameraMovements.Count && cond.songPositionInBeats >= cameraMovements[cameraIndex].beat + cameraMovements[cameraIndex].length) + float degreesBehind = cameraWantAngle - 2 * degreePerMonkey; + float degreesBehindFast = cameraWantAngle - 3f * degreePerMonkey; + targetDelayRate = Mathf.Max((cameraAngleDelay - degreesBehindFast) / (degreesBehindFast - cameraWantAngle), 0) + 0.5f; + delayRate = Mathf.Lerp(delayRate, targetDelayRate, Time.deltaTime * (1f / conductor.pitchedSecPerBeat) * 0.5f); + if (cameraAngleDelay < degreesBehind) { - UpdateCamera(); + cameraAngleDelay += degreePerMonkey * Time.deltaTime * (1f / conductor.pitchedSecPerBeat) * delayRate; + cameraAngleDelay = Mathf.Min(cameraAngleDelay, cameraWantAngle); } - - float normalizedBeat = cond.GetPositionFromBeat(cameraMovements[cameraIndex].beat, cameraMovements[cameraIndex].length); - - float newAngle; - - if (normalizedBeat < 0) - { - newAngle = lastAngle; - } - else - { - newAngle = Mathf.LerpUnclamped(lastAngle, cameraMovements[cameraIndex].degreeTo, normalizedBeat); - } - - cameraAnchor.localEulerAngles = new Vector3(0, 0, newAngle); + cameraAnchor.localEulerAngles = new Vector3(0, 0, cameraAngleDelay); } - float normalizedZoomBeat = cond.GetPositionFromBeat(zoomOutStartBeat, zoomIn ? zoomInBeatLength : zoomOutBeatLength); + float normalizedZoomBeat = conductor.GetPositionFromBeat(zoomOutStartBeat, zoomIn ? zoomInBeatLength : zoomOutBeatLength); float newX = 0f; float newY = 0f; float newZ = 0f; diff --git a/Assets/Scripts/Games/MonkeyWatch/WatchMonkey.cs b/Assets/Scripts/Games/MonkeyWatch/WatchMonkey.cs index 3325cb994..40abfcc89 100644 --- a/Assets/Scripts/Games/MonkeyWatch/WatchMonkey.cs +++ b/Assets/Scripts/Games/MonkeyWatch/WatchMonkey.cs @@ -63,8 +63,8 @@ namespace HeavenStudio.Games.Scripts_MonkeyWatch public void Prepare(double prepareBeat, double inputBeat) { anim.DoScaledAnimationAsync(isPink ? "PinkPrepare" + direction : "Prepare" + direction, 0); - inputEvent = game.ScheduleInput(prepareBeat, inputBeat - prepareBeat, InputType.STANDARD_DOWN, Just, Miss, Empty); - BeatAction.New(this, new List() + inputEvent = game.ScheduleInput(prepareBeat, inputBeat - prepareBeat, MonkeyWatch.InputAction_BasicPress, Just, Miss, Empty); + BeatAction.New(this, new List() { new BeatAction.Action(prepareBeat - 0.25, delegate { @@ -86,7 +86,7 @@ namespace HeavenStudio.Games.Scripts_MonkeyWatch } game.monkeyClockArrow.Move(); game.PlayerMonkeyClap(isPink, barely); - + anim.DoScaledAnimationAsync(isPink ? "PinkClap" + direction : "Clap" + direction, 0.4f); BeatAction.New(this, new List() { @@ -104,7 +104,7 @@ namespace HeavenStudio.Games.Scripts_MonkeyWatch game.monkeyClockArrow.Move(); } - private void Empty(PlayerActionEvent caller) + private void Empty(PlayerActionEvent caller) { } diff --git a/Assets/Scripts/USG.g/LoadMinigames.Minigames.MinigameLoaderGenerator.g.cs b/Assets/Scripts/USG.g/LoadMinigames.Minigames.MinigameLoaderGenerator.g.cs index 34ccb468f..f577666f6 100644 --- a/Assets/Scripts/USG.g/LoadMinigames.Minigames.MinigameLoaderGenerator.g.cs +++ b/Assets/Scripts/USG.g/LoadMinigames.Minigames.MinigameLoaderGenerator.g.cs @@ -288,6 +288,17 @@ namespace HeavenStudio Debug.LogWarning("Game loader PcoMeatLoader failed!"); } + Debug.Log("Running game loader RvlMonkeyWatchLoader"); + game = RvlMonkeyWatchLoader.AddGame(eventCaller); + if (game != null) + { + eventCaller.minigames.Add(game.name, game); + } + else + { + Debug.LogWarning("Game loader RvlMonkeyWatchLoader failed!"); + } + Debug.Log("Running game loader AgbUpbeatLoader"); game = AgbUpbeatLoader.AddGame(eventCaller); if (game != null) diff --git a/ProjectSettings/SatorImaging.UnitySourceGenerator.Editor.ProjectSettingsData.asset b/ProjectSettings/SatorImaging.UnitySourceGenerator.Editor.ProjectSettingsData.asset index cd74f76fe..6ff1128d9 100644 --- a/ProjectSettings/SatorImaging.UnitySourceGenerator.Editor.ProjectSettingsData.asset +++ b/ProjectSettings/SatorImaging.UnitySourceGenerator.Editor.ProjectSettingsData.asset @@ -281,5 +281,11 @@ MonoBehaviour: - Assets/Scripts/Games/Fireworks/Fireworks.cs - Assets/Scripts/Games/FlipperFlop/FlipperFlop.cs - Assets/Scripts/Games/WizardsWaltz/Wizard.cs + - Assets/Scripts/Games/MonkeyWatch/MonkeyWatch.cs + - Assets/Scripts/Games/MonkeyWatch/WatchMonkeyHandler.cs + - Assets/Scripts/Games/MonkeyWatch/WatchBackgroundHandler.cs + - Assets/Scripts/Games/MonkeyWatch/MonkeyClockArrow.cs + - Assets/Scripts/Games/MonkeyWatch/BalloonHandler.cs + - Assets/Scripts/Games/MonkeyWatch/WatchMonkey.cs PathsToSkipImportEvent: [] PathsToIgnoreOverwriteSettingOnAttribute: []