diff --git a/Assets/Resources/Sprites/Games/DrummingPractice/Animations/NPCDrummersEnter.anim b/Assets/Resources/Sprites/Games/DrummingPractice/Animations/NPCDrummersEnter.anim
index 5f09250d9..7559e52eb 100644
--- a/Assets/Resources/Sprites/Games/DrummingPractice/Animations/NPCDrummersEnter.anim
+++ b/Assets/Resources/Sprites/Games/DrummingPractice/Animations/NPCDrummersEnter.anim
@@ -100,7 +100,7 @@ AnimationClip:
m_Level: 0
m_CycleOffset: 0
m_HasAdditiveReferencePose: 0
- m_LoopTime: 1
+ m_LoopTime: 0
m_LoopBlend: 0
m_LoopBlendOrientation: 0
m_LoopBlendPositionY: 0
diff --git a/Assets/Resources/Sprites/Games/DrummingPractice/Animations/NPCDrummersExit.anim b/Assets/Resources/Sprites/Games/DrummingPractice/Animations/NPCDrummersExit.anim
index 90135e26d..3b334286d 100644
--- a/Assets/Resources/Sprites/Games/DrummingPractice/Animations/NPCDrummersExit.anim
+++ b/Assets/Resources/Sprites/Games/DrummingPractice/Animations/NPCDrummersExit.anim
@@ -100,7 +100,7 @@ AnimationClip:
m_Level: 0
m_CycleOffset: 0
m_HasAdditiveReferencePose: 0
- m_LoopTime: 1
+ m_LoopTime: 0
m_LoopBlend: 0
m_LoopBlendOrientation: 0
m_LoopBlendPositionY: 0
diff --git a/Assets/Resources/Sprites/Games/TapTrial/Animations/Monkey/MonkeyTapTrial.controller b/Assets/Resources/Sprites/Games/TapTrial/Animations/Monkey/MonkeyTapTrial.controller
index 919c23226..271a56b6d 100644
--- a/Assets/Resources/Sprites/Games/TapTrial/Animations/Monkey/MonkeyTapTrial.controller
+++ b/Assets/Resources/Sprites/Games/TapTrial/Animations/Monkey/MonkeyTapTrial.controller
@@ -26,6 +26,28 @@ AnimatorState:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
+--- !u!1101 &-8536575254723551366
+AnimatorStateTransition:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name:
+ m_Conditions: []
+ m_DstStateMachine: {fileID: 0}
+ m_DstState: {fileID: 1566214250506738524}
+ m_Solo: 0
+ m_Mute: 0
+ m_IsExit: 0
+ serializedVersion: 3
+ m_TransitionDuration: 0
+ m_TransitionOffset: 0
+ m_ExitTime: 1
+ m_HasExitTime: 1
+ m_HasFixedDuration: 1
+ m_InterruptionSource: 0
+ m_OrderedInterruption: 1
+ m_CanTransitionToSelf: 1
--- !u!1102 &-8227018334659877927
AnimatorState:
serializedVersion: 6
@@ -118,7 +140,7 @@ AnimatorStateMachine:
m_Position: {x: 200, y: 0, z: 0}
- serializedVersion: 1
m_State: {fileID: 3296953716140674633}
- m_Position: {x: 235, y: 65, z: 0}
+ m_Position: {x: 200, y: -130, z: 0}
- serializedVersion: 1
m_State: {fileID: 7743056096870309842}
m_Position: {x: 270, y: 130, z: 0}
@@ -130,7 +152,7 @@ AnimatorStateMachine:
m_Position: {x: 340, y: 260, z: 0}
- serializedVersion: 1
m_State: {fileID: -2055505054754996262}
- m_Position: {x: 375, y: 325, z: 0}
+ m_Position: {x: 420, y: 30, z: 0}
- serializedVersion: 1
m_State: {fileID: 7506107921285827103}
m_Position: {x: 410, y: 390, z: 0}
@@ -171,6 +193,28 @@ AnimatorStateMachine:
m_ExitPosition: {x: 800, y: 120, z: 0}
m_ParentStateMachinePosition: {x: 800, y: 20, z: 0}
m_DefaultState: {fileID: 1566214250506738524}
+--- !u!1101 &-4614138539304857086
+AnimatorStateTransition:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name:
+ m_Conditions: []
+ m_DstStateMachine: {fileID: 0}
+ m_DstState: {fileID: 1566214250506738524}
+ m_Solo: 0
+ m_Mute: 0
+ m_IsExit: 0
+ serializedVersion: 3
+ m_TransitionDuration: 0
+ m_TransitionOffset: 0
+ m_ExitTime: 1
+ m_HasExitTime: 1
+ m_HasFixedDuration: 1
+ m_InterruptionSource: 0
+ m_OrderedInterruption: 1
+ m_CanTransitionToSelf: 1
--- !u!1102 &-3055481183117655903
AnimatorState:
serializedVersion: 6
@@ -233,7 +277,8 @@ AnimatorState:
m_Name: DoubleTap
m_Speed: 1
m_CycleOffset: 0
- m_Transitions: []
+ m_Transitions:
+ - {fileID: -4614138539304857086}
m_StateMachineBehaviours: []
m_Position: {x: 50, y: 50, z: 0}
m_IKOnFeet: 0
@@ -249,6 +294,28 @@ AnimatorState:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
+--- !u!1101 &-1208883606983524581
+AnimatorStateTransition:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name:
+ m_Conditions: []
+ m_DstStateMachine: {fileID: 0}
+ m_DstState: {fileID: 1566214250506738524}
+ m_Solo: 0
+ m_Mute: 0
+ m_IsExit: 0
+ serializedVersion: 3
+ m_TransitionDuration: 0
+ m_TransitionOffset: 0
+ m_ExitTime: 1
+ m_HasExitTime: 1
+ m_HasFixedDuration: 1
+ m_InterruptionSource: 0
+ m_OrderedInterruption: 1
+ m_CanTransitionToSelf: 1
--- !u!1102 &-778023667584081209
AnimatorState:
serializedVersion: 6
@@ -359,7 +426,8 @@ AnimatorState:
m_Name: Tap
m_Speed: 1
m_CycleOffset: 0
- m_Transitions: []
+ m_Transitions:
+ - {fileID: -8536575254723551366}
m_StateMachineBehaviours: []
m_Position: {x: 50, y: 50, z: 0}
m_IKOnFeet: 0
@@ -463,7 +531,8 @@ AnimatorState:
m_Name: Bop
m_Speed: 1
m_CycleOffset: 0
- m_Transitions: []
+ m_Transitions:
+ - {fileID: -1208883606983524581}
m_StateMachineBehaviours: []
m_Position: {x: 50, y: 50, z: 0}
m_IKOnFeet: 0
diff --git a/Assets/Resources/Sprites/Games/TapTrial/Animations/Player.controller b/Assets/Resources/Sprites/Games/TapTrial/Animations/Player.controller
index 95392ee00..7dcdd4ee7 100644
--- a/Assets/Resources/Sprites/Games/TapTrial/Animations/Player.controller
+++ b/Assets/Resources/Sprites/Games/TapTrial/Animations/Player.controller
@@ -252,6 +252,28 @@ AnimatorStateTransition:
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
+--- !u!1101 &-1969844649597885357
+AnimatorStateTransition:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name:
+ m_Conditions: []
+ m_DstStateMachine: {fileID: 0}
+ m_DstState: {fileID: 7840951289603236239}
+ m_Solo: 0
+ m_Mute: 0
+ m_IsExit: 0
+ serializedVersion: 3
+ m_TransitionDuration: 0
+ m_TransitionOffset: 0
+ m_ExitTime: 1
+ m_HasExitTime: 1
+ m_HasFixedDuration: 1
+ m_InterruptionSource: 0
+ m_OrderedInterruption: 1
+ m_CanTransitionToSelf: 1
--- !u!1102 &-1428195464489766086
AnimatorState:
serializedVersion: 6
@@ -337,7 +359,8 @@ AnimatorState:
m_Name: Bop
m_Speed: 1
m_CycleOffset: 0
- m_Transitions: []
+ m_Transitions:
+ - {fileID: -1969844649597885357}
m_StateMachineBehaviours: []
m_Position: {x: 50, y: 50, z: 0}
m_IKOnFeet: 0
@@ -424,7 +447,7 @@ AnimatorStateMachine:
m_Position: {x: 485, y: 275, z: 0}
- serializedVersion: 1
m_State: {fileID: 1339875481458272543}
- m_Position: {x: 520, y: 340, z: 0}
+ m_Position: {x: 10, y: -110, z: 0}
- serializedVersion: 1
m_State: {fileID: -7296182608361541101}
m_Position: {x: 555, y: 405, z: 0}
diff --git a/Assets/Scripts/Games/AirRally/AirRally.cs b/Assets/Scripts/Games/AirRally/AirRally.cs
index 4b8573739..a89d9bb66 100644
--- a/Assets/Scripts/Games/AirRally/AirRally.cs
+++ b/Assets/Scripts/Games/AirRally/AirRally.cs
@@ -294,7 +294,7 @@ namespace HeavenStudio.Games
}
else
{
- tweenForForth = Forthington.gameObject.transform.DOMoveZ(wayPointZForForth, .15f).SetEase(Ease.InOutCubic);
+ tweenForForth = Forthington.gameObject.transform.DOMoveZ(wayPointZForForth, .7f).SetEase(Ease.OutQuad);
}
}
diff --git a/Assets/Scripts/Games/CatchyTune/CatchyTune.cs b/Assets/Scripts/Games/CatchyTune/CatchyTune.cs
index aaca593f3..493c40c24 100644
--- a/Assets/Scripts/Games/CatchyTune/CatchyTune.cs
+++ b/Assets/Scripts/Games/CatchyTune/CatchyTune.cs
@@ -40,12 +40,12 @@ namespace HeavenStudio.Games.Loaders
new GameAction("bop", "Bop")
{
- function = delegate {var e = eventCaller.currentEntity; CatchyTune.instance.Bop(e.beat, e["left"], e["right"]); },
- defaultLength = 1f,
+ function = delegate {var e = eventCaller.currentEntity; CatchyTune.instance.Bop(e.beat, e.length, e["bop"], e["bopAuto"]); },
+ resizable = true,
parameters = new List()
{
- new Param("left" , true, "Left", "Plalin bops head"),
- new Param("right", true, "Right", "Alalin bops head")
+ new Param("bop", CatchyTune.WhoBops.Both, "Bop", "Should Plalin and Alalin bop?"),
+ new Param("bopAuto", CatchyTune.WhoBops.None, "Bop", "Should Plalin and Alalin auto bop?"),
},
},
new GameAction("background", "Background")
@@ -80,6 +80,14 @@ namespace HeavenStudio.Games
Both
}
+ public enum WhoBops
+ {
+ Alalin,
+ Plalin,
+ Both,
+ None
+ }
+
public enum Background
{
Short,
@@ -265,10 +273,51 @@ namespace HeavenStudio.Games
newFruit.SetActive(true);
}
- public void Bop(float beat, bool left, bool right)
+ public void Bop(float beat, float length, int whoBops, int whoBopsAuto)
{
- bopLeft = left;
- bopRight = right;
+ 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.gameObject, new List()
+ {
+ new BeatAction.Action(beat + i, delegate
+ {
+ BopSingle(whoBops);
+ })
+ });
+ }
+ }
+
+ void BopSingle(int whoBops)
+ {
+ switch (whoBops)
+ {
+ case (int)WhoBops.Plalin:
+ if (stopCatchLeft == 0)
+ {
+ plalinAnim.Play("bop", 0, 0);
+ }
+ break;
+ case (int)WhoBops.Alalin:
+ if (stopCatchRight == 0)
+ {
+ alalinAnim.Play("bop", 0, 0);
+ }
+ break;
+ case (int)WhoBops.Both:
+ if (stopCatchRight == 0)
+ {
+ alalinAnim.Play("bop", 0, 0);
+ }
+ if (stopCatchLeft == 0)
+ {
+ plalinAnim.Play("bop", 0, 0);
+ }
+ break;
+ default:
+ break;
+ }
}
public void changeBG(int bg)
diff --git a/Assets/Scripts/Games/CheerReaders/CheerReaders.cs b/Assets/Scripts/Games/CheerReaders/CheerReaders.cs
index 6ee5a2ae8..5f77aec74 100644
--- a/Assets/Scripts/Games/CheerReaders/CheerReaders.cs
+++ b/Assets/Scripts/Games/CheerReaders/CheerReaders.cs
@@ -45,7 +45,7 @@ namespace HeavenStudio.Games.Loaders
new Param("solo", CheerReaders.WhoSpeaks.Both, "Who Speaks", "Who should say the voice line?")
}
},
- new GameAction("rahRahSisBoomBaBoom", "Rah Rah Sis Boom Ba Boom!")
+ new GameAction("rahRahSisBoomBaBoom", "Rah-Rah Sis Boom Bah-Boom!")
{
function = delegate {var e = eventCaller.currentEntity; CheerReaders.instance.RahRahSisBoomBaBoom(e.beat, e["solo"], e["consecutive"]); CheerReaders.instance.SetIsDoingCue(e.beat, e.length);},
defaultLength = 4f,
@@ -82,16 +82,21 @@ namespace HeavenStudio.Games.Loaders
},
new GameAction("yay", "Yay")
{
- function = delegate {CheerReaders.instance.Yay(); },
- defaultLength = 0.5f
- },
- new GameAction("bop", "Bop")
- {
- function = delegate {var e = eventCaller.currentEntity; CheerReaders.instance.BopToggle(e["toggle"]); },
+ function = delegate {CheerReaders.instance.Yay(eventCaller.currentEntity["solo"]); },
defaultLength = 0.5f,
parameters = new List()
{
- new Param("toggle", false, "Should bop?", "Should the nerds bop?")
+ new Param("solo", CheerReaders.WhoSpeaks.Both, "Who Speaks", "Who should say the voice line?"),
+ }
+ },
+ new GameAction("bop", "Bop")
+ {
+ function = delegate {var e = eventCaller.currentEntity; CheerReaders.instance.BopToggle(e.beat, e.length, e["toggle"], e["toggle2"]); },
+ resizable = true,
+ parameters = new List()
+ {
+ new Param("toggle", true, "Should bop?", "Should the nerds bop?"),
+ new Param("toggle2", false, "Should auto bop?", "Should the nerds auto bop?")
}
},
new GameAction("resetPose", "Reset Pose")
@@ -214,21 +219,9 @@ namespace HeavenStudio.Games
void Update()
{
var cond = Conductor.instance;
- if (cond.ReportBeat(ref bop.lastReportedBeat, bop.startBeat % 1) && shouldBop && canBop)
+ if (cond.ReportBeat(ref bop.lastReportedBeat, bop.startBeat % 1) && shouldBop)
{
- foreach (var nerd in firstRow)
- {
- nerd.Bop();
- }
- foreach (var nerd in secondRow)
- {
- nerd.Bop();
- }
- foreach (var nerd in thirdRow)
- {
- nerd.Bop();
- }
- player.Bop();
+ BopSingle();
}
if (cond.isPlaying && !cond.isPaused)
@@ -370,7 +363,7 @@ namespace HeavenStudio.Games
}
}
- public void Yay()
+ public void Yay(int whoSpeaks)
{
if (!shouldYay) return;
if (shouldBeBlack)
@@ -381,11 +374,6 @@ namespace HeavenStudio.Games
{
whiteYayParticle.Play();
}
- foreach (var nerd in allGirls)
- {
- nerd.Yay();
- }
- player.Yay();
playerMask.SetActive(false);
missPoster.SetActive(false);
foreach (var mask in topMasks)
@@ -400,12 +388,71 @@ namespace HeavenStudio.Games
{
mask.SetActive(false);
}
- Jukebox.PlayOneShotGame("cheerReaders/All/yay");
+ switch (whoSpeaks)
+ {
+ case (int)WhoSpeaks.Solo:
+ Jukebox.PlayOneShotGame("cheerReaders/Solo/yayS");
+ player.Yay(true);
+ foreach (var nerd in allGirls)
+ {
+ nerd.Yay(true);
+ }
+ break;
+ case (int)WhoSpeaks.Girls:
+ Jukebox.PlayOneShotGame("cheerReaders/Girls/yayGirls");
+ foreach (var nerd in allGirls)
+ {
+ nerd.Yay(true);
+ }
+ player.Yay(false);
+ break;
+ default:
+ Jukebox.PlayOneShotGame("cheerReaders/All/yay");
+ foreach (var nerd in allGirls)
+ {
+ nerd.Yay(true);
+ }
+ player.Yay(true);
+ break;
+ }
}
- public void BopToggle(bool startBop)
+ public void BopToggle(float beat, float length, bool startBop, bool bopAuto)
{
- shouldBop = startBop;
+ shouldBop = bopAuto;
+ if (startBop)
+ {
+ for (int i = 0; i < length; i++)
+ {
+ BeatAction.New(instance.gameObject, new List()
+ {
+ new BeatAction.Action(beat + i, delegate
+ {
+ BopSingle();
+ })
+ });
+ }
+ }
+ }
+
+ void BopSingle()
+ {
+ if (canBop)
+ {
+ foreach (var nerd in firstRow)
+ {
+ nerd.Bop();
+ }
+ foreach (var nerd in secondRow)
+ {
+ nerd.Bop();
+ }
+ foreach (var nerd in thirdRow)
+ {
+ nerd.Bop();
+ }
+ player.Bop();
+ }
}
public void SetIsDoingCue(float beat, float length, bool shouldSwitchColor = true)
@@ -418,7 +465,7 @@ namespace HeavenStudio.Games
player.ResetFace();
doingCue = true;
cueBeat = beat;
- cueLength = length;
+ cueLength = length - 1f;
if (!shouldSwitchColor) return;
BeatAction.New(instance.gameObject, new List()
{
@@ -547,7 +594,7 @@ namespace HeavenStudio.Games
break;
}
}),
- new BeatAction.Action(beat + 2.99f, delegate
+ new BeatAction.Action(beat + 2.5f, delegate
{
if (!doingCue) canBop = true;
})
@@ -705,7 +752,7 @@ namespace HeavenStudio.Games
break;
}
}),
- new BeatAction.Action(beat + 2.99f, delegate
+ new BeatAction.Action(beat + 2.5f, delegate
{
if (!doingCue) canBop = true;
})
@@ -891,7 +938,7 @@ namespace HeavenStudio.Games
break;
}
}),
- new BeatAction.Action(beat + 2.99f, delegate
+ new BeatAction.Action(beat + 2.5f, delegate
{
if (!doingCue) canBop = true;
})
@@ -1101,7 +1148,7 @@ namespace HeavenStudio.Games
break;
}
}),
- new BeatAction.Action(beat + 2.99f, delegate
+ new BeatAction.Action(beat + 3.5f, delegate
{
if (!doingCue) canBop = true;
})
diff --git a/Assets/Scripts/Games/CheerReaders/RvlCharacter.cs b/Assets/Scripts/Games/CheerReaders/RvlCharacter.cs
index 8872e05f2..a0c4b8cdc 100644
--- a/Assets/Scripts/Games/CheerReaders/RvlCharacter.cs
+++ b/Assets/Scripts/Games/CheerReaders/RvlCharacter.cs
@@ -52,9 +52,9 @@ namespace HeavenStudio.Games.Scripts_CheerReaders
faceAnim.Play(player ? "FaceItsOnHappy" : "FaceItsOnNPC", 0, 0);
}
- public void Yay()
+ public void Yay(bool speak)
{
- faceAnim.DoScaledAnimationAsync("FaceYay", 0.5f);
+ if (speak) faceAnim.DoScaledAnimationAsync("FaceYay", 0.5f);
BaseAnim.DoScaledAnimationAsync(bookIsWhite ? "WhiteYay" : "BlackYay", 0.5f);
}
diff --git a/Assets/Scripts/Games/ClappyTrio/ClappyTrio.cs b/Assets/Scripts/Games/ClappyTrio/ClappyTrio.cs
index b43cea3b8..32f7cc5aa 100644
--- a/Assets/Scripts/Games/ClappyTrio/ClappyTrio.cs
+++ b/Assets/Scripts/Games/ClappyTrio/ClappyTrio.cs
@@ -19,7 +19,13 @@ namespace HeavenStudio.Games.Loaders
},
new GameAction("bop", "Bop")
{
- function = delegate { ClappyTrio.instance.Bop(eventCaller.currentEntity.beat); }
+ function = delegate { var e = eventCaller.currentEntity; ClappyTrio.instance.BopToggle(e.beat, e.length, e["bop"], e["autoBop"]); },
+ resizable = true,
+ parameters = new List()
+ {
+ new Param("bop", true, "Bop", "Should the lions bop?"),
+ new Param("autoBop", false, "Bop (Auto)", "Should the lions auto bop?")
+ }
},
new GameAction("prepare", "Prepare Stance")
{
@@ -69,6 +75,9 @@ namespace HeavenStudio.Games
private ClappyTrioPlayer ClappyTrioPlayer;
public bool playerHitLast = false;
+ bool shouldBop;
+
+ public GameEvent bop = new GameEvent();
public static ClappyTrio instance { get; set; }
@@ -90,6 +99,15 @@ namespace HeavenStudio.Games
}
}
+ void Update()
+ {
+ var cond = Conductor.instance;
+ if (cond.ReportBeat(ref bop.lastReportedBeat, bop.startBeat % 1))
+ {
+ if (shouldBop) Bop(cond.songPositionInBeats);
+ }
+ }
+
private void InitLions()
{
float startPos = -3.066667f;
@@ -119,11 +137,6 @@ namespace HeavenStudio.Games
clapAction.Delete();
}
- private void Update()
- {
-
- }
-
public void Clap(float beat, float length)
{
ClappyTrioPlayer.clapStarted = true;
@@ -158,6 +171,22 @@ namespace HeavenStudio.Games
Jukebox.PlayOneShotGame("clappyTrio/ready");
}
+ public void BopToggle(float beat, float length, bool startBop, bool autoBop)
+ {
+ shouldBop = autoBop;
+ if (startBop)
+ {
+ for (int i = 0; i < length; i++)
+ {
+ float spawnBeat = beat + i;
+ BeatAction.New(instance.gameObject, new List()
+ {
+ new BeatAction.Action(spawnBeat, delegate { Bop(spawnBeat); })
+ });
+ }
+ }
+ }
+
public void Bop(float beat)
{
if (playerHitLast)
diff --git a/Assets/Scripts/Games/DrummingPractice/Drummer.cs b/Assets/Scripts/Games/DrummingPractice/Drummer.cs
index f668e2d8f..c4768ce71 100644
--- a/Assets/Scripts/Games/DrummingPractice/Drummer.cs
+++ b/Assets/Scripts/Games/DrummingPractice/Drummer.cs
@@ -24,6 +24,8 @@ namespace HeavenStudio.Games.Scripts_DrummingPractice
private bool hitting = false;
+ private float canBopBeat = -2f;
+
// in the future: use the MiiStudio API to render any mii from a nintendo account / MNMS / Mii Studio code?
// figure out how to call the API from unity?
// used expressions: "normal", "smile", "sorrow"
@@ -53,12 +55,13 @@ namespace HeavenStudio.Games.Scripts_DrummingPractice
public void Bop()
{
- if (animator.IsAnimationNotPlaying())
+ if (Conductor.instance.GetPositionFromBeat(canBopBeat, 2f) > 1f)
animator.Play("Bop", 0, 0);
}
- public void Prepare(int type)
+ public void Prepare(float beat, int type)
{
+ canBopBeat = beat;
count = type;
if (count % 2 == 0)
animator.Play("PrepareLeft", 0, 0);
diff --git a/Assets/Scripts/Games/DrummingPractice/DrummingPractice.cs b/Assets/Scripts/Games/DrummingPractice/DrummingPractice.cs
index 3dc02d8c9..11674fdf8 100644
--- a/Assets/Scripts/Games/DrummingPractice/DrummingPractice.cs
+++ b/Assets/Scripts/Games/DrummingPractice/DrummingPractice.cs
@@ -16,9 +16,13 @@ namespace HeavenStudio.Games.Loaders
{
new GameAction("bop", "Bop")
{
- function = delegate { var e = eventCaller.currentEntity; DrummingPractice.instance.SetBop(e.beat, e.length); },
- defaultLength = 1f,
- resizable = true
+ function = delegate { var e = eventCaller.currentEntity; DrummingPractice.instance.SetBop(e.beat, e.length, e["bop"], e["autoBop"]); },
+ resizable = true,
+ parameters = new List()
+ {
+ new Param("bop", true, "Bop", "Should the drummers bop?"),
+ new Param("autoBop", true, "Bop (Auto)", "Should the drummers auto bop?")
+ }
},
new GameAction("drum", "Hit Drum")
{
@@ -105,6 +109,7 @@ namespace HeavenStudio.Games
bool isMoving;
string moveAnim;
EasingFunction.Ease lastEase;
+ bool goBop = true;
public GameEvent bop = new GameEvent();
public int count = 0;
@@ -131,7 +136,7 @@ namespace HeavenStudio.Games
var cond = Conductor.instance;
if (cond.ReportBeat(ref bop.lastReportedBeat, bop.startBeat % 1))
{
- if (cond.songPositionInBeats >= bop.startBeat && Conductor.instance.songPositionInBeats < bop.startBeat + bop.length)
+ if (goBop)
{
Bop();
}
@@ -140,9 +145,12 @@ namespace HeavenStudio.Games
if (isMoving && cond.isPlaying && !cond.isPaused)
{
float normalizedBeat = cond.GetPositionFromBeat(movingStartBeat, movingLength);
- EasingFunction.Function func = EasingFunction.GetEasingFunction(lastEase);
- float newPos = func(0f, 1f, normalizedBeat);
- NPCDrummers.DoNormalizedAnimation(moveAnim, newPos);
+ if (normalizedBeat >= 0 && normalizedBeat <= 1f)
+ {
+ EasingFunction.Function func = EasingFunction.GetEasingFunction(lastEase);
+ float newPos = func(0f, 1f, normalizedBeat);
+ NPCDrummers.DoNormalizedAnimation(moveAnim, newPos);
+ }
}
foreach (SpriteRenderer streak in streaks)
@@ -165,10 +173,19 @@ namespace HeavenStudio.Games
});
}
- public void SetBop(float beat, float length)
+ public void SetBop(float beat, float length, bool shouldBop, bool autoBop)
{
- bop.startBeat = beat;
- bop.length = length;
+ goBop = autoBop;
+ if (shouldBop)
+ {
+ for (int i = 0; i < length; i++)
+ {
+ BeatAction.New(instance.gameObject, new List()
+ {
+ new BeatAction.Action(beat + i, delegate { Bop(); })
+ });
+ }
+ }
}
public void Bop()
@@ -181,9 +198,9 @@ namespace HeavenStudio.Games
public void Prepare(float beat, bool applause)
{
int type = count % 2;
- player.Prepare(type);
- leftDrummer.Prepare(type);
- rightDrummer.Prepare(type);
+ player.Prepare(beat, type);
+ leftDrummer.Prepare(beat, type);
+ rightDrummer.Prepare(beat, type);
count++;
SetFaces(0);
diff --git a/Assets/Scripts/Games/FanClub/FanClub.cs b/Assets/Scripts/Games/FanClub/FanClub.cs
index 11568c2f6..bad701532 100644
--- a/Assets/Scripts/Games/FanClub/FanClub.cs
+++ b/Assets/Scripts/Games/FanClub/FanClub.cs
@@ -15,12 +15,12 @@ namespace HeavenStudio.Games.Loaders
{
new GameAction("bop", "Bop")
{
- function = delegate { var e = eventCaller.currentEntity; FanClub.instance.Bop(e.beat, e.length, e["type"]); },
- defaultLength = 0.5f,
- resizable = true,
+ function = delegate { var e = eventCaller.currentEntity; FanClub.instance.Bop(e.beat, e.length, e["type"], e["type2"]); },
+ resizable = true,
parameters = new List()
{
new Param("type", FanClub.IdolBopType.Both, "Bop target", "Who to make bop"),
+ new Param("type2", FanClub.IdolBopType.None, "Bop target (Auto)", "Who to make auto bop"),
}
},
new GameAction("yeah, yeah, yeah", "Yeah, Yeah, Yeah!")
@@ -105,7 +105,8 @@ namespace HeavenStudio.Games
public enum IdolBopType {
Both,
Idol,
- Spectators
+ Spectators,
+ None
}
public enum IdolAnimations {
Bop,
@@ -178,6 +179,8 @@ namespace HeavenStudio.Games
private static float wantBigReady = Single.MinValue;
public float idolJumpStartTime = Single.MinValue;
private bool hasJumped = false;
+ private bool goBopIdol = true;
+ private bool goBopSpec = true;
//game scene
public static FanClub instance;
@@ -282,7 +285,7 @@ namespace HeavenStudio.Games
var cond = Conductor.instance;
if (cond.ReportBeat(ref bop.lastReportedBeat, bop.startBeat % 1))
{
- if (cond.songPositionInBeats >= bop.startBeat && cond.songPositionInBeats < bop.startBeat + bop.length)
+ if (goBopIdol)
{
if (!(cond.songPositionInBeats >= noBop.startBeat && cond.songPositionInBeats < noBop.startBeat + noBop.length))
idolAnimator.Play("IdolBeat" + GetPerformanceSuffix(), 0, 0);
@@ -291,7 +294,7 @@ namespace HeavenStudio.Games
if (cond.ReportBeat(ref specBop.lastReportedBeat, specBop.startBeat % 1))
{
- if (cond.songPositionInBeats >= specBop.startBeat && cond.songPositionInBeats < specBop.startBeat + specBop.length)
+ if (goBopSpec)
{
if (!(cond.songPositionInBeats >= noSpecBop.startBeat && cond.songPositionInBeats < noSpecBop.startBeat + noSpecBop.length))
BopAll();
@@ -324,22 +327,36 @@ namespace HeavenStudio.Games
}
}
- public void Bop(float beat, float length, int target = (int) IdolBopType.Both)
+ public void Bop(float beat, float length, int target = (int) IdolBopType.Both, int targetAuto = (int)IdolBopType.Both)
{
- if (target == (int) IdolBopType.Both || target == (int) IdolBopType.Idol)
+ 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++)
{
- bop.length = length;
- bop.startBeat = beat;
+ BeatAction.New(instance.gameObject, new List()
+ {
+ new BeatAction.Action(beat + i, delegate { BopSingle(target); })
+ });
}
-
- if (target == (int) IdolBopType.Both || target == (int) IdolBopType.Spectators)
- SpecBop(beat, length);
}
- public void SpecBop(float beat, float length)
+ void BopSingle(int target)
{
- specBop.length = length;
- specBop.startBeat = beat;
+ switch (target)
+ {
+ case (int)IdolBopType.Idol:
+ idolAnimator.Play("IdolBeat" + GetPerformanceSuffix(), 0, 0);
+ break;
+ case (int)IdolBopType.Spectators:
+ BopAll();
+ break;
+ case (int)IdolBopType.Both:
+ idolAnimator.Play("IdolBeat" + GetPerformanceSuffix(), 0, 0);
+ BopAll();
+ break;
+ default:
+ break;
+ }
}
private void DisableBop(float beat, float length)
diff --git a/Assets/Scripts/Games/KarateMan/KarateMan.cs b/Assets/Scripts/Games/KarateMan/KarateMan.cs
index 8b13018f4..da31668f4 100644
--- a/Assets/Scripts/Games/KarateMan/KarateMan.cs
+++ b/Assets/Scripts/Games/KarateMan/KarateMan.cs
@@ -15,11 +15,12 @@ namespace HeavenStudio.Games.Loaders
{
new GameAction("bop", "Bop")
{
- function = delegate { KarateMan.instance.ToggleBop(eventCaller.currentEntity["toggle"]); },
- defaultLength = 0.5f,
+ function = delegate { var e = eventCaller.currentEntity; KarateMan.instance.ToggleBop(e.beat, e.length, e["toggle2"], e["toggle"]); },
+ resizable = true,
parameters = new List()
{
- new Param("toggle", true, "Bop", "Whether to bop to the beat or not")
+ new Param("toggle2", true, "Bop", "Whether to bop to the beat or not"),
+ new Param("toggle", false, "Bop (Auto)", "Whether to auto bop to the beat or not")
},
inactiveFunction = delegate { KarateMan.ToggleBopUnloaded(eventCaller.currentEntity["toggle"]); }
},
@@ -476,7 +477,7 @@ namespace HeavenStudio.Games
SetBgAndShadowCol(WantBgChangeStart, WantBgChangeLength, bgType, (int) currentShadowType, bgColour, customShadowColour, (int)currentBgEffect);
SetBgTexture(textureType, textureFilterType, filterColour, filterColour);
UpdateMaterialColour(BodyColor, HighlightColor, ItemColor);
- ToggleBop(WantBop);
+ ToggleBop(0, 0, false, WantBop);
}
private void Update()
@@ -1033,12 +1034,22 @@ namespace HeavenStudio.Games
Wind.windMain = windStrength;
}
- public void ToggleBop(bool toggle)
+ public void ToggleBop(float beat, float length, bool toggle, bool autoBop)
{
+ Joe.shouldBop = autoBop;
if (toggle)
- Joe.bop.length = Single.MaxValue;
- else
- Joe.bop.length = 0;
+ {
+ for (int i = 0; i < length; i++)
+ {
+ BeatAction.New(instance.gameObject, new List()
+ {
+ new BeatAction.Action(beat + i, delegate
+ {
+ Joe.Bop();
+ })
+ });
+ }
+ }
}
public static void ToggleBopUnloaded(bool toggle)
diff --git a/Assets/Scripts/Games/KarateMan/KarateManJoe.cs b/Assets/Scripts/Games/KarateMan/KarateManJoe.cs
index 6ae31f3a6..bd68c01b3 100644
--- a/Assets/Scripts/Games/KarateMan/KarateManJoe.cs
+++ b/Assets/Scripts/Games/KarateMan/KarateManJoe.cs
@@ -13,6 +13,7 @@ namespace HeavenStudio.Games.Scripts_KarateMan
public Animator anim;
public Animator FaceAnim;
public GameEvent bop = new GameEvent();
+ public bool shouldBop = true;
public SpriteRenderer[] Shadows;
public Color BombGlowTint;
@@ -94,11 +95,9 @@ namespace HeavenStudio.Games.Scripts_KarateMan
anim.Play("Beat", -1, 0);
}
- if (cond.ReportBeat(ref bop.lastReportedBeat, bop.startBeat % 1, false) && cond.songPositionInBeats > bop.startBeat && cond.songPositionInBeats < bop.startBeat + bop.length && cond.songPositionInBeats >= unPrepareTime && !inCombo)
+ if (cond.ReportBeat(ref bop.lastReportedBeat, bop.startBeat % 1, false) && shouldBop && cond.songPositionInBeats >= unPrepareTime && !inCombo)
{
- anim.speed = 1f;
- anim.Play("Beat", -1, 0);
- lastChargeTime = Single.MinValue;
+ Bop();
}
if (inCombo && shouldComboId == -2)
@@ -182,6 +181,13 @@ namespace HeavenStudio.Games.Scripts_KarateMan
}
+ public void Bop()
+ {
+ anim.speed = 1f;
+ anim.Play("Beat", -1, 0);
+ lastChargeTime = Single.MinValue;
+ }
+
public bool Punch(int forceHand = 0)
{
if (GameManager.instance.currentGame != "karateman") return false;
diff --git a/Assets/Scripts/Games/Lockstep/Lockstep.cs b/Assets/Scripts/Games/Lockstep/Lockstep.cs
index 36126799b..9be8b6532 100644
--- a/Assets/Scripts/Games/Lockstep/Lockstep.cs
+++ b/Assets/Scripts/Games/Lockstep/Lockstep.cs
@@ -19,12 +19,13 @@ namespace HeavenStudio.Games.Loaders
{
new GameAction("bop", "Bop")
{
- function = delegate { var e = eventCaller.currentEntity; Lockstep.instance.Bop(e.beat, e["toggle"]); },
+ function = delegate { var e = eventCaller.currentEntity; Lockstep.instance.Bop(e.beat, e.length, e["toggle"], e["toggle2"]); },
+ resizable = true,
parameters = new List()
{
- new Param("toggle", false, "Reset Pose", "Resets to idle pose.")
+ new Param("toggle", true, "Bop", "Should the stepswitchers bop?"),
+ new Param("toggle2", false, "Bop (Auto)", "Should the stepswitchers auto bop?"),
},
- defaultLength = 1f,
},
new GameAction("marching", "Stepping")
{
@@ -115,6 +116,8 @@ namespace HeavenStudio.Games
MissedOn = 2
}
bool offColorActive;
+ bool goBop;
+ public GameEvent bop = new GameEvent();
public static Lockstep instance;
@@ -135,6 +138,15 @@ namespace HeavenStudio.Games
var cond = Conductor.instance;
if (cond.isPlaying && !cond.isPaused)
{
+ if (cond.ReportBeat(ref bop.lastReportedBeat, bop.startBeat % 1))
+ {
+ if (goBop)
+ {
+ stepswitcher0.DoScaledAnimationAsync("Bop", 0.5f);
+ stepswitcher1.DoScaledAnimationAsync("Bop", 0.5f);
+ stepswitcherP.DoScaledAnimationAsync("Bop", 0.5f);
+ }
+ }
if (queuedInputs.Count > 0)
{
foreach (var input in queuedInputs)
@@ -160,21 +172,23 @@ namespace HeavenStudio.Games
}
- public void Bop(float beat, bool reset)
+ public void Bop(float beat, float length, bool shouldBop, bool autoBop)
{
- if (reset)
+ goBop = autoBop;
+ if (shouldBop)
{
- stepswitcher0.DoScaledAnimationAsync("BopReset", 0.5f);
- stepswitcher1.DoScaledAnimationAsync("BopReset", 0.5f);
- stepswitcherP.DoScaledAnimationAsync("BopReset", 0.5f);
-
- }
- else
- {
- stepswitcher0.DoScaledAnimationAsync("Bop", 0.5f);
- stepswitcher1.DoScaledAnimationAsync("Bop", 0.5f);
- stepswitcherP.DoScaledAnimationAsync("Bop", 0.5f);
-
+ for (int i = 0; i < length; i++)
+ {
+ BeatAction.New(instance.gameObject, new List()
+ {
+ new BeatAction.Action(beat + i, delegate
+ {
+ stepswitcher0.DoScaledAnimationAsync("Bop", 0.5f);
+ stepswitcher1.DoScaledAnimationAsync("Bop", 0.5f);
+ stepswitcherP.DoScaledAnimationAsync("Bop", 0.5f);
+ })
+ });
+ }
}
}
diff --git a/Assets/Scripts/Games/MarchingOrders/MarchingOrders.cs b/Assets/Scripts/Games/MarchingOrders/MarchingOrders.cs
index 662d24649..212521d12 100644
--- a/Assets/Scripts/Games/MarchingOrders/MarchingOrders.cs
+++ b/Assets/Scripts/Games/MarchingOrders/MarchingOrders.cs
@@ -27,9 +27,14 @@ namespace HeavenStudio.Games.Loaders
{
new GameAction("bop", "Bop")
{
- function = delegate { var e = eventCaller.currentEntity; MarchingOrders.instance.BopAction(e.beat, e.length); },
+ function = delegate { var e = eventCaller.currentEntity; MarchingOrders.instance.BopAction(e.beat, e.length, e["bop"], e["autoBop"]); },
defaultLength = 1f,
- resizable = true
+ resizable = true,
+ parameters = new List()
+ {
+ new Param("bop", true, "Bop", "Should the cadets bop?"),
+ new Param("autoBop", false, "Bop (Auto)", "Should the cadets auto bop?")
+ }
},
new GameAction("marching", "Cadets March")
@@ -138,6 +143,7 @@ namespace HeavenStudio.Games
public static Color fillColor;
[Header("Game Events")]
+ bool goBop;
public GameEvent bop = new GameEvent();
public GameEvent noBop = new GameEvent();
public GameEvent marching = new GameEvent();
@@ -252,7 +258,7 @@ namespace HeavenStudio.Games
if (cond.ReportBeat(ref bop.lastReportedBeat, bop.startBeat % 1, true))
{
- if (currBeat >= bop.startBeat && currBeat < bop.startBeat + bop.length)
+ if (goBop)
{
Cadet1.DoScaledAnimationAsync("Bop", 0.5f);
Cadet2.DoScaledAnimationAsync("Bop", 0.5f);
@@ -310,10 +316,25 @@ namespace HeavenStudio.Games
}
}
- public void BopAction(float beat, float length)
+ public void BopAction(float beat, float length, bool shouldBop, bool autoBop)
{
- bop.length = length;
- bop.startBeat = beat;
+ goBop = autoBop;
+ if (shouldBop)
+ {
+ for (int i = 0; i < length; i++)
+ {
+ BeatAction.New(instance.gameObject, new List()
+ {
+ new BeatAction.Action(beat + i, delegate
+ {
+ Cadet1.DoScaledAnimationAsync("Bop", 0.5f);
+ Cadet2.DoScaledAnimationAsync("Bop", 0.5f);
+ Cadet3.DoScaledAnimationAsync("Bop", 0.5f);
+ CadetPlayer.DoScaledAnimationAsync("Bop", 0.5f);
+ })
+ });
+ }
+ }
}
public static void PreMarch(float beat, float length)
diff --git a/Assets/Scripts/Games/MeatGrinder/MeatGrinder.cs b/Assets/Scripts/Games/MeatGrinder/MeatGrinder.cs
index f193174ac..6255d56c6 100644
--- a/Assets/Scripts/Games/MeatGrinder/MeatGrinder.cs
+++ b/Assets/Scripts/Games/MeatGrinder/MeatGrinder.cs
@@ -49,13 +49,14 @@ namespace HeavenStudio.Games.Loaders
{
function = delegate {
var e = eventCaller.currentEntity;
- MeatGrinder.instance.Bop(e.beat, e["bossBop"]);
+ MeatGrinder.instance.Bop(e.beat, e.length, e["bop"], e["bossBop"]);
},
parameters = new List()
{
- new Param("bossBop", false, "Boss Bops?", "Does Boss bop?"),
+ new Param("bop", true, "Boss Bops?", "Does Boss bop?"),
+ new Param("bossBop", false, "Boss Bops? (Auto)", "Does Boss Auto bop?"),
},
- defaultLength = 0.5f,
+ resizable = true,
priority = 4,
},
});
@@ -144,9 +145,25 @@ namespace HeavenStudio.Games
};
}
- public void Bop(float beat, bool doesBop)
+ public void Bop(float beat, float length, bool doesBop, bool autoBop)
{
- bossBop = doesBop;
+ bossBop = autoBop;
+ if (doesBop)
+ {
+ for (int i = 0; i < length; i++)
+ {
+ BeatAction.New(instance.gameObject, new List()
+ {
+ new BeatAction.Action(beat + i, delegate
+ {
+ if (!BossAnim.IsPlayingAnimationName("BossCall") && !BossAnim.IsPlayingAnimationName("BossSignal"))
+ {
+ BossAnim.DoScaledAnimationAsync(bossAnnoyed ? "BossMiss" : "Bop", 0.5f);
+ };
+ })
+ });
+ }
+ }
}
public static void PreInterval(float beat, float interval)
diff --git a/Assets/Scripts/Games/RhythmRally/RhythmRally.cs b/Assets/Scripts/Games/RhythmRally/RhythmRally.cs
index 945490cdb..256b27b48 100644
--- a/Assets/Scripts/Games/RhythmRally/RhythmRally.cs
+++ b/Assets/Scripts/Games/RhythmRally/RhythmRally.cs
@@ -16,9 +16,13 @@ namespace HeavenStudio.Games.Loaders
{
new GameAction("bop", "Bop")
{
- function = delegate { RhythmRally.instance.Bop(eventCaller.currentEntity.beat, eventCaller.currentEntity.length); },
- defaultLength = 0.5f,
- resizable = true
+ function = delegate {var e = eventCaller.currentEntity; RhythmRally.instance.Bop(e.beat, e.length, e["bop"], e["bopAuto"]); },
+ resizable = true,
+ parameters = new List()
+ {
+ new Param("bop", true, "Bop", "Will the paddlers bop?"),
+ new Param("bopAuto", false, "Bop (Auto)", "Will the paddlers auto bop?")
+ }
},
new GameAction("whistle", "Whistle")
{
@@ -27,25 +31,25 @@ namespace HeavenStudio.Games.Loaders
},
new GameAction("toss ball", "Toss Ball")
{
- function = delegate { RhythmRally.instance.Toss(eventCaller.currentEntity.beat, eventCaller.currentEntity.length, 6f, true); },
- defaultLength = 2f,
+ function = delegate { RhythmRally.instance.Toss(eventCaller.currentEntity.beat, eventCaller.currentEntity.length, 6f, true); },
+ defaultLength = 2f,
resizable = true
},
new GameAction("rally", "Rally")
{
- function = delegate { RhythmRally.instance.Serve(eventCaller.currentEntity.beat, RhythmRally.RallySpeed.Normal); },
- defaultLength = 4f,
+ function = delegate { RhythmRally.instance.Serve(eventCaller.currentEntity.beat, RhythmRally.RallySpeed.Normal); },
+ defaultLength = 4f,
resizable = true
},
new GameAction("slow rally", "Slow Rally")
{
- function = delegate { RhythmRally.instance.Serve(eventCaller.currentEntity.beat, RhythmRally.RallySpeed.Slow); },
- defaultLength = 8f,
+ function = delegate { RhythmRally.instance.Serve(eventCaller.currentEntity.beat, RhythmRally.RallySpeed.Slow); },
+ defaultLength = 8f,
resizable = true
},
new GameAction("fast rally", "Fast Rally")
{
- function = delegate { RhythmRally.instance.PrepareFastRally(eventCaller.currentEntity.beat, RhythmRally.RallySpeed.Fast, eventCaller.currentEntity["muteAudio"]); },
+ function = delegate { RhythmRally.instance.PrepareFastRally(eventCaller.currentEntity.beat, RhythmRally.RallySpeed.Fast, eventCaller.currentEntity["muteAudio"]); },
defaultLength = 6f,
parameters = new List()
{
@@ -54,16 +58,28 @@ namespace HeavenStudio.Games.Loaders
},
new GameAction("superfast rally", "Superfast Rally")
{
- function = delegate { RhythmRally.instance.PrepareFastRally(eventCaller.currentEntity.beat, RhythmRally.RallySpeed.SuperFast, eventCaller.currentEntity["muteAudio"]); },
+ function = delegate { RhythmRally.instance.PrepareFastRally(eventCaller.currentEntity.beat, RhythmRally.RallySpeed.SuperFast, eventCaller.currentEntity["muteAudio"]); },
defaultLength = 12f,
parameters = new List()
{
new Param("muteAudio", false, "Mute Cowbell", "Whether the cowbell sound should play or not.")
}
},
+ new GameAction("tonktinktonk", "Tonk-Tink-Tonk (Stretchable)")
+ {
+ preFunction = delegate {var e = eventCaller.currentEntity; RhythmRally.TonkTinkTonkStretchable(e.beat, e.length); },
+ defaultLength = 4f,
+ resizable = true
+ },
+ new GameAction("superfast stretchable", "Superfast Rally (Stretchable)")
+ {
+ function = delegate { var e = eventCaller.currentEntity; RhythmRally.instance.SuperFastRallyStretchable(e.beat, e.length); },
+ defaultLength = 8f,
+ resizable = true
+ },
new GameAction("pose", "End Pose")
{
- function = delegate { RhythmRally.instance.Pose(); },
+ function = delegate { RhythmRally.instance.Pose(); },
defaultLength = 0.5f
},
new GameAction("camera", "Camera Controls")
@@ -72,15 +88,15 @@ namespace HeavenStudio.Games.Loaders
var e = eventCaller.currentEntity;
var rotation = new Vector3(0, e["valA"], 0);
RhythmRally.instance.ChangeCameraAngle(rotation, e["valB"], e.length, (Ease)e["type"], (RotateMode)e["type2"]);
- },
- defaultLength = 4,
- resizable = true,
+ },
+ defaultLength = 4,
+ resizable = true,
parameters = new List() {
new Param("valA", new EntityTypes.Integer(-360, 360, 0), "Angle", "The rotation of the camera around the center of the table"),
new Param("valB", new EntityTypes.Float(0.5f, 4f, 1), "Zoom", "The camera's level of zoom (Lower value = Zoomed in)"),
new Param("type", Ease.Linear, "Ease", "The easing function to use"),
new Param("type2", RotateMode.Fast, "Rotation Mode", "The rotation mode to use")
- }
+ }
},
});
}
@@ -131,6 +147,7 @@ namespace HeavenStudio.Games
public Paddlers paddlers;
public GameEvent bop = new GameEvent();
+ private bool goBop = true;
public static RhythmRally instance;
@@ -343,23 +360,45 @@ namespace HeavenStudio.Games
// Paddler bop animation.
if (cond.ReportBeat(ref bop.lastReportedBeat, bop.startBeat % 1))
{
- if (currentBeat >= bop.startBeat && currentBeat < bop.startBeat + bop.length && !inPose)
+ if (goBop && !inPose)
{
- if (!playerPrepping && (playerAnim.IsAnimationNotPlaying() || playerState.IsName("Idle") || playerState.IsName("Beat")))
- playerAnim.DoScaledAnimationAsync("Beat", 0.5f);
-
- if (!opponentPrepping && !opponentServing && !tossing && (opponentAnim.IsAnimationNotPlaying() || opponentState.IsName("Idle") || opponentState.IsName("Beat")))
- opponentAnim.DoScaledAnimationAsync("Beat", 0.5f);
+ BopSingle();
}
}
opponentServing = false;
}
- public void Bop(float beat, float length)
+ public void Bop(float beat, float length, bool bop, bool bopAuto)
{
- bop.length = length;
- bop.startBeat = beat;
+ goBop = bopAuto;
+ if (bop)
+ {
+ for (int i = 0; i < length; i++)
+ {
+ BeatAction.New(instance.gameObject, new List()
+ {
+ new BeatAction.Action(beat + i, delegate
+ {
+ BopSingle();
+ })
+ });
+ }
+ }
+ }
+
+ void BopSingle()
+ {
+ var playerState = playerAnim.GetCurrentAnimatorStateInfo(0);
+ var opponentState = opponentAnim.GetCurrentAnimatorStateInfo(0);
+
+ bool playerPrepping = false; // Player using prep animation?
+ bool opponentPrepping = false; // Opponent using prep animation?
+ if (!playerPrepping && (playerAnim.IsAnimationNotPlaying() || playerState.IsName("Idle") || playerState.IsName("Beat")))
+ playerAnim.DoScaledAnimationAsync("Beat", 0.5f);
+
+ if (!opponentPrepping && !opponentServing && !tossing && (opponentAnim.IsAnimationNotPlaying() || opponentState.IsName("Idle") || opponentState.IsName("Beat")))
+ opponentAnim.DoScaledAnimationAsync("Beat", 0.5f);
}
public void Serve(float beat, RallySpeed speed)
@@ -469,36 +508,39 @@ namespace HeavenStudio.Games
});
if (muteAudio) return;
- MultiSound.Play(new MultiSound.Sound[]
- {
- new MultiSound.Sound("rhythmRally/Tonk", beat),
- new MultiSound.Sound("rhythmRally/Tink", beat + 0.5f),
- new MultiSound.Sound("rhythmRally/Tonk", beat + 1f)
- });
+ TonkTinkTonkStretchable(beat, 1.5f);
}
else if (speedChange == RallySpeed.SuperFast)
{
- BeatAction.New(gameObject, new List()
- {
- new BeatAction.Action(beat + 4f, delegate { Serve(beat + 4f, RallySpeed.SuperFast); }),
- new BeatAction.Action(beat + 6f, delegate { Serve(beat + 6f, RallySpeed.SuperFast); }),
- new BeatAction.Action(beat + 8f, delegate { Serve(beat + 8f, RallySpeed.SuperFast); }),
- new BeatAction.Action(beat + 10f, delegate { Serve(beat + 10f, RallySpeed.SuperFast); })
- });
+ SuperFastRallyStretchable(beat + 4f, 8f);
if (muteAudio) return;
- MultiSound.Play(new MultiSound.Sound[]
- {
- new MultiSound.Sound("rhythmRally/Tonk", beat),
- new MultiSound.Sound("rhythmRally/Tink", beat + 0.5f),
- new MultiSound.Sound("rhythmRally/Tonk", beat + 1f),
- new MultiSound.Sound("rhythmRally/Tink", beat + 1.5f),
- new MultiSound.Sound("rhythmRally/Tonk", beat + 2f),
- new MultiSound.Sound("rhythmRally/Tink", beat + 2.5f),
- new MultiSound.Sound("rhythmRally/Tonk", beat + 3f),
- new MultiSound.Sound("rhythmRally/Tink", beat + 3.5f)
- });
+ TonkTinkTonkStretchable(beat, 4f);
}
}
+
+ public static void TonkTinkTonkStretchable(float beat, float length)
+ {
+ List soundsToPlay = new List();
+ bool tink = false;
+ for (float i = 0; i < length; i += 0.5f)
+ {
+ soundsToPlay.Add(new MultiSound.Sound(tink ? "rhythmRally/Tink" : "rhythmRally/Tonk", beat + i));
+ tink = !tink;
+ }
+ MultiSound.Play(soundsToPlay.ToArray(), forcePlay: true);
+ }
+
+ public void SuperFastRallyStretchable(float beat, float length)
+ {
+ List servesToPerform = new List();
+
+ for (int i = 0; i < length; i += 2)
+ {
+ float beatToSpawn = beat + i;
+ servesToPerform.Add( new BeatAction.Action(beatToSpawn, delegate { Serve(beatToSpawn, RallySpeed.SuperFast); }) );
+ }
+ BeatAction.New(gameObject, servesToPerform);
+ }
}
}
\ No newline at end of file
diff --git a/Assets/Scripts/Games/RhythmSomen/RhythmSomen.cs b/Assets/Scripts/Games/RhythmSomen/RhythmSomen.cs
index 21f82f765..137c2a2a9 100644
--- a/Assets/Scripts/Games/RhythmSomen/RhythmSomen.cs
+++ b/Assets/Scripts/Games/RhythmSomen/RhythmSomen.cs
@@ -33,11 +33,12 @@ namespace HeavenStudio.Games.Loaders
},
new GameAction("bop", "Bop")
{
- function = delegate { var e = eventCaller.currentEntity; RhythmSomen.instance.ToggleBop(e["toggle"]); },
- defaultLength = 0.5f,
+ function = delegate { var e = eventCaller.currentEntity; RhythmSomen.instance.ToggleBop(e.beat, e.length, e["toggle2"], e["toggle"]); },
+ resizable = true,
parameters = new List()
{
- new Param("toggle", false, "Bop?", "Should the somen man bop or not?")
+ new Param("toggle2", true, "Bop", "Should the somen man bop?"),
+ new Param("toggle", false, "Bop (Auto)", "Should the somen man bop automatically?")
}
}
});
@@ -90,9 +91,22 @@ namespace HeavenStudio.Games
}
}
- public void ToggleBop(bool bopOrNah)
+ public void ToggleBop(float beat, float length, bool bopOrNah, bool autoBop)
{
- shouldBop = bopOrNah;
+ shouldBop = autoBop;
+ if (bopOrNah)
+ {
+ for (int i = 0; i < length; i++)
+ {
+ BeatAction.New(instance.gameObject, new List()
+ {
+ new BeatAction.Action(beat + i, delegate
+ {
+ SomenPlayer.Play("HeadBob", -1, 0);
+ })
+ });
+ }
+ }
}
public void DoFarCrane(float beat)
diff --git a/Assets/Scripts/Games/Ringside/Ringside.cs b/Assets/Scripts/Games/Ringside/Ringside.cs
index 371c56b74..331119d2a 100644
--- a/Assets/Scripts/Games/Ringside/Ringside.cs
+++ b/Assets/Scripts/Games/Ringside/Ringside.cs
@@ -45,14 +45,15 @@ namespace HeavenStudio.Games.Loaders
},
defaultLength = 4f
},
- new GameAction("toggleBop", "Toggle Bop")
+ new GameAction("toggleBop", "Bop")
{
- function = delegate {var e = eventCaller.currentEntity; Ringside.instance.ToggleBop(e["bop"]); },
+ function = delegate {var e = eventCaller.currentEntity; Ringside.instance.ToggleBop(e.beat, e.length, e["bop2"], e["bop"]); },
parameters = new List()
{
- new Param("bop", false, "Bop?", "Whether the wrestler should bop or not."),
+ new Param("bop2", true, "Bop?", "Whether the wrestler should bop or not."),
+ new Param("bop", false, "Bop? (Auto)", "Whether the wrestler should bop automatically or not."),
},
- defaultLength = 0.5f
+ resizable = true,
},
new GameAction("toggleSweat", "Toggle Sweat")
{
@@ -181,9 +182,6 @@ namespace HeavenStudio.Games
allCameraEvents = tempEvents;
UpdateCameraZoom();
-
- wrestlerAnim.Play("Idle", 0, 0);
- reporterAnim.Play("IdleReporter", 0, 0);
shouldNotInput = false;
shouldBop = true;
}
@@ -196,7 +194,7 @@ namespace HeavenStudio.Games
{
if (cond.ReportBeat(ref bop.lastReportedBeat, bop.startBeat % 1))
{
- if (wrestlerAnim.IsPlayingAnimationName("Idle") && shouldBop)
+ if ((wrestlerAnim.IsPlayingAnimationName("Idle") || wrestlerAnim.IsPlayingAnimationName("BopPec") || wrestlerAnim.IsPlayingAnimationName("Bop")) && shouldBop)
{
if (UnityEngine.Random.Range(1, 18) == 1)
{
@@ -286,9 +284,32 @@ namespace HeavenStudio.Games
}
- public void ToggleBop(bool startBopping)
+ public void ToggleBop(float beat, float length, bool startBopping, bool autoBop)
{
- shouldBop = startBopping;
+ shouldBop = autoBop;
+ if (startBopping)
+ {
+ for (int i = 0; i < length; i++)
+ {
+ BeatAction.New(instance.gameObject, new List()
+ {
+ new BeatAction.Action(beat + i, delegate
+ {
+ if ((wrestlerAnim.IsPlayingAnimationName("Idle") || wrestlerAnim.IsPlayingAnimationName("BopPec") || wrestlerAnim.IsPlayingAnimationName("Bop")))
+ {
+ if (UnityEngine.Random.Range(1, 18) == 1)
+ {
+ wrestlerAnim.DoScaledAnimationAsync("BopPec");
+ }
+ else
+ {
+ wrestlerAnim.DoScaledAnimationAsync("Bop");
+ }
+ }
+ })
+ });
+ }
+ }
}
public void ToggleSweat(bool shouldSweat)
diff --git a/Assets/Scripts/Games/SamuraiSliceNtr/SamuraiSliceNtr.cs b/Assets/Scripts/Games/SamuraiSliceNtr/SamuraiSliceNtr.cs
index 7fc2667a6..713d20f2e 100644
--- a/Assets/Scripts/Games/SamuraiSliceNtr/SamuraiSliceNtr.cs
+++ b/Assets/Scripts/Games/SamuraiSliceNtr/SamuraiSliceNtr.cs
@@ -15,6 +15,16 @@ namespace HeavenStudio.Games.Loaders
public static Minigame AddGame(EventCaller eventCaller) {
return new Minigame("samuraiSliceNtr", "Samurai Slice (DS)", "00165D", false, false, new List()
{
+ new GameAction("bop", "Bop")
+ {
+ function = delegate {var e = eventCaller.currentEntity; SamuraiSliceNtr.instance.Bop(e.beat, e.length, e["whoBops"], e["whoBopsAuto"]); },
+ resizable = true,
+ parameters = new List()
+ {
+ new Param("whoBops", SamuraiSliceNtr.WhoBops.Both, "Who Bops?", "Who will bop?"),
+ new Param("whoBopsAuto", SamuraiSliceNtr.WhoBops.None, "Who Bops? (Auto)", "Who will automatically begin bopping?")
+ }
+ },
new GameAction("melon", "Melon")
{
function = delegate
@@ -89,6 +99,17 @@ namespace HeavenStudio.Games
Melon2B2T,
}
+ public enum WhoBops
+ {
+ Samurai = 0,
+ Children = 1,
+ Both = 2,
+ None = 3
+ }
+
+ private bool goBopSamurai = true;
+ private bool goBopChild = true;
+
[Header("References")]
public NtrSamurai player;
public GameObject launcher;
@@ -121,8 +142,8 @@ namespace HeavenStudio.Games
var cond = Conductor.instance;
if (cond.ReportBeat(ref bop.lastReportedBeat, bop.startBeat % 1))
{
- player.Bop();
- childParent.GetComponent().Bop();
+ if (goBopSamurai) player.Bop();
+ if (goBopChild) childParent.GetComponent().Bop();
}
if (PlayerInput.AltPressed())
@@ -133,6 +154,38 @@ namespace HeavenStudio.Games
DoSlice();
}
+ public void Bop(float 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.gameObject, new List()
+ {
+ new BeatAction.Action(beat + i, delegate { BopSingle(whoBops); })
+ });
+ }
+ }
+
+ void BopSingle(int whoBops)
+ {
+ switch (whoBops)
+ {
+ case (int)WhoBops.Samurai:
+ player.Bop();
+ break;
+ case (int)WhoBops.Children:
+ childParent.GetComponent().Bop();
+ break;
+ case (int)WhoBops.Both:
+ player.Bop();
+ childParent.GetComponent().Bop();
+ break;
+ default:
+ break;
+ }
+ }
+
public void DoStep()
{
Jukebox.PlayOneShotGame("samuraiSliceNtr/ntrSamurai_launchThrough");
diff --git a/Assets/Scripts/Games/Tambourine/Tambourine.cs b/Assets/Scripts/Games/Tambourine/Tambourine.cs
index d94f86444..cf01ed9bc 100644
--- a/Assets/Scripts/Games/Tambourine/Tambourine.cs
+++ b/Assets/Scripts/Games/Tambourine/Tambourine.cs
@@ -41,12 +41,13 @@ namespace HeavenStudio.Games.Loaders
},
new GameAction("bop", "Bop")
{
- function = delegate {var e = eventCaller.currentEntity; Tambourine.instance.Bop(e.beat, e["whoBops"]); },
+ function = delegate {var e = eventCaller.currentEntity; Tambourine.instance.Bop(e.beat, e.length, e["whoBops"], e["whoBopsAuto"]); },
parameters = new List()
{
new Param("whoBops", Tambourine.WhoBops.Both, "Who Bops", "Who will bop."),
+ new Param("whoBopsAuto", Tambourine.WhoBops.None, "Who Bops (Auto)", "Who will auto bop."),
},
- defaultLength = 1f,
+ resizable = true,
priority = 4
},
new GameAction("success", "Success")
@@ -110,14 +111,18 @@ namespace HeavenStudio.Games
float beatInterval = 8f;
float misses;
bool frogPresent;
+ bool monkeyGoBop;
+ bool handsGoBop;
Tween bgColorTween;
+ public GameEvent bop = new GameEvent();
public enum WhoBops
{
Monkey,
Player,
- Both
+ Both,
+ None
}
static List queuedInputs = new List();
@@ -148,6 +153,17 @@ namespace HeavenStudio.Games
void Update()
{
+ if (Conductor.instance.ReportBeat(ref bop.lastReportedBeat, bop.startBeat % 1))
+ {
+ if (monkeyGoBop)
+ {
+ monkeyAnimator.Play("MonkeyBop", 0, 0);
+ }
+ if (handsGoBop)
+ {
+ handsAnimator.Play("Bop", 0, 0);
+ }
+ }
if (!Conductor.instance.isPlaying || Conductor.instance.isPaused)
{
if (queuedInputs.Count > 0) queuedInputs.Clear();
@@ -242,27 +258,41 @@ namespace HeavenStudio.Games
}
BeatAction.New(instance.gameObject, new List()
{
- new BeatAction.Action(beat + length + input.beatAwayFromStart, delegate { Bop(beat + length + input.beatAwayFromStart, (int)WhoBops.Monkey); })
+ new BeatAction.Action(beat + length + input.beatAwayFromStart, delegate { Bop(beat + length + input.beatAwayFromStart, 1, (int)WhoBops.Monkey, (int)WhoBops.None); })
});
}
queuedInputs.Clear();
}
- public void Bop(float beat, int whoBops)
+ public void Bop(float beat, float length, int whoBops, int whoBopsAuto)
{
- switch (whoBops)
+ monkeyGoBop = whoBopsAuto == (int)WhoBops.Monkey || whoBopsAuto == (int)WhoBops.Both;
+ handsGoBop = whoBopsAuto == (int)WhoBops.Player || whoBopsAuto == (int)WhoBops.Both;
+ for (int i = 0; i < length; i++)
{
- case (int) WhoBops.Monkey:
- monkeyAnimator.Play("MonkeyBop", 0, 0);
- break;
- case (int) WhoBops.Player:
- handsAnimator.Play("Bop", 0, 0);
- break;
- case (int) WhoBops.Both:
- monkeyAnimator.Play("MonkeyBop", 0, 0);
- handsAnimator.Play("Bop", 0, 0);
- break;
+ BeatAction.New(instance.gameObject, new List()
+ {
+ new BeatAction.Action(beat + i, delegate
+ {
+ switch (whoBops)
+ {
+ case (int) WhoBops.Monkey:
+ monkeyAnimator.Play("MonkeyBop", 0, 0);
+ break;
+ case (int) WhoBops.Player:
+ handsAnimator.Play("Bop", 0, 0);
+ break;
+ case (int) WhoBops.Both:
+ monkeyAnimator.Play("MonkeyBop", 0, 0);
+ handsAnimator.Play("Bop", 0, 0);
+ break;
+ default:
+ break;
+ }
+ })
+ });
}
+
}
public void SuccessFace(float beat)
diff --git a/Assets/Scripts/Games/TapTrial/TapTrial.cs b/Assets/Scripts/Games/TapTrial/TapTrial.cs
index 5eb1b896e..64160bffa 100644
--- a/Assets/Scripts/Games/TapTrial/TapTrial.cs
+++ b/Assets/Scripts/Games/TapTrial/TapTrial.cs
@@ -16,11 +16,12 @@ namespace HeavenStudio.Games.Loaders
{
new GameAction("bop", "Bop")
{
- function = delegate { TapTrial.instance.Bop(eventCaller.currentEntity["toggle"]); },
- defaultLength = .5f,
+ function = delegate { var e = eventCaller.currentEntity; TapTrial.instance.Bop(e.beat, e.length, e["toggle"], e["toggle2"]); },
+ resizable = true,
parameters = new List()
{
- new Param("toggle", false, "Bop", "Whether both will bop to the beat or not")
+ new Param("toggle", true, "Bop", "Whether both will bop to the beat or not"),
+ new Param("toggle2", false, "Bop (Auto)", "Whether both will bop automatically to the beat or not")
}
},
new GameAction("tap", "Tap")
@@ -106,7 +107,6 @@ namespace HeavenStudio.Games
[SerializeField] ScrollForTap scroll;
[SerializeField] GameObject giraffe;
bool goBop = true, isPrep;
- float lastReportedBeat = 0f;
bool hasJumped, isFinalJump;
public float jumpStartTime = Single.MinValue;
float jumpPos;
@@ -116,6 +116,8 @@ namespace HeavenStudio.Games
[SerializeField] GameObject bg;
bool giraffeIsIn;
+ public GameEvent bop = new GameEvent();
+
public static TapTrial instance { get; set; }
private void Awake()
@@ -125,18 +127,9 @@ namespace HeavenStudio.Games
private void Update()
{
- if (goBop && !isPrep)
+ if (Conductor.instance.ReportBeat(ref bop.lastReportedBeat, bop.startBeat % 1))
{
- if (Conductor.instance.ReportBeat(ref lastReportedBeat))
- {
- if (monkeys[0].IsPlayingAnimationName("Idle")) monkeys[0].DoScaledAnimationAsync("Bop", 0.5f);
- if (monkeys[1].IsPlayingAnimationName("Idle")) monkeys[1].DoScaledAnimationAsync("Bop", 0.5f);
- if (player.anim.IsPlayingAnimationName("Idle")) player.anim.DoScaledAnimationAsync("Bop", 0.5f);
- }
- else if (Conductor.instance.songPositionInBeats < lastReportedBeat)
- {
- lastReportedBeat = Mathf.Round(Conductor.instance.songPositionInBeats);
- }
+ if (goBop) SingleBop();
}
jumpPos = Conductor.instance.GetPositionFromBeat(jumpStartTime, 1f);
@@ -174,9 +167,29 @@ namespace HeavenStudio.Games
}
}
- public void Bop(bool isBopping)
+ void SingleBop()
{
- goBop = isBopping;
+ if (!isPrep)
+ {
+ if (monkeys[0].GetCurrentAnimatorStateInfo(0).IsName("Idle")) monkeys[0].DoScaledAnimationAsync("Bop", 0.5f);
+ if (monkeys[1].GetCurrentAnimatorStateInfo(0).IsName("Idle")) monkeys[1].DoScaledAnimationAsync("Bop", 0.5f);
+ if (player.anim.GetCurrentAnimatorStateInfo(0).IsName("Idle")) player.anim.DoScaledAnimationAsync("Bop", 0.5f);
+ }
+ }
+
+ public void Bop(float beat, float length, bool isBopping, bool autoBop)
+ {
+ goBop = autoBop;
+ if (isBopping)
+ {
+ for (int i = 0; i < length; i++)
+ {
+ BeatAction.New(instance.gameObject, new List()
+ {
+ new BeatAction.Action(beat + i, delegate { SingleBop(); })
+ });
+ }
+ }
}
public void Tap(float beat)
diff --git a/Assets/Scripts/Games/TapTroupe/TapTroupe.cs b/Assets/Scripts/Games/TapTroupe/TapTroupe.cs
index 1a5040a92..79fbbb980 100644
--- a/Assets/Scripts/Games/TapTroupe/TapTroupe.cs
+++ b/Assets/Scripts/Games/TapTroupe/TapTroupe.cs
@@ -39,9 +39,13 @@ namespace HeavenStudio.Games.Loaders
},
new GameAction("bop", "Bop")
{
- function = delegate {TapTroupe.instance.Bop(); },
- defaultLength = 1f,
-
+ function = delegate {var e = eventCaller.currentEntity; TapTroupe.instance.Bop(e.beat, e.length, e["bop"], e["bopAuto"]); },
+ resizable = true,
+ parameters = new List()
+ {
+ new Param("bop", true, "Bop", "Should the tappers bop?"),
+ new Param("bopAuto", false, "Bop (Auto)", "Should the tappers auto bop?")
+ }
},
new GameAction("spotlights", "Toggle Spotlights")
{
@@ -114,8 +118,10 @@ namespace HeavenStudio.Games
private bool shouldDoSecondBam;
private bool missedTaps;
private bool canSpit = true;
+ private bool goBop;
private bool useTutorialMissFace;
private TapTroupeTapper.TapAnim currentTapAnim;
+ public GameEvent bop = new GameEvent();
public struct QueuedSteps
{
public float beat;
@@ -186,6 +192,10 @@ namespace HeavenStudio.Games
var cond = Conductor.instance;
if (cond.isPlaying && !cond.isPaused)
{
+ if (cond.ReportBeat(ref bop.lastReportedBeat, bop.startBeat % 1) && goBop)
+ {
+ BopSingle();
+ }
if (queuedSteps.Count > 0)
{
foreach (var step in queuedSteps)
@@ -563,7 +573,25 @@ namespace HeavenStudio.Games
MultiSound.Play(soundsToPlay.ToArray(), forcePlay: true);
}
- public void Bop()
+ public void Bop(float beat, float length, bool shouldBop, bool autoBop)
+ {
+ goBop = autoBop;
+ if (shouldBop)
+ {
+ for (int i = 0; i < length; i++)
+ {
+ BeatAction.New(instance.gameObject, new List()
+ {
+ new BeatAction.Action(beat + i, delegate
+ {
+ BopSingle();
+ })
+ });
+ }
+ }
+ }
+
+ public void BopSingle()
{
playerTapper.Bop();
playerCorner.Bop();
diff --git a/Assets/Scripts/Games/TheDazzles/TheDazzles.cs b/Assets/Scripts/Games/TheDazzles/TheDazzles.cs
index 88ff2e99e..183b353ea 100644
--- a/Assets/Scripts/Games/TheDazzles/TheDazzles.cs
+++ b/Assets/Scripts/Games/TheDazzles/TheDazzles.cs
@@ -101,11 +101,12 @@ namespace HeavenStudio.Games.Loaders
},
new GameAction("bop", "Bop")
{
- function = delegate { TheDazzles.instance.shouldBop = eventCaller.currentEntity["toggle"]; },
- defaultLength = 0.5f,
+ function = delegate { var e = eventCaller.currentEntity; TheDazzles.instance.Bop(e.beat, e.length, e["toggle2"], e["toggle"]); },
+ resizable = true,
parameters = new List()
{
- new Param("toggle", false, "Should bop?", "Should the dazzles bop?")
+ new Param("toggle2", true, "Should bop?", "Should the dazzles bop?"),
+ new Param("toggle", false, "Should auto bop?", "Should the dazzles auto bop?")
}
},
@@ -295,6 +296,28 @@ namespace HeavenStudio.Games
}
}
+ public void Bop(float beat, float length, bool goBop, bool autoBop)
+ {
+ shouldBop = autoBop;
+ if (goBop)
+ {
+ for (int i = 0; i < length; i++)
+ {
+ BeatAction.New(instance.gameObject, new List()
+ {
+ new BeatAction.Action(beat + i, delegate
+ {
+ foreach (var girl in npcGirls)
+ {
+ girl.Bop();
+ }
+ player.Bop();
+ })
+ });
+ }
+ }
+ }
+
public void ForceHold()
{
shouldHold = true;
diff --git a/Assets/Scripts/Games/TrickClass/TrickClass.cs b/Assets/Scripts/Games/TrickClass/TrickClass.cs
index f9f14647e..d9d96ebe6 100644
--- a/Assets/Scripts/Games/TrickClass/TrickClass.cs
+++ b/Assets/Scripts/Games/TrickClass/TrickClass.cs
@@ -31,17 +31,16 @@ namespace HeavenStudio.Games.Loaders
},
defaultLength = 3,
},
- new GameAction("toggleBubble", "Toggle Speech Bubble")
+ new GameAction("bop", "Bop")
{
- function = delegate { TrickClass.instance.BubbleToggle(); },
- defaultLength = 1,
- },
- new GameAction("bop", "")
- {
- function = delegate { var e = eventCaller.currentEntity; TrickClass.instance.Bop(e.beat, e.length); },
+ function = delegate { var e = eventCaller.currentEntity; TrickClass.instance.Bop(e.beat, e.length, e["bop"], e["autoBop"]); },
resizable = true,
- hidden = true
- }
+ parameters = new List()
+ {
+ new Param("bop", true, "Bop", "Should the girl and boy bop?"),
+ new Param("autoBop", false, "Bop (Auto)", "Should the girl and boy auto bop?")
+ }
+ },
});
}
}
@@ -87,6 +86,7 @@ namespace HeavenStudio.Games
public static TrickClass instance;
public GameEvent bop = new GameEvent();
+ bool goBop = true;
public float playerCanDodge = Single.MinValue;
float playerBopStart = Single.MinValue;
@@ -107,7 +107,7 @@ namespace HeavenStudio.Games
private void Update()
{
var cond = Conductor.instance;
- if (cond.ReportBeat(ref bop.lastReportedBeat, bop.startBeat % 1))
+ if (cond.ReportBeat(ref bop.lastReportedBeat, bop.startBeat % 1) && goBop)
{
if (cond.songPositionInBeats > playerBopStart)
playerAnim.DoScaledAnimationAsync("Bop");
@@ -154,10 +154,27 @@ namespace HeavenStudio.Games
}
}
- public void Bop(float beat, float length)
+ public void Bop(float beat, float length, bool shouldBop, bool autoBop)
{
- bop.startBeat = beat;
- bop.length = length;
+ var cond = Conductor.instance;
+ goBop = autoBop;
+ if (shouldBop)
+ {
+ for (int i = 0; i < length; i++)
+ {
+ BeatAction.New(instance.gameObject, new List()
+ {
+ new BeatAction.Action(beat + i, delegate
+ {
+ if (cond.songPositionInBeats > playerBopStart)
+ playerAnim.DoScaledAnimationAsync("Bop");
+
+ if (cond.songPositionInBeats > girlBopStart)
+ girlAnim.DoScaledAnimationAsync("Bop");
+ })
+ });
+ }
+ }
}
public void BubbleToggle()