improved interaction between roll and end block

This commit is contained in:
Rapandrasmus 2023-06-26 22:31:11 +02:00
parent 01635e71ad
commit de4216af66
3 changed files with 120 additions and 25 deletions

View file

@ -278,6 +278,7 @@ MonoBehaviour:
fallYan: {fileID: 142440390168805750} fallYan: {fileID: 142440390168805750}
fish: {fileID: 3392966659349309181} fish: {fileID: 3392966659349309181}
rollPlatform: {fileID: 5041901577087691681} rollPlatform: {fileID: 5041901577087691681}
rollPlatformLong: {fileID: 4921680285842369143}
--- !u!95 &4653690538679061971 --- !u!95 &4653690538679061971
Animator: Animator:
serializedVersion: 5 serializedVersion: 5

View file

@ -38,6 +38,7 @@ namespace HeavenStudio.Games.Scripts_AgbNightWalk
[SerializeField] private GameObject fallYan; [SerializeField] private GameObject fallYan;
[SerializeField] private Animator fish; [SerializeField] private Animator fish;
[SerializeField] private Animator rollPlatform; [SerializeField] private Animator rollPlatform;
[SerializeField] private GameObject rollPlatformLong;
private bool playYanIsFalling; private bool playYanIsFalling;
private double playYanFallBeat; private double playYanFallBeat;
private bool isFish; private bool isFish;
@ -61,9 +62,14 @@ namespace HeavenStudio.Games.Scripts_AgbNightWalk
isFish = game.FishOnBeat(endBeat); isFish = game.FishOnBeat(endBeat);
fish.gameObject.SetActive(isFish); fish.gameObject.SetActive(isFish);
isEndEvent = game.endBeat == endBeat; isEndEvent = game.endBeat == endBeat;
if (isEndEvent) anim.Play("EndIdle", 0, 0);
isRollPlatform = game.RollOnBeat(endBeat); isRollPlatform = game.RollOnBeat(endBeat);
rollPlatform.transform.parent.gameObject.SetActive(isRollPlatform); rollPlatform.transform.parent.gameObject.SetActive(isRollPlatform);
rollPlatformLong.SetActive(nextPlatformIsSameHeight && !isFinalBlock && !isEndEvent);
if (isEndEvent)
{
if (isRollPlatform) rollPlatform.Play("EndIdle", 0, 0);
else anim.Play("EndIdle", 0, 0);
}
if (isRollPlatform) if (isRollPlatform)
{ {
platform.SetActive(false); platform.SetActive(false);
@ -230,7 +236,8 @@ namespace HeavenStudio.Games.Scripts_AgbNightWalk
if (!startGlowing && isEndEvent && game.hitJumps >= game.requiredJumps && AgbNightWalk.hitJumpsPersist >= game.requiredJumpsP) if (!startGlowing && isEndEvent && game.hitJumps >= game.requiredJumps && AgbNightWalk.hitJumpsPersist >= game.requiredJumpsP)
{ {
anim.DoScaledAnimationAsync("EndGlow", 0.5f); if (isRollPlatform) rollPlatform.DoScaledAnimationAsync("EndGlow", 0.5f);
else anim.DoScaledAnimationAsync("EndGlow", 0.5f);
startGlowing = true; startGlowing = true;
} }
} }
@ -281,6 +288,7 @@ namespace HeavenStudio.Games.Scripts_AgbNightWalk
private void JustRollRelease(PlayerActionEvent caller, float state) private void JustRollRelease(PlayerActionEvent caller, float state)
{ {
canKickRelease = false; canKickRelease = false;
double beat = Conductor.instance.songPositionInBeats;
if (isFish) if (isFish)
{ {
game.ScoreMiss(); game.ScoreMiss();
@ -297,7 +305,68 @@ namespace HeavenStudio.Games.Scripts_AgbNightWalk
fish.DoScaledAnimationAsync("FishIdle", 0.5f); fish.DoScaledAnimationAsync("FishIdle", 0.5f);
}) })
}); });
return; }
else if (isFinalBlock)
{
handler.DestroyPlatforms(caller.timer + caller.startBeat + 2, endBeat - 2, endBeat);
double missTime = 1.5 - Conductor.instance.SecsToBeats(Minigame.earlyTime, Conductor.instance.GetBpmAtBeat(beat));
BeatAction.New(gameObject, new List<BeatAction.Action>()
{
new BeatAction.Action(beat + missTime, delegate
{
game.ScoreMiss();
handler.StopAll();
}),
});
}
if (isEndEvent)
{
if (game.hitJumps >= game.requiredJumps && AgbNightWalk.hitJumpsPersist >= game.requiredJumpsP)
{
anim.DoScaledAnimationAsync("EndPop", 0.5f);
handler.StopAll();
handler.DestroyPlatforms(caller.timer + caller.startBeat + 2, endBeat - 2, endBeat + 1);
game.playYan.Float(Conductor.instance.songPositionInBeats);
handler.DevolveAll();
if (isFish)
{
BeatAction.New(gameObject, new List<BeatAction.Action>()
{
new BeatAction.Action(beat + 0.5, delegate
{
game.ScoreMiss();
game.playYan.Shock();
fish.DoScaledAnimationAsync("Shock", 0.5f);
}),
new BeatAction.Action(caller.timer + caller.startBeat + 4, delegate
{
game.playYan.Fall(caller.timer + caller.startBeat + 4);
fish.DoScaledAnimationAsync("FishIdle", 0.5f);
})
});
}
}
else
{
game.playYan.HighJump(beat, true, state >= 1f || state <= -1f);
handler.DestroyPlatforms(caller.timer + caller.startBeat + 2, endBeat - 2, endBeat);
double missTime = 1.5 - Conductor.instance.SecsToBeats(Minigame.earlyTime, Conductor.instance.GetBpmAtBeat(beat));
BeatAction.New(gameObject, new List<BeatAction.Action>()
{
new BeatAction.Action(beat + missTime, delegate
{
game.ScoreMiss();
handler.StopAll();
}),
});
}
}
else
{
handler.RaiseHeight(beat, lastAdditionalHeightInUnits, additionalHeightInUnits);
game.playYan.HighJump(beat, isFinalBlock, state >= 1f || state <= -1f);
} }
if (state >= 1f || state <= -1f) if (state >= 1f || state <= -1f)
{ {
@ -305,7 +374,6 @@ namespace HeavenStudio.Games.Scripts_AgbNightWalk
rollPlatform.DoScaledAnimationAsync("UmbrellaBarely", 0.5f); rollPlatform.DoScaledAnimationAsync("UmbrellaBarely", 0.5f);
return; return;
} }
game.playYan.HighJump(Conductor.instance.songPositionInBeats);
SoundByte.PlayOneShot("games/nightWalkRvl/highJump7"); SoundByte.PlayOneShot("games/nightWalkRvl/highJump7");
rollPlatform.DoScaledAnimationAsync("Umbrella", 0.5f); rollPlatform.DoScaledAnimationAsync("Umbrella", 0.5f);
game.starHandler.Evolve(game.evolveAmount); game.starHandler.Evolve(game.evolveAmount);
@ -338,7 +406,7 @@ namespace HeavenStudio.Games.Scripts_AgbNightWalk
canKick = false; canKick = false;
double beat = Conductor.instance.songPositionInBeats; double beat = Conductor.instance.songPositionInBeats;
handler.RaiseHeight(beat, lastAdditionalHeightInUnits, additionalHeightInUnits); handler.RaiseHeight(beat, lastAdditionalHeightInUnits, additionalHeightInUnits);
game.playYan.Jump(beat); game.playYan.Jump(beat, isFinalBlock);
if (isFish) if (isFish)
{ {
BeatAction.New(gameObject, new List<BeatAction.Action>() BeatAction.New(gameObject, new List<BeatAction.Action>()
@ -360,6 +428,7 @@ namespace HeavenStudio.Games.Scripts_AgbNightWalk
} }
else if (isFinalBlock) else if (isFinalBlock)
{ {
handler.DestroyPlatforms(caller.timer + caller.startBeat + 2, endBeat - 2, endBeat);
double missTime = 1 - Conductor.instance.SecsToBeats(Minigame.earlyTime, Conductor.instance.GetBpmAtBeat(beat)); double missTime = 1 - Conductor.instance.SecsToBeats(Minigame.earlyTime, Conductor.instance.GetBpmAtBeat(beat));
BeatAction.New(gameObject, new List<BeatAction.Action>() BeatAction.New(gameObject, new List<BeatAction.Action>()
{ {
@ -367,11 +436,13 @@ namespace HeavenStudio.Games.Scripts_AgbNightWalk
{ {
game.ScoreMiss(); game.ScoreMiss();
handler.StopAll(); handler.StopAll();
game.playYan.Fall(beat + missTime);
handler.DestroyPlatforms(caller.timer + caller.startBeat + 2, endBeat - 2, endBeat);
}), }),
}); });
}
if (isEndEvent)
{
} }
if (state >= 1 || state <= -1) if (state >= 1 || state <= -1)
{ {
@ -422,19 +493,19 @@ namespace HeavenStudio.Games.Scripts_AgbNightWalk
if (isFish) if (isFish)
{ {
BeatAction.New(gameObject, new List<BeatAction.Action>() BeatAction.New(gameObject, new List<BeatAction.Action>()
{
new BeatAction.Action(beat + 0.5, delegate
{ {
game.ScoreMiss(); new BeatAction.Action(beat + 0.5, delegate
game.playYan.Shock(); {
fish.DoScaledAnimationAsync("Shock", 0.5f); game.ScoreMiss();
}), game.playYan.Shock();
new BeatAction.Action(caller.timer + caller.startBeat + 4, delegate fish.DoScaledAnimationAsync("Shock", 0.5f);
{ }),
game.playYan.Fall(caller.timer + caller.startBeat + 4); new BeatAction.Action(caller.timer + caller.startBeat + 4, delegate
fish.DoScaledAnimationAsync("FishIdle", 0.5f); {
}) game.playYan.Fall(caller.timer + caller.startBeat + 4);
}); fish.DoScaledAnimationAsync("FishIdle", 0.5f);
})
});
} }
} }
else else

View file

@ -18,7 +18,9 @@ namespace HeavenStudio.Games.Scripts_AgbNightWalk
Whiffing, Whiffing,
Floating, Floating,
Rolling, Rolling,
HighJumping HighJumping,
JumpingFall,
HighJumpingFall
} }
private JumpingState jumpingState; private JumpingState jumpingState;
private AgbNightWalk game; private AgbNightWalk game;
@ -50,7 +52,7 @@ namespace HeavenStudio.Games.Scripts_AgbNightWalk
balloonTrans.localPosition = new Vector3(balloonTrans.localPosition.x + UnityEngine.Random.Range(randomMinBalloonX, randomMaxBalloonX), balloonTrans.localPosition.y); balloonTrans.localPosition = new Vector3(balloonTrans.localPosition.x + UnityEngine.Random.Range(randomMinBalloonX, randomMaxBalloonX), balloonTrans.localPosition.y);
} }
} }
bool hasFallen;
private void Update() private void Update()
{ {
var cond = Conductor.instance; var cond = Conductor.instance;
@ -67,6 +69,16 @@ namespace HeavenStudio.Games.Scripts_AgbNightWalk
Walk(); Walk();
} }
break; break;
case JumpingState.JumpingFall:
Vector3 posf = GetPathPositionFromBeat(jumpPath, cond.songPositionInBeatsAsDouble, jumpBeat);
transform.localPosition = posf;
float normalizedBeatf = cond.GetPositionFromBeat(jumpBeat, jumpPath.positions[0].duration);
if (normalizedBeatf >= 1f && !hasFallen)
{
hasFallen = true;
SoundByte.PlayOneShotGame("nightWalkAgb/fall");
}
break;
case JumpingState.Walking: case JumpingState.Walking:
transform.localPosition = Vector3.zero; transform.localPosition = Vector3.zero;
anim.DoScaledAnimation("Walk", walkBeat, 0.5f, 0.35f); anim.DoScaledAnimation("Walk", walkBeat, 0.5f, 0.35f);
@ -115,6 +127,16 @@ namespace HeavenStudio.Games.Scripts_AgbNightWalk
Walk(); Walk();
} }
break; break;
case JumpingState.HighJumpingFall:
Vector3 posHf = GetPathPositionFromBeat(highJumpPath, cond.songPositionInBeatsAsDouble, jumpBeat);
transform.localPosition = posHf;
float normalizedBeatHf = cond.GetPositionFromBeat(jumpBeat, highJumpPath.positions[0].duration);
if (normalizedBeatHf >= 1f && !hasFallen)
{
hasFallen = true;
SoundByte.PlayOneShotGame("nightWalkAgb/fall");
}
break;
} }
} }
} }
@ -155,9 +177,9 @@ namespace HeavenStudio.Games.Scripts_AgbNightWalk
if (UnityEngine.Random.Range(1, 3) == 1) star.DoScaledAnimationAsync("Blink", 0.5f); if (UnityEngine.Random.Range(1, 3) == 1) star.DoScaledAnimationAsync("Blink", 0.5f);
Invoke("StarBlink", UnityEngine.Random.Range(0.1f, 0.3f)); Invoke("StarBlink", UnityEngine.Random.Range(0.1f, 0.3f));
} }
public void Jump(double beat) public void Jump(double beat, bool fall = false)
{ {
jumpingState = JumpingState.Jumping; jumpingState = fall ? JumpingState.JumpingFall : JumpingState.Jumping;
jumpBeat = beat; jumpBeat = beat;
anim.Play("Jump", 0, 0); anim.Play("Jump", 0, 0);
spriteTrans.localEulerAngles = Vector3.zero; spriteTrans.localEulerAngles = Vector3.zero;
@ -165,13 +187,14 @@ namespace HeavenStudio.Games.Scripts_AgbNightWalk
Update(); Update();
} }
public void HighJump(double beat) public void HighJump(double beat, bool fall = false, bool barely = false)
{ {
jumpingState = JumpingState.HighJumping; jumpingState = fall ? JumpingState.HighJumpingFall : JumpingState.HighJumping;
jumpBeat = beat; jumpBeat = beat;
anim.DoScaledAnimationAsync("HighJump", 0.5f); anim.DoScaledAnimationAsync("HighJump", 0.5f);
spriteTrans.localEulerAngles = Vector3.zero; spriteTrans.localEulerAngles = Vector3.zero;
highJumpPath.positions[0].duration = 1.5f - (float)Conductor.instance.SecsToBeats(Minigame.earlyTime, Conductor.instance.GetBpmAtBeat(jumpBeat)); highJumpPath.positions[0].duration = 1.5f - (float)Conductor.instance.SecsToBeats(Minigame.earlyTime, Conductor.instance.GetBpmAtBeat(jumpBeat));
highJumpPath.positions[0].height = barely ? 3.5f : 4.5f;
Update(); Update();
} }