mirror of
https://github.com/RHeavenStudio/HeavenStudio.git
synced 2025-06-12 08:07:38 +02:00
Fan Club Retouch (#416)
* new sprites not done * more sprites more anim chanegs * almost done * INSANE * sheet done * its done * re-implement improved squat sprite * remove many unused assets allow games to be hidden in the editor * start animations of backup dancers * finish backup dancer animations * add effects to backup dancers' tree * add dancers to the prefab * import new sprites * backup dancers fully functional * game camera now updates in LateUpdate() * touched some anims * oops * oops 2 * add audience applause fix the mapped cellanim shaders --------- Co-authored-by: minenice55 <star.elementa@gmail.com>
This commit is contained in:
@ -60,11 +60,12 @@ namespace HeavenStudio.Games.Loaders
|
||||
},
|
||||
new GameAction("play idol animation", "Idol Coreography")
|
||||
{
|
||||
function = delegate { var e = eventCaller.currentEntity; FanClub.instance.PlayAnim(e.beat, e.length, e["type"]); },
|
||||
function = delegate { var e = eventCaller.currentEntity; FanClub.instance.PlayAnim(e.beat, e.length, e["type"], e["who"]); },
|
||||
resizable = true,
|
||||
parameters = new List<Param>()
|
||||
{
|
||||
new Param("type", FanClub.IdolAnimations.Bop, "Animation", "Animation to play")
|
||||
new Param("type", FanClub.IdolAnimations.Bop, "Animation", "Animation to play"),
|
||||
new Param("who", FanClub.IdolType.All, "Target Idol", "Target to play the animation on")
|
||||
}
|
||||
},
|
||||
new GameAction("play stage animation", "Stage Coreography")
|
||||
@ -76,6 +77,17 @@ namespace HeavenStudio.Games.Loaders
|
||||
new Param("type", FanClub.StageAnimations.Flash, "Animation", "Animation to play")
|
||||
}
|
||||
},
|
||||
new GameAction("friend walk", "Backup Dancers Entrance")
|
||||
{
|
||||
function = delegate { var e = eventCaller.currentEntity; FanClub.instance.DancerTravel(e.beat, e.length, e["exit"], e["instant"]); },
|
||||
defaultLength = 16f,
|
||||
resizable = true,
|
||||
parameters = new List<Param>()
|
||||
{
|
||||
new Param("exit", false, "Exit", "Backup dancers exit instead"),
|
||||
new Param("instant", false, "Instant Travel", "Backup dancers instantly finish their travel"),
|
||||
}
|
||||
},
|
||||
new GameAction("set performance type", "Coreography Type")
|
||||
{
|
||||
|
||||
@ -87,6 +99,10 @@ namespace HeavenStudio.Games.Loaders
|
||||
},
|
||||
inactiveFunction = delegate { var e = eventCaller.currentEntity; FanClub.SetPerformanceType(e["type"]); }
|
||||
},
|
||||
new GameAction("finish", "Applause")
|
||||
{
|
||||
function = delegate { var e = eventCaller.currentEntity; FanClub.instance.FinalCheer(e.beat); },
|
||||
},
|
||||
},
|
||||
new List<string>() {"ntr", "normal"},
|
||||
"ntridol", "jp",
|
||||
@ -138,38 +154,62 @@ namespace HeavenStudio.Games
|
||||
Arrange,
|
||||
// Tour(this one is fan made so ?)
|
||||
}
|
||||
public enum IdolType {
|
||||
All,
|
||||
Idol,
|
||||
LeftDancer,
|
||||
RightDancer
|
||||
}
|
||||
|
||||
// userdata here
|
||||
[Header("Animators")]
|
||||
//stage
|
||||
public Animator StageAnimator;
|
||||
[SerializeField] Animator StageAnimator;
|
||||
|
||||
[Header("Objects")]
|
||||
public GameObject Arisa;
|
||||
public GameObject ArisaRootMotion;
|
||||
public GameObject ArisaShadow;
|
||||
public GameObject spectator;
|
||||
public GameObject spectatorAnchor;
|
||||
// our girl
|
||||
[SerializeField] GameObject Arisa;
|
||||
[SerializeField] GameObject ArisaRootMotion;
|
||||
[SerializeField] GameObject ArisaShadow;
|
||||
|
||||
// spectators
|
||||
[SerializeField] GameObject spectator;
|
||||
[SerializeField] GameObject spectatorAnchor;
|
||||
|
||||
// backup dancers
|
||||
[SerializeField] NtrIdolAmie Blue;
|
||||
[SerializeField] NtrIdolAmie Orange;
|
||||
|
||||
[Header("References")]
|
||||
public Material spectatorMat;
|
||||
[SerializeField] Material spectatorMat;
|
||||
|
||||
// end userdata
|
||||
|
||||
public bool JudgementPaused { get => noJudgement; }
|
||||
public bool JudgementInputPaused { get => noJudgementInput; set => noJudgementInput = value;}
|
||||
|
||||
//arisa's animation controller
|
||||
private Animator idolAnimator;
|
||||
|
||||
// blue's animation controller
|
||||
private Animator backupRAnimator;
|
||||
|
||||
// orange's animation controller
|
||||
private Animator backupLAnimator;
|
||||
|
||||
//spectators
|
||||
private NtrIdolFan Player;
|
||||
private List<GameObject> Spectators;
|
||||
public NtrIdolFan Player;
|
||||
|
||||
//bop-type animations
|
||||
public GameEvent bop = new GameEvent();
|
||||
public GameEvent specBop = new GameEvent();
|
||||
public GameEvent noBop = new GameEvent();
|
||||
public GameEvent noResponse = new GameEvent();
|
||||
public GameEvent noCall = new GameEvent();
|
||||
public GameEvent noSpecBop = new GameEvent();
|
||||
private GameEvent bop = new GameEvent();
|
||||
private GameEvent specBop = new GameEvent();
|
||||
private GameEvent noBop = new GameEvent();
|
||||
private GameEvent noResponse = new GameEvent();
|
||||
private GameEvent noCall = new GameEvent();
|
||||
private GameEvent noSpecBop = new GameEvent();
|
||||
|
||||
private float idolJumpStartTime = Single.MinValue;
|
||||
private static int performanceType = (int) IdolPerformanceType.Normal;
|
||||
private bool responseToggle = false;
|
||||
private static float wantHais = Single.MinValue;
|
||||
@ -177,10 +217,11 @@ namespace HeavenStudio.Games
|
||||
private static int wantKamoneType = (int) KamoneResponseType.Through;
|
||||
private static bool wantKamoneAlt = false;
|
||||
private static float wantBigReady = Single.MinValue;
|
||||
public float idolJumpStartTime = Single.MinValue;
|
||||
private bool hasJumped = false;
|
||||
private bool goBopIdol = true;
|
||||
private bool goBopSpec = true;
|
||||
private bool noJudgement = false;
|
||||
private bool noJudgementInput = false;
|
||||
|
||||
//game scene
|
||||
public static FanClub instance;
|
||||
@ -192,6 +233,8 @@ namespace HeavenStudio.Games
|
||||
instance = this;
|
||||
Spectators = new List<GameObject>();
|
||||
idolAnimator = Arisa.GetComponent<Animator>();
|
||||
backupRAnimator = Blue.GetComponent<Animator>();
|
||||
backupLAnimator = Orange.GetComponent<Animator>();
|
||||
|
||||
// procedurally spawning the spectators
|
||||
// from middle of viewport:
|
||||
@ -239,6 +282,33 @@ namespace HeavenStudio.Games
|
||||
}
|
||||
|
||||
ToSpot();
|
||||
noJudgement = false;
|
||||
noJudgementInput = false;
|
||||
}
|
||||
|
||||
private void Start()
|
||||
{
|
||||
Blue.Init();
|
||||
Orange.Init();
|
||||
|
||||
var amieWalkEvts = EventCaller.GetAllInGameManagerList("fanClub", new string[] { "friend walk" });
|
||||
foreach (var e in amieWalkEvts)
|
||||
{
|
||||
if (e.beat <= Conductor.instance.songPositionInBeatsAsDouble)
|
||||
{
|
||||
DancerTravel(e.beat, e.length, e["exit"], e["instant"]);
|
||||
}
|
||||
}
|
||||
|
||||
FanClub.SetPerformanceType((int) IdolPerformanceType.Normal);
|
||||
var choreoTypeEvts = EventCaller.GetAllInGameManagerList("fanClub", new string[] { "set performance type" });
|
||||
foreach (var e in choreoTypeEvts)
|
||||
{
|
||||
if (e.beat <= Conductor.instance.songPositionInBeatsAsDouble)
|
||||
{
|
||||
FanClub.SetPerformanceType(e["type"]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static string GetPerformanceSuffix()
|
||||
@ -288,7 +358,11 @@ namespace HeavenStudio.Games
|
||||
if (goBopIdol)
|
||||
{
|
||||
if (!(cond.songPositionInBeats >= noBop.startBeat && cond.songPositionInBeats < noBop.startBeat + noBop.length))
|
||||
{
|
||||
idolAnimator.Play("IdolBeat" + GetPerformanceSuffix(), 0, 0);
|
||||
Blue.PlayAnimState("Beat");
|
||||
Orange.PlayAnimState("Beat");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -309,19 +383,12 @@ namespace HeavenStudio.Games
|
||||
hasJumped = true;
|
||||
float yMul = jumpPos * 2f - 1f;
|
||||
float yWeight = -(yMul*yMul) + 1f;
|
||||
//TODO: idol start position
|
||||
ArisaRootMotion.transform.localPosition = new Vector3(0, 2f * yWeight + 0.25f);
|
||||
ArisaShadow.transform.localScale = new Vector3((1f-yWeight*0.8f) * IDOL_SHADOW_SCALE, (1f-yWeight*0.8f) * IDOL_SHADOW_SCALE, 1f);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (hasJumped)
|
||||
{
|
||||
//DisableBop(cond.songPositionInBeats, 1.5f);
|
||||
//TODO: landing anim
|
||||
}
|
||||
idolJumpStartTime = Single.MinValue;
|
||||
//TODO: idol start position
|
||||
ArisaRootMotion.transform.localPosition = new Vector3(0, 0);
|
||||
ArisaShadow.transform.localScale = new Vector3(IDOL_SHADOW_SCALE, IDOL_SHADOW_SCALE, 1f);
|
||||
}
|
||||
@ -346,12 +413,16 @@ namespace HeavenStudio.Games
|
||||
{
|
||||
case (int)IdolBopType.Idol:
|
||||
idolAnimator.Play("IdolBeat" + GetPerformanceSuffix(), 0, 0);
|
||||
Blue.PlayAnimState("Beat");
|
||||
Orange.PlayAnimState("Beat");
|
||||
break;
|
||||
case (int)IdolBopType.Spectators:
|
||||
BopAll();
|
||||
break;
|
||||
case (int)IdolBopType.Both:
|
||||
idolAnimator.Play("IdolBeat" + GetPerformanceSuffix(), 0, 0);
|
||||
Blue.PlayAnimState("Beat");
|
||||
Orange.PlayAnimState("Beat");
|
||||
BopAll();
|
||||
break;
|
||||
default:
|
||||
@ -394,66 +465,74 @@ namespace HeavenStudio.Games
|
||||
}
|
||||
}
|
||||
|
||||
public void PlayAnim(float beat, float length, int type)
|
||||
public void PlayAnim(float beat, float length, int type, int who)
|
||||
{
|
||||
idolJumpStartTime = Single.MinValue;
|
||||
DisableResponse(beat, length + 0.5f);
|
||||
DisableBop(beat, length + 0.5f);
|
||||
DisableCall(beat, length + 0.5f);
|
||||
|
||||
switch (type)
|
||||
if (who is (int)IdolType.All or (int)IdolType.LeftDancer)
|
||||
Orange.PlayAnim(beat, length, type);
|
||||
if (who is (int)IdolType.All or (int)IdolType.RightDancer)
|
||||
Blue.PlayAnim(beat, length, type);
|
||||
|
||||
if (who is (int)IdolType.All or (int)IdolType.Idol)
|
||||
{
|
||||
case (int) IdolAnimations.Bop:
|
||||
idolAnimator.Play("IdolBeat" + GetPerformanceSuffix(), -1, 0);
|
||||
break;
|
||||
case (int) IdolAnimations.PeaceVocal:
|
||||
idolAnimator.Play("IdolPeace" + GetPerformanceSuffix(), -1, 0);
|
||||
break;
|
||||
case (int) IdolAnimations.Peace:
|
||||
idolAnimator.Play("IdolPeaceNoSync" + GetPerformanceSuffix(), -1, 0);
|
||||
break;
|
||||
case (int) IdolAnimations.Clap:
|
||||
idolAnimator.Play("IdolCrap" + GetPerformanceSuffix(), -1, 0);
|
||||
break;
|
||||
case (int) IdolAnimations.Call:
|
||||
BeatAction.New(Arisa, new List<BeatAction.Action>()
|
||||
switch (type)
|
||||
{
|
||||
case (int)IdolAnimations.Bop:
|
||||
idolAnimator.Play("IdolBeat" + GetPerformanceSuffix(), -1, 0);
|
||||
break;
|
||||
case (int)IdolAnimations.PeaceVocal:
|
||||
idolAnimator.Play("IdolPeace" + GetPerformanceSuffix(), -1, 0);
|
||||
break;
|
||||
case (int)IdolAnimations.Peace:
|
||||
idolAnimator.Play("IdolPeaceNoSync" + GetPerformanceSuffix(), -1, 0);
|
||||
break;
|
||||
case (int)IdolAnimations.Clap:
|
||||
idolAnimator.Play("IdolCrap" + GetPerformanceSuffix(), -1, 0);
|
||||
break;
|
||||
case (int)IdolAnimations.Call:
|
||||
BeatAction.New(Arisa, new List<BeatAction.Action>()
|
||||
{
|
||||
new BeatAction.Action(beat, delegate { Arisa.GetComponent<Animator>().Play("IdolCall0" + GetPerformanceSuffix(), -1, 0); }),
|
||||
new BeatAction.Action(beat + 0.75f, delegate { Arisa.GetComponent<Animator>().Play("IdolCall1" + GetPerformanceSuffix(), -1, 0); }),
|
||||
});
|
||||
break;
|
||||
case (int) IdolAnimations.Response:
|
||||
idolAnimator.Play("IdolResponse" + GetPerformanceSuffix(), -1, 0);
|
||||
break;
|
||||
case (int) IdolAnimations.Jump:
|
||||
DoIdolJump(beat, length);
|
||||
break;
|
||||
case (int) IdolAnimations.BigCall:
|
||||
BeatAction.New(Arisa, new List<BeatAction.Action>()
|
||||
break;
|
||||
case (int)IdolAnimations.Response:
|
||||
idolAnimator.Play("IdolResponse" + GetPerformanceSuffix(), -1, 0);
|
||||
break;
|
||||
case (int)IdolAnimations.Jump:
|
||||
DoIdolJump(beat, length);
|
||||
break;
|
||||
case (int)IdolAnimations.BigCall:
|
||||
BeatAction.New(Arisa, new List<BeatAction.Action>()
|
||||
{
|
||||
new BeatAction.Action(beat, delegate { Arisa.GetComponent<Animator>().Play("IdolBigCall0" + GetPerformanceSuffix(), -1, 0); }),
|
||||
new BeatAction.Action(beat + length, delegate { Arisa.GetComponent<Animator>().Play("IdolBigCall1" + GetPerformanceSuffix(), -1, 0); }),
|
||||
});
|
||||
break;
|
||||
case (int) IdolAnimations.Squat:
|
||||
BeatAction.New(Arisa, new List<BeatAction.Action>()
|
||||
break;
|
||||
case (int)IdolAnimations.Squat:
|
||||
BeatAction.New(Arisa, new List<BeatAction.Action>()
|
||||
{
|
||||
new BeatAction.Action(beat, delegate { Arisa.GetComponent<Animator>().Play("IdolSquat0" + GetPerformanceSuffix(), -1, 0); }),
|
||||
new BeatAction.Action(beat + length, delegate { Arisa.GetComponent<Animator>().Play("IdolSquat1" + GetPerformanceSuffix(), -1, 0); }),
|
||||
});
|
||||
break;
|
||||
case (int) IdolAnimations.Wink:
|
||||
BeatAction.New(Arisa, new List<BeatAction.Action>()
|
||||
break;
|
||||
case (int)IdolAnimations.Wink:
|
||||
BeatAction.New(Arisa, new List<BeatAction.Action>()
|
||||
{
|
||||
new BeatAction.Action(beat, delegate { Arisa.GetComponent<Animator>().Play("IdolWink0" + GetPerformanceSuffix(), -1, 0); }),
|
||||
new BeatAction.Action(beat + length, delegate { Arisa.GetComponent<Animator>().Play("IdolWink1" + GetPerformanceSuffix(), -1, 0); }),
|
||||
});
|
||||
break;
|
||||
case (int) IdolAnimations.Dab:
|
||||
idolAnimator.Play("IdolDab" + GetPerformanceSuffix(), -1, 0);
|
||||
Jukebox.PlayOneShotGame("fanClub/arisa_dab");
|
||||
break;
|
||||
default: break;
|
||||
break;
|
||||
case (int)IdolAnimations.Dab:
|
||||
idolAnimator.Play("IdolDab" + GetPerformanceSuffix(), -1, 0);
|
||||
Jukebox.PlayOneShotGame("fanClub/arisa_dab");
|
||||
break;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -479,6 +558,8 @@ namespace HeavenStudio.Games
|
||||
public void ToSpot(bool unspot = true)
|
||||
{
|
||||
Arisa.GetComponent<NtrIdolAri>().ToSpot(unspot);
|
||||
Blue.ToSpot(unspot);
|
||||
Orange.ToSpot(unspot);
|
||||
if (unspot)
|
||||
spectatorMat.SetColor("_Color", new Color(1, 1, 1, 1));
|
||||
else
|
||||
@ -506,6 +587,8 @@ namespace HeavenStudio.Games
|
||||
if (!(Conductor.instance.songPositionInBeats >= noResponse.startBeat && Conductor.instance.songPositionInBeats < noResponse.startBeat + noResponse.length))
|
||||
{
|
||||
idolAnimator.Play("IdolCrap" + GetPerformanceSuffix(), -1, 0);
|
||||
Blue.PlayAnimState("Crap");
|
||||
Orange.PlayAnimState("Crap");
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -518,6 +601,8 @@ namespace HeavenStudio.Games
|
||||
idolAnimator.Play("IdolPeace" + GetPerformanceSuffix(), -1, 0);
|
||||
else
|
||||
idolAnimator.Play("IdolPeaceNoSync" + GetPerformanceSuffix(), -1, 0);
|
||||
Blue.PlayAnimState("Peace");
|
||||
Orange.PlayAnimState("Peace");
|
||||
}
|
||||
}
|
||||
|
||||
@ -608,22 +693,25 @@ namespace HeavenStudio.Games
|
||||
|
||||
BeatAction.New(Arisa, new List<BeatAction.Action>()
|
||||
{
|
||||
new BeatAction.Action(beat, delegate { DoIdolCall(0, isBig); }),
|
||||
new BeatAction.Action(beat, delegate { DoIdolCall(0, isBig); Blue.PlayAnimState("Beat"); Orange.PlayAnimState("Beat"); }),
|
||||
new BeatAction.Action(beat + (isBig ? 1f : 0.75f), delegate { DoIdolCall(1, isBig); }),
|
||||
new BeatAction.Action(beat + 1f, delegate { PlayPrepare(); }),
|
||||
new BeatAction.Action(beat + 1f, delegate { PlayPrepare(); Blue.PlayAnimState("Beat"); Orange.PlayAnimState("Beat"); }),
|
||||
|
||||
new BeatAction.Action(beat + 2f, delegate { PlayLongClap(beat + 2f); DoIdolResponse(); }),
|
||||
new BeatAction.Action(beat + 3f, delegate { DoIdolResponse(); }),
|
||||
new BeatAction.Action(beat + 2f, delegate { PlayLongClap(beat + 2f); DoIdolResponse(); Blue.PlayAnimState("Beat"); Orange.PlayAnimState("Beat"); }),
|
||||
new BeatAction.Action(beat + 3f, delegate { DoIdolResponse(); Blue.PlayAnimState("Beat"); Orange.PlayAnimState("Beat"); }),
|
||||
new BeatAction.Action(beat + 3.5f, delegate { PlayOneClap(beat + 3.5f); }),
|
||||
new BeatAction.Action(beat + 4f, delegate { PlayChargeClap(beat + 4f); DoIdolResponse(); }),
|
||||
new BeatAction.Action(beat + 4f, delegate { PlayChargeClap(beat + 4f); DoIdolResponse(); Blue.PlayAnimState("Beat"); Orange.PlayAnimState("Beat"); }),
|
||||
new BeatAction.Action(beat + 5f, delegate { PlayJump(beat + 5f);
|
||||
if (doJump)
|
||||
{
|
||||
DoIdolJump(beat + 5f);
|
||||
Blue.DoIdolJump(beat + 5f);
|
||||
Orange.DoIdolJump(beat + 5f);
|
||||
}
|
||||
else
|
||||
{
|
||||
DoIdolResponse();
|
||||
Blue.PlayAnimState("Beat"); Orange.PlayAnimState("Beat");
|
||||
}
|
||||
}),
|
||||
});
|
||||
@ -744,13 +832,35 @@ namespace HeavenStudio.Games
|
||||
}
|
||||
}
|
||||
|
||||
private void PlayOneClap(float beat)
|
||||
private void PlayOneClap(float beat, int who = -1)
|
||||
{
|
||||
BeatAction.New(this.gameObject, new List<BeatAction.Action>()
|
||||
if (who != -1)
|
||||
{
|
||||
new BeatAction.Action(beat, delegate { PlayAnimationAll("FanClap", true, true);}),
|
||||
new BeatAction.Action(beat + 0.1f, delegate { PlayAnimationAll("FanFree", true, true);}),
|
||||
});
|
||||
if (who == 3)
|
||||
{
|
||||
if (GameManager.instance.autoplay)
|
||||
{
|
||||
Player.ClapStart(true, false, 0.1f);
|
||||
}
|
||||
return;
|
||||
}
|
||||
// Jukebox.PlayOneShotGame("fanClub/play_clap", volume: 0.08f);
|
||||
Jukebox.PlayOneShotGame("fanClub/crap_impact", pitch: UnityEngine.Random.Range(0.95f, 1.05f), volume: 0.1f);
|
||||
BeatAction.New(Spectators[who], new List<BeatAction.Action>()
|
||||
{
|
||||
new BeatAction.Action(beat, delegate { Spectators[who].GetComponent<Animator>().Play("FanClap", -1, 0); }),
|
||||
new BeatAction.Action(beat + 0.1f, delegate { Spectators[who].GetComponent<Animator>().Play("FanFree", -1, 0); }),
|
||||
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
BeatAction.New(this.gameObject, new List<BeatAction.Action>()
|
||||
{
|
||||
new BeatAction.Action(beat, delegate { PlayAnimationAll("FanClap", true, true);}),
|
||||
new BeatAction.Action(beat + 0.1f, delegate { PlayAnimationAll("FanFree", true, true);}),
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private void PlayLongClap(float beat)
|
||||
@ -801,5 +911,82 @@ namespace HeavenStudio.Games
|
||||
Spectators[i].GetComponent<NtrIdolFan>().MakeAngry(i > 3);
|
||||
}
|
||||
}
|
||||
|
||||
public void DancerTravel(float beat, float length, bool exit, bool instant)
|
||||
{
|
||||
if (instant)
|
||||
{
|
||||
Blue.FinishEntrance(exit);
|
||||
Orange.FinishEntrance(exit);
|
||||
}
|
||||
else
|
||||
{
|
||||
Blue.StartEntrance(beat, length, exit);
|
||||
Orange.StartEntrance(beat, length, exit);
|
||||
}
|
||||
}
|
||||
|
||||
public void FinalCheer(float beat)
|
||||
{
|
||||
if (noJudgement) return;
|
||||
noJudgement = true;
|
||||
noJudgementInput = false;
|
||||
goBopSpec = false;
|
||||
|
||||
// recreation of sub61
|
||||
BeatAction.New(this.gameObject, new List<BeatAction.Action>()
|
||||
{
|
||||
new BeatAction.Action(beat, delegate { StartClapLoop(beat, 1);}),
|
||||
|
||||
new BeatAction.Action(beat + (2f/3f), delegate { StartClapLoop(beat + (2f/3f), 0);}),
|
||||
new BeatAction.Action(beat + (2f/3f), delegate { StartClapLoop(beat + (2f/3f), 3);}),
|
||||
|
||||
new BeatAction.Action(beat + (2f/3f) + 0.25f, delegate { StartClapLoop(beat + (2f/3f) + 0.25f, 6);}),
|
||||
new BeatAction.Action(beat + (2f/3f) + 0.25f, delegate { StartClapLoop(beat + (2f/3f) + 0.25f, 8);}),
|
||||
|
||||
new BeatAction.Action(beat + (2f/3f) + 0.5f, delegate { StartClapLoop(beat + (2f/3f) + 0.5f, 7);}),
|
||||
new BeatAction.Action(beat + (2f/3f) + 0.5f, delegate { StartClapLoop(beat + (2f/3f) + 0.5f, 4);}),
|
||||
|
||||
new BeatAction.Action(beat + 1.5f, delegate { StartClapLoop(beat + 1.5f, 2);}),
|
||||
new BeatAction.Action(beat + 1.5f, delegate { StartClapLoop(beat + 1.5f, 11);}),
|
||||
|
||||
new BeatAction.Action(beat + 1.5f + (1f/3f), delegate { StartClapLoop(beat + 1.5f + (1f/3f), 5);}),
|
||||
new BeatAction.Action(beat + 1.5f + (1f/3f), delegate { StartClapLoop(beat + 1.5f + (1f/3f), 10);}),
|
||||
|
||||
new BeatAction.Action(beat + 2f + (1f/3f), delegate { StartClapLoop(beat + 2f + (1f/3f), 9);}),
|
||||
|
||||
// 0x113
|
||||
new BeatAction.Action(beat + 6f , delegate { CheckApplause();}),
|
||||
});
|
||||
|
||||
MultiSound.Play(new MultiSound.Sound[] {
|
||||
new MultiSound.Sound("fanClub/play_jump", beat, pitch: 1f, volume: 0.6f),
|
||||
new MultiSound.Sound("fanClub/play_jump", beat + (2f/3f), pitch: 0.98f, volume: 0.5f),
|
||||
new MultiSound.Sound("fanClub/play_jump", beat + (2f/3f) + 0.25f, pitch: UnityEngine.Random.Range(0.9f, 1.05f), volume: 0.6f),
|
||||
new MultiSound.Sound("fanClub/play_jump", beat + (2f/3f) + 0.5f, pitch: UnityEngine.Random.Range(0.9f, 1.05f), volume: 0.6f),
|
||||
new MultiSound.Sound("fanClub/play_jump", beat + 1.5f, pitch: UnityEngine.Random.Range(0.9f, 1.05f), volume: 0.6f),
|
||||
new MultiSound.Sound("fanClub/play_jump", beat + 1.5f + (1f/3f), pitch: UnityEngine.Random.Range(0.9f, 1.05f), volume: 0.6f),
|
||||
new MultiSound.Sound("fanClub/play_jump", beat + 2f + (1f/3f), pitch: UnityEngine.Random.Range(0.9f, 1.05f), volume: 0.6f),
|
||||
});
|
||||
}
|
||||
|
||||
void StartClapLoop(float beat, int who)
|
||||
{
|
||||
BeatAction.New(Spectators[who], new List<BeatAction.Action>()
|
||||
{
|
||||
new BeatAction.Action(beat, delegate { PlayOneClap(beat, who); }),
|
||||
new BeatAction.Action(beat + 0.5f, delegate { StartClapLoop(beat + 0.5f, who); }),
|
||||
});
|
||||
}
|
||||
|
||||
void CheckApplause()
|
||||
{
|
||||
if (!noJudgementInput)
|
||||
{
|
||||
AngerOnMiss();
|
||||
// fuck you
|
||||
FanClub.instance.ScoreMiss(69);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user