From 2abfaf87bbc12241134b47bee4ecd5a4f5d9a6c0 Mon Sep 17 00:00:00 2001
From: Rapandrasmus <78219215+Rapandrasmus@users.noreply.github.com>
Date: Tue, 5 Dec 2023 23:38:52 +0100
Subject: [PATCH] Auto Bop Internal Rework + Bug Fixes (#589)
* fixed blue bear
* fixed tap trial bug
* see saw fix
* Auto bop rework
---
.../BlueBear/Animations/Flashback0Exit.anim | 38 +--
.../Animation/Guy/Jump_OutOut_Fall.anim | 268 +++++++++---------
Assets/Scripts/Conductor.cs | 4 +-
Assets/Scripts/Games/BlueBear/BlueBear.cs | 24 +-
Assets/Scripts/Games/BlueBear/Treat.cs | 2 +-
.../Games/BoardMeeting/BoardMeeting.cs | 6 +-
Assets/Scripts/Games/CatchyTune/CatchyTune.cs | 18 +-
.../Games/CheerReaders/CheerReaders.cs | 6 +-
Assets/Scripts/Games/DJSchool/DJSchool.cs | 7 +-
Assets/Scripts/Games/DJSchool/Student.cs | 4 +-
Assets/Scripts/Games/DogNinja/DogNinja.cs | 6 +-
Assets/Scripts/Games/DoubleDate/DoubleDate.cs | 6 +-
.../DrummingPractice/DrummingPractice.cs | 9 +-
Assets/Scripts/Games/FanClub/FanClub.cs | 10 +-
Assets/Scripts/Games/KarateMan/KarateMan.cs | 5 +-
.../Scripts/Games/MeatGrinder/MeatGrinder.cs | 6 +-
Assets/Scripts/Games/Minigame.cs | 77 +++++
Assets/Scripts/Games/MunchyMonk/MunchyMonk.cs | 30 +-
.../Games/OctopusMachine/OctopusMachine.cs | 5 +-
.../Scripts/Games/RhythmRally/RhythmRally.cs | 6 +-
.../Scripts/Games/RhythmSomen/RhythmSomen.cs | 7 +-
Assets/Scripts/Games/Ringside/Ringside.cs | 7 +-
.../Games/SamuraiSliceNtr/SamuraiSliceNtr.cs | 15 +-
Assets/Scripts/Games/SeeSaw/SeeSawGuy.cs | 25 ++
Assets/Scripts/Games/SpaceDance/SpaceDance.cs | 5 +-
Assets/Scripts/Games/TapTrial/TapTrial.cs | 10 +-
Assets/Scripts/Games/TheDazzles/TheDazzles.cs | 6 +-
Assets/Scripts/Games/TossBoys/TossBoys.cs | 6 +-
Assets/Scripts/Games/TrickClass/TrickClass.cs | 3 +-
29 files changed, 353 insertions(+), 268 deletions(-)
diff --git a/Assets/Resources/Sprites/Games/BlueBear/Animations/Flashback0Exit.anim b/Assets/Resources/Sprites/Games/BlueBear/Animations/Flashback0Exit.anim
index 8f7c9271..9d5e6701 100644
--- a/Assets/Resources/Sprites/Games/BlueBear/Animations/Flashback0Exit.anim
+++ b/Assets/Resources/Sprites/Games/BlueBear/Animations/Flashback0Exit.anim
@@ -20,17 +20,17 @@ AnimationClip:
m_Curve:
- serializedVersion: 3
time: 0
- value: {x: 1.258, y: 0.542, z: 0}
- inSlope: {x: -1.4679999, y: -0, z: -0}
- outSlope: {x: 0, y: 0.17200005, z: 0}
+ value: {x: 1.4, y: 0.68, z: 0}
+ inSlope: {x: -1.184, y: -0, z: -0}
+ outSlope: {x: 0, y: 0, 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.5
- value: {x: 1.258, y: 0.628, z: 0}
- inSlope: {x: -0, y: 0.17200005, z: -0}
+ value: {x: 1.4, y: 0.89, z: 0}
+ inSlope: {x: -0, y: 0.41999996, z: -0}
outSlope: {x: 0, y: 0, z: 0}
tangentMode: 0
weightedMode: 0
@@ -49,8 +49,8 @@ AnimationClip:
time: 0
value: 1
inSlope: 2
- outSlope: -2
- tangentMode: 69
+ outSlope: 0
+ tangentMode: 5
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
@@ -134,16 +134,16 @@ AnimationClip:
m_Curve:
- serializedVersion: 3
time: 0
- value: 1.258
- inSlope: -1.4679999
+ value: 1.4
+ inSlope: -1.184
outSlope: 0
- tangentMode: 69
+ tangentMode: 5
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
- serializedVersion: 3
time: 0.5
- value: 1.258
+ value: 1.4
inSlope: -0
outSlope: 0
tangentMode: 69
@@ -162,17 +162,17 @@ AnimationClip:
m_Curve:
- serializedVersion: 3
time: 0
- value: 0.542
+ value: 0.68
inSlope: -0
- outSlope: 0.17200005
- tangentMode: 69
+ outSlope: 0
+ tangentMode: 5
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
- serializedVersion: 3
time: 0.5
- value: 0.628
- inSlope: 0.17200005
+ value: 0.89
+ inSlope: 0.41999996
outSlope: 0
tangentMode: 69
weightedMode: 0
@@ -193,7 +193,7 @@ AnimationClip:
value: 0
inSlope: -0
outSlope: 0
- tangentMode: 69
+ tangentMode: 5
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
@@ -220,8 +220,8 @@ AnimationClip:
time: 0
value: 1
inSlope: 2
- outSlope: -2
- tangentMode: 69
+ outSlope: 0
+ tangentMode: 5
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
diff --git a/Assets/Resources/Sprites/Games/SeeSaw/Animation/Guy/Jump_OutOut_Fall.anim b/Assets/Resources/Sprites/Games/SeeSaw/Animation/Guy/Jump_OutOut_Fall.anim
index 5eee94c7..3fef7a2f 100644
--- a/Assets/Resources/Sprites/Games/SeeSaw/Animation/Guy/Jump_OutOut_Fall.anim
+++ b/Assets/Resources/Sprites/Games/SeeSaw/Animation/Guy/Jump_OutOut_Fall.anim
@@ -6701,7 +6701,7 @@ AnimationClip:
m_PostInfinity: 2
m_RotationOrder: 4
attribute: m_LocalEulerAngles.z
- path: HandL
+ path: FootR
classID: 4
script: {fileID: 0}
- curve:
@@ -6711,7 +6711,7 @@ AnimationClip:
m_PostInfinity: 2
m_RotationOrder: 4
attribute: m_LocalEulerAngles.y
- path: HandL
+ path: FootR
classID: 4
script: {fileID: 0}
- curve:
@@ -6721,7 +6721,37 @@ AnimationClip:
m_PostInfinity: 2
m_RotationOrder: 4
attribute: m_LocalEulerAngles.x
- path: HandL
+ path: FootR
+ classID: 4
+ script: {fileID: 0}
+ - curve:
+ serializedVersion: 2
+ m_Curve: []
+ m_PreInfinity: 2
+ m_PostInfinity: 2
+ m_RotationOrder: 4
+ attribute: m_LocalEulerAngles.z
+ path: LegLowR
+ classID: 4
+ script: {fileID: 0}
+ - curve:
+ serializedVersion: 2
+ m_Curve: []
+ m_PreInfinity: 2
+ m_PostInfinity: 2
+ m_RotationOrder: 4
+ attribute: m_LocalEulerAngles.y
+ path: LegLowR
+ classID: 4
+ script: {fileID: 0}
+ - curve:
+ serializedVersion: 2
+ m_Curve: []
+ m_PreInfinity: 2
+ m_PostInfinity: 2
+ m_RotationOrder: 4
+ attribute: m_LocalEulerAngles.x
+ path: LegLowR
classID: 4
script: {fileID: 0}
- curve:
@@ -6761,7 +6791,7 @@ AnimationClip:
m_PostInfinity: 2
m_RotationOrder: 4
attribute: m_LocalEulerAngles.z
- path: LegUpR
+ path: LegLowL
classID: 4
script: {fileID: 0}
- curve:
@@ -6771,7 +6801,7 @@ AnimationClip:
m_PostInfinity: 2
m_RotationOrder: 4
attribute: m_LocalEulerAngles.y
- path: LegUpR
+ path: LegLowL
classID: 4
script: {fileID: 0}
- curve:
@@ -6781,7 +6811,7 @@ AnimationClip:
m_PostInfinity: 2
m_RotationOrder: 4
attribute: m_LocalEulerAngles.x
- path: LegUpR
+ path: LegLowL
classID: 4
script: {fileID: 0}
- curve:
@@ -6911,7 +6941,7 @@ AnimationClip:
m_PostInfinity: 2
m_RotationOrder: 4
attribute: m_LocalEulerAngles.z
- path: EyeL
+ path: EyeR
classID: 4
script: {fileID: 0}
- curve:
@@ -6921,7 +6951,7 @@ AnimationClip:
m_PostInfinity: 2
m_RotationOrder: 4
attribute: m_LocalEulerAngles.y
- path: EyeL
+ path: EyeR
classID: 4
script: {fileID: 0}
- curve:
@@ -6931,7 +6961,7 @@ AnimationClip:
m_PostInfinity: 2
m_RotationOrder: 4
attribute: m_LocalEulerAngles.x
- path: EyeL
+ path: EyeR
classID: 4
script: {fileID: 0}
- curve:
@@ -6971,7 +7001,7 @@ AnimationClip:
m_PostInfinity: 2
m_RotationOrder: 4
attribute: m_LocalEulerAngles.z
- path: FootR
+ path: LegUpR
classID: 4
script: {fileID: 0}
- curve:
@@ -6981,7 +7011,7 @@ AnimationClip:
m_PostInfinity: 2
m_RotationOrder: 4
attribute: m_LocalEulerAngles.y
- path: FootR
+ path: LegUpR
classID: 4
script: {fileID: 0}
- curve:
@@ -6991,7 +7021,97 @@ AnimationClip:
m_PostInfinity: 2
m_RotationOrder: 4
attribute: m_LocalEulerAngles.x
- path: FootR
+ path: LegUpR
+ classID: 4
+ script: {fileID: 0}
+ - curve:
+ serializedVersion: 2
+ m_Curve: []
+ m_PreInfinity: 2
+ m_PostInfinity: 2
+ m_RotationOrder: 4
+ attribute: m_LocalEulerAngles.z
+ path: EyeL
+ classID: 4
+ script: {fileID: 0}
+ - curve:
+ serializedVersion: 2
+ m_Curve: []
+ m_PreInfinity: 2
+ m_PostInfinity: 2
+ m_RotationOrder: 4
+ attribute: m_LocalEulerAngles.y
+ path: EyeL
+ classID: 4
+ script: {fileID: 0}
+ - curve:
+ serializedVersion: 2
+ m_Curve: []
+ m_PreInfinity: 2
+ m_PostInfinity: 2
+ m_RotationOrder: 4
+ attribute: m_LocalEulerAngles.x
+ path: EyeL
+ classID: 4
+ script: {fileID: 0}
+ - curve:
+ serializedVersion: 2
+ m_Curve: []
+ m_PreInfinity: 2
+ m_PostInfinity: 2
+ m_RotationOrder: 4
+ attribute: m_LocalEulerAngles.z
+ path: Head
+ classID: 4
+ script: {fileID: 0}
+ - curve:
+ serializedVersion: 2
+ m_Curve: []
+ m_PreInfinity: 2
+ m_PostInfinity: 2
+ m_RotationOrder: 4
+ attribute: m_LocalEulerAngles.y
+ path: Head
+ classID: 4
+ script: {fileID: 0}
+ - curve:
+ serializedVersion: 2
+ m_Curve: []
+ m_PreInfinity: 2
+ m_PostInfinity: 2
+ m_RotationOrder: 4
+ attribute: m_LocalEulerAngles.x
+ path: Head
+ classID: 4
+ script: {fileID: 0}
+ - curve:
+ serializedVersion: 2
+ m_Curve: []
+ m_PreInfinity: 2
+ m_PostInfinity: 2
+ m_RotationOrder: 4
+ attribute: m_LocalEulerAngles.z
+ path: HandL
+ classID: 4
+ script: {fileID: 0}
+ - curve:
+ serializedVersion: 2
+ m_Curve: []
+ m_PreInfinity: 2
+ m_PostInfinity: 2
+ m_RotationOrder: 4
+ attribute: m_LocalEulerAngles.y
+ path: HandL
+ classID: 4
+ script: {fileID: 0}
+ - curve:
+ serializedVersion: 2
+ m_Curve: []
+ m_PreInfinity: 2
+ m_PostInfinity: 2
+ m_RotationOrder: 4
+ attribute: m_LocalEulerAngles.x
+ path: HandL
classID: 4
script: {fileID: 0}
- curve:
@@ -7024,66 +7144,6 @@ AnimationClip:
path: Mouth
classID: 4
script: {fileID: 0}
- - curve:
- serializedVersion: 2
- m_Curve: []
- m_PreInfinity: 2
- m_PostInfinity: 2
- m_RotationOrder: 4
- attribute: m_LocalEulerAngles.z
- path: EyeR
- classID: 4
- script: {fileID: 0}
- - curve:
- serializedVersion: 2
- m_Curve: []
- m_PreInfinity: 2
- m_PostInfinity: 2
- m_RotationOrder: 4
- attribute: m_LocalEulerAngles.y
- path: EyeR
- classID: 4
- script: {fileID: 0}
- - curve:
- serializedVersion: 2
- m_Curve: []
- m_PreInfinity: 2
- m_PostInfinity: 2
- m_RotationOrder: 4
- attribute: m_LocalEulerAngles.x
- path: EyeR
- classID: 4
- script: {fileID: 0}
- - curve:
- serializedVersion: 2
- m_Curve: []
- m_PreInfinity: 2
- m_PostInfinity: 2
- m_RotationOrder: 4
- attribute: m_LocalEulerAngles.z
- path: LegLowL
- classID: 4
- script: {fileID: 0}
- - curve:
- serializedVersion: 2
- m_Curve: []
- m_PreInfinity: 2
- m_PostInfinity: 2
- m_RotationOrder: 4
- attribute: m_LocalEulerAngles.y
- path: LegLowL
- classID: 4
- script: {fileID: 0}
- - curve:
- serializedVersion: 2
- m_Curve: []
- m_PreInfinity: 2
- m_PostInfinity: 2
- m_RotationOrder: 4
- attribute: m_LocalEulerAngles.x
- path: LegLowL
- classID: 4
- script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve: []
@@ -7120,7 +7180,7 @@ AnimationClip:
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
- attribute: m_LocalEulerAngles.z
+ attribute: m_LocalEulerAngles.x
path: Woosh
classID: 4
script: {fileID: 0}
@@ -7140,70 +7200,10 @@ AnimationClip:
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
- attribute: m_LocalEulerAngles.x
+ attribute: m_LocalEulerAngles.z
path: Woosh
classID: 4
script: {fileID: 0}
- - curve:
- serializedVersion: 2
- m_Curve: []
- m_PreInfinity: 2
- m_PostInfinity: 2
- m_RotationOrder: 4
- attribute: m_LocalEulerAngles.z
- path: Head
- classID: 4
- script: {fileID: 0}
- - curve:
- serializedVersion: 2
- m_Curve: []
- m_PreInfinity: 2
- m_PostInfinity: 2
- m_RotationOrder: 4
- attribute: m_LocalEulerAngles.y
- path: Head
- classID: 4
- script: {fileID: 0}
- - curve:
- serializedVersion: 2
- m_Curve: []
- m_PreInfinity: 2
- m_PostInfinity: 2
- m_RotationOrder: 4
- attribute: m_LocalEulerAngles.x
- path: Head
- classID: 4
- script: {fileID: 0}
- - curve:
- serializedVersion: 2
- m_Curve: []
- m_PreInfinity: 2
- m_PostInfinity: 2
- m_RotationOrder: 4
- attribute: m_LocalEulerAngles.x
- path: LegLowR
- classID: 4
- script: {fileID: 0}
- - curve:
- serializedVersion: 2
- m_Curve: []
- m_PreInfinity: 2
- m_PostInfinity: 2
- m_RotationOrder: 4
- attribute: m_LocalEulerAngles.y
- path: LegLowR
- classID: 4
- script: {fileID: 0}
- - curve:
- serializedVersion: 2
- m_Curve: []
- m_PreInfinity: 2
- m_PostInfinity: 2
- m_RotationOrder: 4
- attribute: m_LocalEulerAngles.z
- path: LegLowR
- classID: 4
- script: {fileID: 0}
m_HasGenericRootTransform: 0
m_HasMotionFloatCurves: 0
m_Events: []
diff --git a/Assets/Scripts/Conductor.cs b/Assets/Scripts/Conductor.cs
index 5ee65b4b..0ee980b4 100644
--- a/Assets/Scripts/Conductor.cs
+++ b/Assets/Scripts/Conductor.cs
@@ -406,11 +406,11 @@ namespace HeavenStudio
public void LateUpdate()
{
- if (metronome && isPlaying)
+ if (isPlaying)
{
if (songPositionInBeatsAsDouble >= Math.Ceiling(startBeat) + _metronomeTally)
{
- metronomeSound = Util.SoundByte.PlayOneShot("metronome", Math.Ceiling(startBeat) + _metronomeTally);
+ if (metronome) metronomeSound = Util.SoundByte.PlayOneShot("metronome", Math.Ceiling(startBeat) + _metronomeTally);
_metronomeTally++;
}
}
diff --git a/Assets/Scripts/Games/BlueBear/BlueBear.cs b/Assets/Scripts/Games/BlueBear/BlueBear.cs
index 64f3d4da..1294097b 100644
--- a/Assets/Scripts/Games/BlueBear/BlueBear.cs
+++ b/Assets/Scripts/Games/BlueBear/BlueBear.cs
@@ -29,7 +29,7 @@ namespace HeavenStudio.Games.Loaders
},
new GameAction("setEmotion", "Emotion")
{
- function = delegate { var e = eventCaller.currentEntity; BlueBear.instance.SetEmotion(e["type"]); },
+ function = delegate { var e = eventCaller.currentEntity; BlueBear.instance.SetEmotion(e.beat, e["type"]); },
parameters = new List()
{
new Param("type", BlueBear.EmotionType.ClosedEyes, "Emotion", "Which emotion should the blue bear use?")
@@ -274,18 +274,18 @@ namespace HeavenStudio.Games
headAndBodyAnim.SetBool("ShouldOpenMouth", foodHolder.childCount != 0);
if (headAndBodyAnim.GetBool("ShouldOpenMouth"))
{
- _emotionCancelled = true;
+ _emotionCancelledBeat = Conductor.instance.songPositionInBeatsAsDouble;
}
if (PlayerInput.GetIsAction(InputAction_Left) && !IsExpectingInputNow(InputAction_Left.inputLockCategory))
{
SoundByte.PlayOneShotGame("blueBear/whiff", -1, SoundByte.GetPitchFromSemiTones(UnityEngine.Random.Range(-1, 2), false));
- Bite(true);
+ Bite(Conductor.instance.songPositionInBeatsAsDouble, true);
}
else if (PlayerInput.GetIsAction(InputAction_Right) && !IsExpectingInputNow(InputAction_Right.inputLockCategory))
{
SoundByte.PlayOneShotGame("blueBear/whiff", -1, SoundByte.GetPitchFromSemiTones(UnityEngine.Random.Range(-1, 2), false));
- Bite(false);
+ Bite(Conductor.instance.songPositionInBeatsAsDouble, false);
}
UpdateEmotions();
@@ -298,7 +298,7 @@ namespace HeavenStudio.Games
windAnim.SetScaledAnimationSpeed();
}
- private bool _emotionCancelled = false;
+ private double _emotionCancelledBeat = -1;
private int _emotionIndex = 0;
private List _allEmotionsStretch = new();
private EmotionStretchType _lastEmotion = EmotionStretchType.LookUp;
@@ -317,12 +317,11 @@ namespace HeavenStudio.Games
_emotionIndex++;
_lastEmotion = (EmotionStretchType)_allEmotionsStretch[_emotionIndex - 1]["type"];
crying = _lastEmotion == EmotionStretchType.StartCrying;
- _emotionCancelled = false;
UpdateEmotions();
return;
}
- if (beat >= e.beat && beat < e.beat + e.length && !_emotionCancelled)
+ if (beat >= e.beat && beat < e.beat + e.length && !(_emotionCancelledBeat >= e.beat && _emotionCancelledBeat < e.beat + e.length))
{
_lastEmotion = (EmotionStretchType)e["type"];
crying = _lastEmotion == EmotionStretchType.StartCrying;
@@ -388,9 +387,9 @@ namespace HeavenStudio.Games
windAnim.DoScaledAnimationAsync("Wind", 0.5f);
}
- public void Bite(bool left)
+ public void Bite(double beat, bool left)
{
- _emotionCancelled = true;
+ _emotionCancelledBeat = beat;
if (crying)
{
headAndBodyAnim.DoScaledAnimationAsync(left ? "CryBiteL" : "CryBiteR", 0.5f);
@@ -456,14 +455,15 @@ namespace HeavenStudio.Games
}
}
- public void SetEmotion(int emotion)
+ public void SetEmotion(double beat, int emotion)
{
- _emotionCancelled = true;
+ _emotionCancelledBeat = beat;
switch (emotion)
{
case (int)EmotionType.Neutral:
- //check if smiling then play "StopSmile"
headAndBodyAnim.DoScaledAnimationAsync("Idle", 0.5f);
+ if (_allEmotionsStretch.Count == 0 || _lastEmotion != EmotionStretchType.Smile) return;
+ headAndBodyAnim.DoScaledAnimationAsync("StopSmile", 0.5f);
crying = false;
break;
case (int)EmotionType.ClosedEyes:
diff --git a/Assets/Scripts/Games/BlueBear/Treat.cs b/Assets/Scripts/Games/BlueBear/Treat.cs
index 5d5e3f87..c039abde 100644
--- a/Assets/Scripts/Games/BlueBear/Treat.cs
+++ b/Assets/Scripts/Games/BlueBear/Treat.cs
@@ -68,7 +68,7 @@ namespace HeavenStudio.Games.Scripts_BlueBear
SoundByte.PlayOneShotGame("blueBear/chompDonut");
}
- game.Bite(isCake);
+ game.Bite(Conductor.instance.songPositionInBeatsAsDouble, isCake);
game.EatTreat();
SpawnCrumbs();
diff --git a/Assets/Scripts/Games/BoardMeeting/BoardMeeting.cs b/Assets/Scripts/Games/BoardMeeting/BoardMeeting.cs
index 845e6d2c..5967f6cd 100644
--- a/Assets/Scripts/Games/BoardMeeting/BoardMeeting.cs
+++ b/Assets/Scripts/Games/BoardMeeting/BoardMeeting.cs
@@ -91,10 +91,8 @@ namespace HeavenStudio.Games
[SerializeField] List executives = new List();
public BMExecutive firstSpinner;
[SerializeField] float shakeIntensity = 0.5f;
- public bool shouldBop = true;
private bool assistantCanBop = true;
private bool executivesCanBop = true;
- public GameEvent bop = new GameEvent();
[NonSerialized] public Sound chairLoopSound = null;
int missCounter = 0;
private Tween shakeTween;
@@ -104,6 +102,7 @@ namespace HeavenStudio.Games
private void Awake()
{
instance = this;
+ SetupBopRegion("boardMeeting", "bop", "auto");
InitExecutives();
}
@@ -145,7 +144,7 @@ namespace HeavenStudio.Games
public override void OnBeatPulse(double beat)
{
- if (!shouldBop) return;
+ if (!BeatIsInBopRegion(beat)) return;
SingleBop();
}
@@ -166,7 +165,6 @@ namespace HeavenStudio.Games
public void Bop(double beat, float length, bool goBop, bool autoBop)
{
- shouldBop = autoBop;
if (goBop)
{
for (int i = 0; i < length; i++)
diff --git a/Assets/Scripts/Games/CatchyTune/CatchyTune.cs b/Assets/Scripts/Games/CatchyTune/CatchyTune.cs
index 5f250302..4be42598 100644
--- a/Assets/Scripts/Games/CatchyTune/CatchyTune.cs
+++ b/Assets/Scripts/Games/CatchyTune/CatchyTune.cs
@@ -80,10 +80,10 @@ namespace HeavenStudio.Games
public enum WhoBops
{
- Alalin,
- Plalin,
- Both,
- None
+ Alalin = 1,
+ Plalin = 2,
+ Both = 0,
+ None = 3
}
public enum Background
@@ -111,10 +111,6 @@ namespace HeavenStudio.Games
private double startSmile = 0;
private double stopSmile = 0;
- private bool bopLeft = true;
- private bool bopRight = true;
- public GameEvent bop = new GameEvent();
-
public static CatchyTune instance;
static List queuedFruits = new List();
struct QueuedFruit
@@ -184,6 +180,7 @@ namespace HeavenStudio.Games
private void Awake()
{
instance = this;
+ SetupBopRegion("catchyTune", "bop", "bopAuto", false);
}
const float orangeoffset = 0.5f;
@@ -249,6 +246,9 @@ namespace HeavenStudio.Games
public override void OnBeatPulse(double beat)
{
+ int whoBopsAuto = BeatIsInBopRegionInt(beat);
+ bool bopLeft = whoBopsAuto == (int)WhoBops.Plalin || whoBopsAuto == (int)WhoBops.Both;
+ bool bopRight = whoBopsAuto == (int)WhoBops.Alalin || whoBopsAuto == (int)WhoBops.Both;
if (bopLeft && stopCatchLeft == 0)
{
plalinAnim.DoScaledAnimationAsync("bop", 0.5f);
@@ -323,8 +323,6 @@ namespace HeavenStudio.Games
public void Bop(double beat, float length, int whoBops, int whoBopsAuto)
{
- bopLeft = whoBopsAuto == (int)WhoBops.Plalin || whoBopsAuto == (int)WhoBops.Both;
- bopRight = whoBopsAuto == (int)WhoBops.Alalin || whoBopsAuto == (int)WhoBops.Both;
for (int i = 0; i < length; i++)
{
BeatAction.New(instance, new List()
diff --git a/Assets/Scripts/Games/CheerReaders/CheerReaders.cs b/Assets/Scripts/Games/CheerReaders/CheerReaders.cs
index 0af61ec2..b0673f68 100644
--- a/Assets/Scripts/Games/CheerReaders/CheerReaders.cs
+++ b/Assets/Scripts/Games/CheerReaders/CheerReaders.cs
@@ -163,7 +163,6 @@ namespace HeavenStudio.Games
Sound SpinningLoop;
[Header("Variables")]
[SerializeField] List posters = new List();
- bool shouldBop = true;
bool canBop = true;
public bool doingCue;
double cueLength;
@@ -171,7 +170,6 @@ namespace HeavenStudio.Games
bool shouldYay;
bool shouldDoSuccessZoom;
public bool shouldBeBlack = false;
- public GameEvent bop = new GameEvent();
int currentZoomIndex;
double currentZoomCamBeat;
float currentZoomCamLength;
@@ -230,6 +228,7 @@ namespace HeavenStudio.Games
void Awake()
{
instance = this;
+ SetupBopRegion("cheerReaders", "bop", "toggle2");
for (int i = 0; i < topMasks.Count; i++)
{
firstRow[i].posterBook = topMasks[i];
@@ -264,7 +263,7 @@ namespace HeavenStudio.Games
public override void OnBeatPulse(double beat)
{
- if (!shouldBop) return;
+ if (!BeatIsInBopRegion(beat)) return;
BopSingle();
}
@@ -482,7 +481,6 @@ namespace HeavenStudio.Games
public void BopToggle(double beat, float length, bool startBop, bool bopAuto)
{
- shouldBop = bopAuto;
if (startBop)
{
for (int i = 0; i < length; i++)
diff --git a/Assets/Scripts/Games/DJSchool/DJSchool.cs b/Assets/Scripts/Games/DJSchool/DJSchool.cs
index 953c5239..c895d638 100644
--- a/Assets/Scripts/Games/DJSchool/DJSchool.cs
+++ b/Assets/Scripts/Games/DJSchool/DJSchool.cs
@@ -113,14 +113,12 @@ namespace HeavenStudio.Games
[SerializeField] private Student student;
[SerializeField] private GameObject djYellow;
private Animator djYellowAnim;
- private double lastReportedBeat = 0f;
public DJYellow djYellowScript;
[Header("Properties")]
public GameEvent bop = new GameEvent();
public bool djYellowHolding;
public bool andStop;
- public bool goBop;
public double beatOfInstance;
private bool djYellowBopLeft;
public bool shouldBeHolding = false;
@@ -138,7 +136,7 @@ namespace HeavenStudio.Games
djYellowAnim = djYellow.GetComponent();
djYellowScript = djYellow.GetComponent();
student.Init();
- goBop = true;
+ SetupBopRegion("djSchool", "bop", "toggle");
}
//For inactive game purposes
@@ -167,7 +165,7 @@ namespace HeavenStudio.Games
public override void OnBeatPulse(double beat)
{
- if (!goBop) return;
+ if (!BeatIsInBopRegion(beat)) return;
if (student.isHolding)
{
student.anim.DoScaledAnimationAsync("HoldBop", 0.5f);
@@ -243,7 +241,6 @@ namespace HeavenStudio.Games
public void Bop(double beat, float length, bool isBopping, bool autoBop)
{
- goBop = autoBop;
if (isBopping)
{
for (int i = 0; i < length; i++)
diff --git a/Assets/Scripts/Games/DJSchool/Student.cs b/Assets/Scripts/Games/DJSchool/Student.cs
index f85881ab..2a965660 100644
--- a/Assets/Scripts/Games/DJSchool/Student.cs
+++ b/Assets/Scripts/Games/DJSchool/Student.cs
@@ -258,7 +258,7 @@ namespace HeavenStudio.Games.Scripts_DJSchool
{
new BeatAction.Action(caller.timer + caller.startBeat + 1, delegate
{
- if (game.goBop)
+ if (game.BeatIsInBopRegion(caller.timer + caller.startBeat + 1))
{
game.djYellowScript.ChangeHeadSprite(DJYellow.DJExpression.CrossEyed);
if (game.djYellowHolding) game.djYellowScript.Reverse();
@@ -278,7 +278,7 @@ namespace HeavenStudio.Games.Scripts_DJSchool
{
new BeatAction.Action(beat, delegate
{
- if (game.goBop)
+ if (game.BeatIsInBopRegion(beat))
{
game.djYellowScript.ChangeHeadSprite(DJYellow.DJExpression.CrossEyed);
if (game.djYellowHolding) game.djYellowScript.Reverse();
diff --git a/Assets/Scripts/Games/DogNinja/DogNinja.cs b/Assets/Scripts/Games/DogNinja/DogNinja.cs
index 388d8a62..01e9e477 100644
--- a/Assets/Scripts/Games/DogNinja/DogNinja.cs
+++ b/Assets/Scripts/Games/DogNinja/DogNinja.cs
@@ -140,9 +140,7 @@ namespace HeavenStudio.Games
[SerializeField] Sprite[] ObjectTypes;
- private double lastReportedBeat = 0f;
private bool birdOnScreen = false;
- bool dontBop = false;
private const string sfxNum = "dogNinja/";
public static DogNinja instance;
@@ -200,6 +198,7 @@ namespace HeavenStudio.Games
private void Awake()
{
instance = this;
+ SetupBopRegion("dogNinja", "Bop", "auto");
}
void OnDestroy()
@@ -216,7 +215,7 @@ namespace HeavenStudio.Games
public override void OnBeatPulse(double beat)
{
- if (dontBop) return;
+ if (!BeatIsInBopRegion(beat)) return;
DogAnim.DoScaledAnimationAsync("Bop", 0.5f);
}
@@ -267,7 +266,6 @@ namespace HeavenStudio.Games
public void Bop(double beat, float length, bool auto, bool bop)
{
- dontBop = !auto;
if (!bop) return;
List actions = new();
diff --git a/Assets/Scripts/Games/DoubleDate/DoubleDate.cs b/Assets/Scripts/Games/DoubleDate/DoubleDate.cs
index e82f6aa5..e2cc3724 100644
--- a/Assets/Scripts/Games/DoubleDate/DoubleDate.cs
+++ b/Assets/Scripts/Games/DoubleDate/DoubleDate.cs
@@ -76,9 +76,7 @@ namespace HeavenStudio.Games
[SerializeField] public float shadowDepthScaleMax;
[SerializeField] SuperCurveObject.Path[] ballBouncePaths;
double lastGirlGacha = double.MinValue;
- bool shouldBop = true;
bool canBop = true;
- GameEvent bop = new GameEvent();
public static DoubleDate instance;
public static List queuedBalls = new List();
[NonSerialized] public double lastHitWeasel = double.MinValue;
@@ -132,6 +130,7 @@ namespace HeavenStudio.Games
private void Awake()
{
instance = this;
+ SetupBopRegion("doubleDate", "bop", "autoBop");
}
private void Start() {
@@ -140,7 +139,7 @@ namespace HeavenStudio.Games
public override void OnBeatPulse(double beat)
{
- if (shouldBop) SingleBop();
+ if (BeatIsInBopRegion(beat)) SingleBop();
}
void Update()
@@ -198,7 +197,6 @@ namespace HeavenStudio.Games
public void Bop(double beat, float length, bool goBop, bool autoBop)
{
- shouldBop = autoBop;
if (goBop)
{
for (int i = 0; i < length; i++)
diff --git a/Assets/Scripts/Games/DrummingPractice/DrummingPractice.cs b/Assets/Scripts/Games/DrummingPractice/DrummingPractice.cs
index 071711e0..ed76d2fe 100644
--- a/Assets/Scripts/Games/DrummingPractice/DrummingPractice.cs
+++ b/Assets/Scripts/Games/DrummingPractice/DrummingPractice.cs
@@ -21,7 +21,7 @@ namespace HeavenStudio.Games.Loaders
parameters = new List()
{
new Param("bop", true, "Bop", "Should the drummers bop?"),
- new Param("autoBop", true, "Bop (Auto)", "Should the drummers auto bop?")
+ new Param("autoBop", false, "Bop (Auto)", "Should the drummers auto bop?")
}
},
new GameAction("drum", "Hit Drum")
@@ -121,9 +121,6 @@ namespace HeavenStudio.Games
bool isMoving;
string moveAnim;
EasingFunction.Ease lastEase;
- bool goBop = true;
-
- public GameEvent bop = new GameEvent();
public int count = 0;
public static DrummingPractice instance;
@@ -132,6 +129,7 @@ namespace HeavenStudio.Games
{
instance = this;
SetMiis();
+ SetupBopRegion("drummingPractice", "bop", "autoBop");
}
public override void OnGameSwitch(double beat)
@@ -146,7 +144,7 @@ namespace HeavenStudio.Games
public override void OnBeatPulse(double beat)
{
- if (goBop)
+ if (BeatIsInBopRegion(beat))
{
Bop();
}
@@ -191,7 +189,6 @@ namespace HeavenStudio.Games
public void SetBop(double beat, float length, bool shouldBop, bool autoBop)
{
- goBop = autoBop;
if (shouldBop)
{
for (int i = 0; i < length; i++)
diff --git a/Assets/Scripts/Games/FanClub/FanClub.cs b/Assets/Scripts/Games/FanClub/FanClub.cs
index bdadd741..2212be69 100644
--- a/Assets/Scripts/Games/FanClub/FanClub.cs
+++ b/Assets/Scripts/Games/FanClub/FanClub.cs
@@ -218,8 +218,6 @@ namespace HeavenStudio.Games
private static bool wantKamoneAlt = false;
private static double wantBigReady = double.MinValue;
private bool hasJumped = false;
- private bool goBopIdol = true;
- private bool goBopSpec = true;
private bool noJudgement = false;
private bool noJudgementInput = false;
@@ -235,6 +233,8 @@ namespace HeavenStudio.Games
private void Awake()
{
instance = this;
+ SetupBopRegion("fanClub", "bop", "type2", false);
+ AddBopRegionEventsInt("fanClub", "finish", 3);
Spectators = new List();
idolAnimator = Arisa.GetComponent();
backupRAnimator = Blue.GetComponent();
@@ -357,6 +357,9 @@ namespace HeavenStudio.Games
public override void OnBeatPulse(double beat)
{
var cond = Conductor.instance;
+ int whoBops = BeatIsInBopRegionInt(beat);
+ bool goBopIdol = whoBops == (int)IdolBopType.Both || whoBops == (int)IdolBopType.Idol;
+ bool goBopSpec = whoBops == (int)IdolBopType.Both || whoBops == (int)IdolBopType.Spectators;
if (goBopIdol)
{
if (!(cond.songPositionInBeatsAsDouble >= noBop.startBeat && cond.songPositionInBeatsAsDouble < noBop.startBeat + noBop.length))
@@ -398,8 +401,6 @@ namespace HeavenStudio.Games
public void Bop(double beat, float length, int target = (int) IdolBopType.Both, int targetAuto = (int)IdolBopType.Both)
{
- goBopIdol = targetAuto == (int)IdolBopType.Both || targetAuto == (int)IdolBopType.Idol;
- goBopSpec = targetAuto == (int)IdolBopType.Both || targetAuto == (int)IdolBopType.Spectators;
for (int i = 0; i < length; i++)
{
BeatAction.New(instance, new List()
@@ -934,7 +935,6 @@ namespace HeavenStudio.Games
if (noJudgement) return;
noJudgement = true;
noJudgementInput = false;
- goBopSpec = false;
// recreation of sub61
BeatAction.New(this, new List()
diff --git a/Assets/Scripts/Games/KarateMan/KarateMan.cs b/Assets/Scripts/Games/KarateMan/KarateMan.cs
index 9fca97f8..4e2e5f55 100644
--- a/Assets/Scripts/Games/KarateMan/KarateMan.cs
+++ b/Assets/Scripts/Games/KarateMan/KarateMan.cs
@@ -692,6 +692,7 @@ namespace HeavenStudio.Games
private void Awake()
{
instance = this;
+ SetupBopRegion("karateman", "bop", "toggle");
KarateManPot.ResetLastCombo();
@@ -1168,13 +1169,13 @@ namespace HeavenStudio.Games
public override void OnBeatPulse(double beat)
{
+ bool autoBop = BeatIsInBopRegion(beat);
+ Joe.bop.length = autoBop ? float.MaxValue : 0;
Joe.RequestBop();
}
public void ToggleBop(double beat, float length, bool toggle, bool autoBop)
{
- Joe.bop.length = autoBop ? float.MaxValue : 0;
-
if (toggle)
{
var actions = new List();
diff --git a/Assets/Scripts/Games/MeatGrinder/MeatGrinder.cs b/Assets/Scripts/Games/MeatGrinder/MeatGrinder.cs
index f03d79db..510e0209 100644
--- a/Assets/Scripts/Games/MeatGrinder/MeatGrinder.cs
+++ b/Assets/Scripts/Games/MeatGrinder/MeatGrinder.cs
@@ -94,10 +94,8 @@ namespace HeavenStudio.Games
[Header("Variables")]
bool intervalStarted;
double intervalStartBeat;
- bool bossBop = true;
public double beatInterval = 4f;
public bool bossAnnoyed = false;
- private double lastReportedBeat = 0f;
const string sfxName = "meatGrinder/";
public static MeatGrinder instance;
@@ -124,6 +122,7 @@ namespace HeavenStudio.Games
private void Awake()
{
instance = this;
+ SetupBopRegion("meatGrinder", "bop", "bossBop");
}
void OnDestroy()
@@ -161,7 +160,7 @@ namespace HeavenStudio.Games
{
if (!BossAnim.IsPlayingAnimationName("BossCall")
&& !BossAnim.IsPlayingAnimationName("BossSignal")
- && bossBop)
+ && BeatIsInBopRegion(beat))
{
BossAnim.DoScaledAnimationAsync(bossAnnoyed ? "BossMiss" : "Bop", 0.5f);
}
@@ -169,7 +168,6 @@ namespace HeavenStudio.Games
public void Bop(double beat, double length, bool doesBop, bool autoBop)
{
- bossBop = autoBop;
if (doesBop)
{
for (int i = 0; i < length; i++)
diff --git a/Assets/Scripts/Games/Minigame.cs b/Assets/Scripts/Games/Minigame.cs
index 632bb881..7954ebbb 100644
--- a/Assets/Scripts/Games/Minigame.cs
+++ b/Assets/Scripts/Games/Minigame.cs
@@ -6,6 +6,7 @@ using HeavenStudio.Util;
using HeavenStudio.Common;
using HeavenStudio.InputSystem;
using System;
+using System.Linq;
namespace HeavenStudio.Games
{
@@ -448,6 +449,82 @@ namespace HeavenStudio.Games
}
+ #region Bop
+
+ protected enum DefaultBopEnum
+ {
+ Off = 0,
+ On = 1,
+ }
+
+ private Dictionary bopRegion = new();
+
+ public bool BeatIsInBopRegion(double beat)
+ {
+ if (bopRegion.Count == 0) return true;
+
+ int bop = 0;
+ foreach (var item in bopRegion)
+ {
+ if (beat < item.Key) break;
+ if (beat >= item.Key) bop = item.Value;
+ }
+ return (DefaultBopEnum)bop == DefaultBopEnum.On;
+ }
+
+ public int BeatIsInBopRegionInt(double beat)
+ {
+ if (bopRegion.Count == 0) return 0;
+
+ int bop = 0;
+ foreach (var item in bopRegion)
+ {
+ if (beat < item.Key) break;
+ if (beat >= item.Key) bop = item.Value;
+ }
+ return bop;
+ }
+
+ protected void SetupBopRegion(string gameName, string eventName, string toggleName, bool isBool = true)
+ {
+ var allEvents = EventCaller.GetAllInGameManagerList(gameName, new string[] { eventName });
+ allEvents.Sort((x, y) => x.beat.CompareTo(y.beat));
+
+ foreach (var e in allEvents)
+ {
+ if (isBool)
+ {
+ bopRegion.Add(e.beat, e[toggleName] ? 1 : 0);
+ }
+ else
+ {
+ bopRegion.Add(e.beat, e[toggleName]);
+ }
+ }
+ }
+
+ protected void AddBopRegionEvents(string gameName, string eventName, bool allowBop)
+ {
+ var allEvents = EventCaller.GetAllInGameManagerList(gameName, new string[] { eventName });
+ foreach (var e in allEvents)
+ {
+ bopRegion.Add(e.beat, allowBop ? 1 : 0);
+ }
+ bopRegion = bopRegion.OrderBy(pair => pair.Value).ToDictionary(pair => pair.Key, pair => pair.Value);
+ }
+
+ protected void AddBopRegionEventsInt(string gameName, string eventName, int allowBop)
+ {
+ var allEvents = EventCaller.GetAllInGameManagerList(gameName, new string[] { eventName });
+ foreach (var e in allEvents)
+ {
+ bopRegion.Add(e.beat, allowBop);
+ }
+ bopRegion = bopRegion.OrderBy(pair => pair.Value).ToDictionary(pair => pair.Key, pair => pair.Value);
+ }
+
+ #endregion
+
private void OnDestroy()
{
foreach (var evt in scheduledInputs)
diff --git a/Assets/Scripts/Games/MunchyMonk/MunchyMonk.cs b/Assets/Scripts/Games/MunchyMonk/MunchyMonk.cs
index 9de0976d..35e30dd6 100644
--- a/Assets/Scripts/Games/MunchyMonk/MunchyMonk.cs
+++ b/Assets/Scripts/Games/MunchyMonk/MunchyMonk.cs
@@ -17,14 +17,14 @@ namespace HeavenStudio.Games.Loaders
{
function = delegate {
var e = eventCaller.currentEntity;
- MunchyMonk.instance.Bop(e.beat, e["bop"], e["autoBop"]);
+ MunchyMonk.instance.Bop(e.beat, e.length, e["bop"]);
},
parameters = new List()
{
new Param("bop", true, "Monk Bops?", "Does the monk bop?"),
new Param("autoBop", false, "Monk Bops? (Auto)", "Does the monk auto bop?"),
},
- defaultLength = 0.5f,
+ resizable = true
},
new GameAction("MonkMove", "Monk Move")
{
@@ -209,7 +209,6 @@ namespace HeavenStudio.Games
public double lastReportedBeat = 0f;
public bool needBlush;
public bool isStaring;
- bool monkBop = true;
// these variables are static so that they can be set outside of the game/stay the same between game switches
static public int howManyGulps;
@@ -241,6 +240,7 @@ namespace HeavenStudio.Games
{
instance = this;
Baby.SetActive(!disableBaby);
+ SetupBopRegion("munchyMonk", "Bop", "autoBop");
}
private void Start()
@@ -352,7 +352,7 @@ namespace HeavenStudio.Games
public override void OnBeatPulse(double beat)
{
if ((MonkAnim.IsAnimationNotPlaying() || MonkAnim.IsPlayingAnimationName("Bop") || MonkAnim.IsPlayingAnimationName("Idle"))
- && monkBop
+ && BeatIsInBopRegion(beat)
&& !isStaring)
{
MonkAnim.DoScaledAnimationAsync("Bop", 0.5f);
@@ -370,15 +370,23 @@ namespace HeavenStudio.Games
}
}
- public void Bop(double beat, bool bop, bool autoBop)
+ public void Bop(double beat, double length, bool bop)
{
- monkBop = autoBop;
- if (bop) {
- needBlush = false;
- MonkAnim.DoScaledAnimationAsync("Bop", 0.5f);
- if (growLevel == 4) BrowAnim.DoScaledAnimationAsync("Bop", 0.5f);
- if (growLevel > 0) StacheAnim.DoScaledAnimationAsync($"Bop{growLevel}", 0.5f);
+ if (!bop) return;
+ List actions = new();
+
+ for (int i = 0; i < length; i++)
+ {
+ actions.Add(new(beat + i, delegate
+ {
+ needBlush = false;
+ MonkAnim.DoScaledAnimationAsync("Bop", 0.5f);
+ if (growLevel == 4) BrowAnim.DoScaledAnimationAsync("Bop", 0.5f);
+ if (growLevel > 0) StacheAnim.DoScaledAnimationAsync($"Bop{growLevel}", 0.5f);
+ }));
}
+
+ if (actions.Count > 0) BeatAction.New(this, actions);
}
public void InputFunctions(int whichVar, float state = 0)
diff --git a/Assets/Scripts/Games/OctopusMachine/OctopusMachine.cs b/Assets/Scripts/Games/OctopusMachine/OctopusMachine.cs
index 18fdf4ee..69595873 100644
--- a/Assets/Scripts/Games/OctopusMachine/OctopusMachine.cs
+++ b/Assets/Scripts/Games/OctopusMachine/OctopusMachine.cs
@@ -229,6 +229,7 @@ namespace HeavenStudio.Games
void Awake()
{
instance = this;
+ SetupBopRegion("octopusMachine", "bop", "keepBop");
}
private void Start()
@@ -263,8 +264,11 @@ namespace HeavenStudio.Games
if (autoAction) bopIterate++;
+ bool keepBop = BeatIsInBopRegion(beat);
+
foreach (var octo in octopodes)
{
+ octo.cantBop = !keepBop;
octo.RequestBop();
}
}
@@ -339,7 +343,6 @@ namespace HeavenStudio.Games
foreach (var octo in octopodes) {
if (singleBop) octo.PlayAnimation(whichBop);
if (keepBop) bopStatus = whichBop;
- octo.cantBop = !keepBop;
}
}
diff --git a/Assets/Scripts/Games/RhythmRally/RhythmRally.cs b/Assets/Scripts/Games/RhythmRally/RhythmRally.cs
index 0b808c35..8bb9d1cf 100644
--- a/Assets/Scripts/Games/RhythmRally/RhythmRally.cs
+++ b/Assets/Scripts/Games/RhythmRally/RhythmRally.cs
@@ -152,8 +152,6 @@ namespace HeavenStudio.Games
public Paddlers paddlers;
- private bool goBop = true;
-
public static RhythmRally instance;
private void Awake()
@@ -166,6 +164,7 @@ namespace HeavenStudio.Games
playerAnim.Play("Idle", 0, 0);
opponentAnim.Play("Idle", 0, 0);
+ SetupBopRegion("rhythmRally", "bop", "bopAuto");
}
const float tableHitTime = 0.58f;
@@ -366,7 +365,7 @@ namespace HeavenStudio.Games
public override void OnBeatPulse(double beat)
{
- if (goBop && !inPose)
+ if (BeatIsInBopRegion(beat) && !inPose)
{
BopSingle();
}
@@ -374,7 +373,6 @@ namespace HeavenStudio.Games
public void Bop(double beat, float length, bool bop, bool bopAuto)
{
- goBop = bopAuto;
if (bop)
{
for (int i = 0; i < length; i++)
diff --git a/Assets/Scripts/Games/RhythmSomen/RhythmSomen.cs b/Assets/Scripts/Games/RhythmSomen/RhythmSomen.cs
index ec54051b..46bd45c3 100644
--- a/Assets/Scripts/Games/RhythmSomen/RhythmSomen.cs
+++ b/Assets/Scripts/Games/RhythmSomen/RhythmSomen.cs
@@ -70,23 +70,21 @@ namespace HeavenStudio.Games
public Animator CloseCrane;
public Animator FarCrane;
public GameObject Player;
- private bool shouldBop = true;
private bool missed;
private bool hasSlurped;
- public GameEvent bop = new GameEvent();
-
public static RhythmSomen instance;
// Start is called before the first frame update
void Awake()
{
instance = this;
+ SetupBopRegion("rhythmSomen", "bop", "toggle");
}
public override void OnBeatPulse(double beat)
{
- if (shouldBop) SomenPlayer.DoScaledAnimationAsync("HeadBob", 0.5f);
+ if (BeatIsInBopRegion(beat)) SomenPlayer.DoScaledAnimationAsync("HeadBob", 0.5f);
}
void Update()
@@ -125,7 +123,6 @@ namespace HeavenStudio.Games
public void ToggleBop(double beat, float length, bool bopOrNah, bool autoBop)
{
- shouldBop = autoBop;
if (bopOrNah)
{
for (int i = 0; i < length; i++)
diff --git a/Assets/Scripts/Games/Ringside/Ringside.cs b/Assets/Scripts/Games/Ringside/Ringside.cs
index 5da8b759..ce77e8ea 100644
--- a/Assets/Scripts/Games/Ringside/Ringside.cs
+++ b/Assets/Scripts/Games/Ringside/Ringside.cs
@@ -143,7 +143,6 @@ namespace HeavenStudio.Games
private float currentZoomCamBeat;
private Vector3 lastCamPos = new Vector3(0, 0, -10);
private Vector3 currentCamPos = new Vector3(0, 0, -10);
- private bool shouldBop = true;
private bool missedBigGuy;
private bool reporterShouldHeart;
private bool hitPose;
@@ -201,6 +200,7 @@ namespace HeavenStudio.Games
void Awake()
{
instance = this;
+ SetupBopRegion("ringside", "toggleBop", "bop");
var camEvents = EventCaller.GetAllInGameManagerList("ringside", new string[] { "poseForTheFans" });
List tempEvents = new List();
for (int i = 0; i < camEvents.Count; i++)
@@ -220,7 +220,7 @@ namespace HeavenStudio.Games
public override void OnBeatPulse(double beat)
{
- if (shouldBop && canBop)
+ if (BeatIsInBopRegion(beat) && canBop)
{
if (UnityEngine.Random.Range(1, 18) == 1)
{
@@ -331,7 +331,6 @@ namespace HeavenStudio.Games
public void ToggleBop(double beat, float length, bool startBopping, bool autoBop)
{
- shouldBop = autoBop;
if (startBopping)
{
for (int i = 0; i < length; i++)
@@ -510,7 +509,7 @@ namespace HeavenStudio.Games
new BeatAction.Action(beat + 1, delegate { PoseCheck(beat); }),
new BeatAction.Action(beat + 4f, delegate
{
- if (shouldBop)
+ if (BeatIsInBopRegion(beat + 4f))
{
if (UnityEngine.Random.Range(1, 18) == 1)
{
diff --git a/Assets/Scripts/Games/SamuraiSliceNtr/SamuraiSliceNtr.cs b/Assets/Scripts/Games/SamuraiSliceNtr/SamuraiSliceNtr.cs
index 13d41c7e..1d422b5a 100644
--- a/Assets/Scripts/Games/SamuraiSliceNtr/SamuraiSliceNtr.cs
+++ b/Assets/Scripts/Games/SamuraiSliceNtr/SamuraiSliceNtr.cs
@@ -89,6 +89,7 @@ namespace HeavenStudio.Games.Loaders
namespace HeavenStudio.Games
{
+ using JetBrains.Annotations;
using Scripts_NtrSamurai;
public class SamuraiSliceNtr : Minigame
@@ -102,15 +103,12 @@ namespace HeavenStudio.Games
public enum WhoBops
{
- Samurai = 0,
+ Samurai = 2,
Children = 1,
- Both = 2,
+ Both = 0,
None = 3
}
- private bool goBopSamurai = true;
- private bool goBopChild = true;
-
[Header("References")]
public NtrSamurai player;
public GameObject launcher;
@@ -167,10 +165,15 @@ namespace HeavenStudio.Games
private void Awake()
{
instance = this;
+ SetupBopRegion("samuraiSliceNtr", "bop", "whoBopsAuto", false);
}
public override void OnBeatPulse(double beat)
{
+ int whoBopsAuto = BeatIsInBopRegionInt(beat);
+ bool goBopSamurai = whoBopsAuto == (int)WhoBops.Samurai || whoBopsAuto == (int)WhoBops.Both;
+ bool goBopChild = whoBopsAuto == (int)WhoBops.Children || whoBopsAuto == (int)WhoBops.Both;
+
if (goBopSamurai) player.Bop();
if (goBopChild) childParent.GetComponent().Bop();
}
@@ -187,8 +190,6 @@ namespace HeavenStudio.Games
public void Bop(double beat, float length, int whoBops, int whoBopsAuto)
{
- goBopSamurai = whoBopsAuto == (int)WhoBops.Samurai || whoBopsAuto == (int)WhoBops.Both;
- goBopChild = whoBopsAuto == (int)WhoBops.Children || whoBopsAuto == (int)WhoBops.Both;
for (int i = 0; i < length; i++)
{
BeatAction.New(instance, new List()
diff --git a/Assets/Scripts/Games/SeeSaw/SeeSawGuy.cs b/Assets/Scripts/Games/SeeSaw/SeeSawGuy.cs
index 77399516..eb125faa 100644
--- a/Assets/Scripts/Games/SeeSaw/SeeSawGuy.cs
+++ b/Assets/Scripts/Games/SeeSaw/SeeSawGuy.cs
@@ -136,9 +136,34 @@ namespace HeavenStudio.Games.Scripts_SeeSaw
transform.position = GetPathPositionFromBeat(currentPath, Math.Max(startBeat, currentBeat), startBeat);
break;
case JumpState.HighOutOut:
+ if (currentBeat >= startBeat + 1 && !hasChangedAnimMidAir && see)
+ {
+ if (!hasChangedAnimMidAir) anim.Play("Jump_OutOut_Fall", 0, 0);
+ hasChangedAnimMidAir = true;
+ }
+ transform.position = GetPathPositionFromBeat(currentPath, Math.Max(startBeat, currentBeat), startBeat);
+ break;
case JumpState.HighOutIn:
+ if (currentBeat >= startBeat + 1 && !hasChangedAnimMidAir && see)
+ {
+ if (!hasChangedAnimMidAir) anim.Play("Jump_OutIn_Tuck", 0, 0);
+ hasChangedAnimMidAir = true;
+ }
+ transform.position = GetPathPositionFromBeat(currentPath, Math.Max(startBeat, currentBeat), startBeat);
+ break;
case JumpState.HighInOut:
+ if (currentBeat >= startBeat + 1 && !hasChangedAnimMidAir && see)
+ {
+ if (!hasChangedAnimMidAir) anim.Play("Jump_InOut_Tuck", 0, 0);
+ hasChangedAnimMidAir = true;
+ }
+ break;
case JumpState.HighInIn:
+ if (currentBeat >= startBeat + 1 && !hasChangedAnimMidAir && see)
+ {
+ if (!hasChangedAnimMidAir) anim.Play("Jump_InIn_Fall", 0, 0);
+ hasChangedAnimMidAir = true;
+ }
transform.position = GetPathPositionFromBeat(currentPath, Math.Max(startBeat, currentBeat), startBeat);
break;
}
diff --git a/Assets/Scripts/Games/SpaceDance/SpaceDance.cs b/Assets/Scripts/Games/SpaceDance/SpaceDance.cs
index 45668df1..e061c5e5 100644
--- a/Assets/Scripts/Games/SpaceDance/SpaceDance.cs
+++ b/Assets/Scripts/Games/SpaceDance/SpaceDance.cs
@@ -144,7 +144,6 @@ namespace HeavenStudio.Games
public Animator Gramps;
public Animator Hit;
public GameObject Player;
- [NonSerialized] public bool shouldBop = true;
bool canBop = true;
bool grampsCanBop = true;
public bool spaceGrampsShouldBop = false;
@@ -226,11 +225,12 @@ namespace HeavenStudio.Games
instance = this;
colorStart = defaultBGColor;
colorEnd = defaultBGColor;
+ SetupBopRegion("spaceDance", "bop", "auto");
}
public override void OnBeatPulse(double beat)
{
- if (shouldBop)
+ if (BeatIsInBopRegion(beat))
{
Bop();
}
@@ -656,7 +656,6 @@ namespace HeavenStudio.Games
public void EpicBop(double beat, float length, bool autoDancers, bool dancers, bool autoGramps, bool gramps)
{
- shouldBop = autoDancers;
spaceGrampsShouldBop = autoGramps;
if (dancers || gramps)
{
diff --git a/Assets/Scripts/Games/TapTrial/TapTrial.cs b/Assets/Scripts/Games/TapTrial/TapTrial.cs
index 0d43147b..89df2aeb 100644
--- a/Assets/Scripts/Games/TapTrial/TapTrial.cs
+++ b/Assets/Scripts/Games/TapTrial/TapTrial.cs
@@ -110,9 +110,7 @@ namespace HeavenStudio.Games
[SerializeField] private float monkeyJumpHeight = 3f;
[SerializeField] private float maxFlashOpacity = 0.8f;
- private GameEvent bop = new();
private bool canBop = true;
- private bool shouldBop = true;
private double jumpStartBeat = double.MinValue;
@@ -121,11 +119,12 @@ namespace HeavenStudio.Games
private void Awake()
{
instance = this;
+ SetupBopRegion("tapTrial", "bop", "toggle2");
}
public override void OnBeatPulse(double beat)
{
- if (shouldBop) SingleBop();
+ if (BeatIsInBopRegion(beat)) SingleBop();
}
private void Update()
@@ -253,7 +252,6 @@ namespace HeavenStudio.Games
public void Bop(double beat, float length, bool bop, bool autoBop)
{
- shouldBop = autoBop;
if (bop)
{
List actions = new();
@@ -443,14 +441,14 @@ namespace HeavenStudio.Games
private void MissJump(PlayerActionEvent caller)
{
player.JumpTapMiss(false);
- if (giraffe.IsAnimationNotPlaying()) giraffe.DoScaledAnimationAsync("Miss", 0.5f);
+ if (giraffe.IsAnimationNotPlaying() && currentAnim != GiraffeAnimation.Exit) giraffe.DoScaledAnimationAsync("Miss", 0.5f);
ResetScroll();
}
private void MissJumpFinal(PlayerActionEvent caller)
{
player.JumpTapMiss(true);
- if (giraffe.IsAnimationNotPlaying()) giraffe.DoScaledAnimationAsync("Miss", 0.5f);
+ if (giraffe.IsAnimationNotPlaying() && currentAnim != GiraffeAnimation.Exit) giraffe.DoScaledAnimationAsync("Miss", 0.5f);
ResetScroll();
}
diff --git a/Assets/Scripts/Games/TheDazzles/TheDazzles.cs b/Assets/Scripts/Games/TheDazzles/TheDazzles.cs
index 2a35b7e2..0592d454 100644
--- a/Assets/Scripts/Games/TheDazzles/TheDazzles.cs
+++ b/Assets/Scripts/Games/TheDazzles/TheDazzles.cs
@@ -228,8 +228,6 @@ namespace HeavenStudio.Games
bool doingPoses = false;
bool shouldHold = false;
double crouchEndBeat;
- public bool shouldBop = true;
- public GameEvent bop = new GameEvent();
static List queuedPoses = new List();
static List queuedCrouches = new List();
[Header("Components")]
@@ -255,11 +253,12 @@ namespace HeavenStudio.Games
void Awake()
{
instance = this;
+ SetupBopRegion("theDazzles", "bop", "toggle");
}
public override void OnBeatPulse(double beat)
{
- if (shouldBop)
+ if (BeatIsInBopRegion(beat))
{
foreach (var girl in npcGirls)
{
@@ -353,7 +352,6 @@ namespace HeavenStudio.Games
public void Bop(double beat, float length, bool goBop, bool autoBop)
{
- shouldBop = autoBop;
if (goBop)
{
for (int i = 0; i < length; i++)
diff --git a/Assets/Scripts/Games/TossBoys/TossBoys.cs b/Assets/Scripts/Games/TossBoys/TossBoys.cs
index 6fb61256..b583bd97 100644
--- a/Assets/Scripts/Games/TossBoys/TossBoys.cs
+++ b/Assets/Scripts/Games/TossBoys/TossBoys.cs
@@ -147,8 +147,6 @@ namespace HeavenStudio.Games
Dictionary passBallDict = new();
string currentPassType;
public static TossBoys instance;
- bool shouldBop = true;
- public GameEvent bop = new GameEvent();
float currentEventLength;
const int IAAka = IAMAXCAT;
@@ -236,6 +234,7 @@ namespace HeavenStudio.Games
instance = this;
colorStart = defaultBGColor;
colorEnd = defaultBGColor;
+ SetupBopRegion("tossBoys", "bop", "auto");
}
new void OnDrawGizmos()
@@ -264,7 +263,7 @@ namespace HeavenStudio.Games
public override void OnBeatPulse(double beat)
{
- if (shouldBop)
+ if (BeatIsInBopRegion(beat))
{
SingleBop();
}
@@ -352,7 +351,6 @@ namespace HeavenStudio.Games
public void Bop(double beat, float length, bool auto, bool goBop)
{
- shouldBop = auto;
if (goBop)
{
List bops = new List();
diff --git a/Assets/Scripts/Games/TrickClass/TrickClass.cs b/Assets/Scripts/Games/TrickClass/TrickClass.cs
index 31dda092..c7394294 100644
--- a/Assets/Scripts/Games/TrickClass/TrickClass.cs
+++ b/Assets/Scripts/Games/TrickClass/TrickClass.cs
@@ -114,12 +114,13 @@ namespace HeavenStudio.Games
private void Awake()
{
instance = this;
+ SetupBopRegion("trickClass", "bop", "autoBop");
}
public override void OnBeatPulse(double beat)
{
var cond = Conductor.instance;
- if (!goBop) return;
+ if (!BeatIsInBopRegion(beat)) return;
if ((!playerReady) && cond.songPositionInBeatsAsDouble > playerBopStart)
playerAnim.DoScaledAnimationAsync("Bop");