mirror of
https://github.com/RHeavenStudioPlus/HeavenStudioPlus.git
synced 2024-11-10 03:35:10 +00:00
98233e174d
* Nightwalks set up * Play yan with balloons * platformSetUp * Platform handler fundamentals * Count In Added * small thing * Got em inputs in nightwalk gba to work * Platforms now spawn when there's no count-in * He jumps now! * Decreased platform count * Height changes added * Randomness for height changes * Name changing * Fixed a bug with no count in blocks * Ok height changes should be flawless now * No jumping added * Umbrella and lollipop added * Umbrella drum pattern added * Fallyan :( * Implemented falling :( * Fixed drum patterns not working * Fish implemented * Fixed kick sound being weird * 4 beat count in added * Tweaked landing pos * Walking Count-In added * new sprites touched up anims * oops1 * barely anims * Implemented barelies into nightwalk gba * Balloons have random positioning now * New sounds and whiff/barely sounds * Fall smear added * Fixed issues with platform heights on gameswitches * 24 platforms * walk is normalized now * Star scrolling functionality done * Blink animations n stuff * STARS BLINK NOW * Force evolve added + tweaks * Fixed stars not stopping + upped amount of stars * End event setup * Finding end blocks logic added * end event functionality finished * end platform anim * fixed anim * only stars on screen evolve * 2 evolve by default * End event fixes * more blinking * star blinks now and has string * minor tweak * fix to interaction between fish and end block * tweaked dropdown values * removed fish sound * named some sprites in the spritesheet * high jump and roll anims * Roll sound should only play if valid * Small fix to roll cue sound logic * Another small fix to roll cue sound logic * ok actually fixed roll sound * roll platform added to jumpl platform prefab * Roll cue platform visuals done * Basic Roll Cue implemented * flower * umbrella * barely for roll release * OOPS * smol fixes * fixed visual stuff and added missing to rolls * redid sheet, new anims * slow walkin' * adjustments * oops * adjusted smear * improved interaction between roll and end block * improved interaction between roll cue and platform heights * 32 stars * made the star boundary way smaller * how was i this stupid * fixed more interactions * stack proof roll cue and also end block + roll cue fix * Fixed things related to stars * fixed no jumping not working with end block + roll * nearing the final stages * rolls counts for 2 jumps now * fixed a bug to do with roll platforms and made roll platform sounds not be able to be played on invalid beats * made stage 2 stars bigger * added destroy roll platform sprites * update to new systems --------- Co-authored-by: Rapandrasmus <78219215+Rapandrasmus@users.noreply.github.com> Co-authored-by: minenice55 <star.elementa@gmail.com>
667 lines
29 KiB
C#
667 lines
29 KiB
C#
using HeavenStudio.Util;
|
|
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
namespace HeavenStudio.Games.Scripts_AgbNightWalk
|
|
{
|
|
public class AgbPlatform : MonoBehaviour
|
|
{
|
|
public enum PlatformType
|
|
{
|
|
Flower = 1,
|
|
Lollipop = 2,
|
|
Umbrella = 3
|
|
}
|
|
private double startBeat;
|
|
[NonSerialized] public double endBeat;
|
|
[NonSerialized] public AgbPlatformHandler handler;
|
|
private Animator anim;
|
|
|
|
private AgbNightWalk game;
|
|
|
|
private PlatformType type = PlatformType.Flower;
|
|
|
|
private float additionalHeight = 0f;
|
|
private int additionalHeightInUnits = 0;
|
|
private int lastAdditionalHeightInUnits = 0;
|
|
|
|
[SerializeField] private GameObject platform;
|
|
private bool canKick;
|
|
private bool canKickRelease;
|
|
private bool doFillStartSound = false;
|
|
|
|
private PlayerActionEvent inputEvent;
|
|
private PlayerActionEvent releaseEvent;
|
|
[NonSerialized] public bool stopped;
|
|
[SerializeField] private GameObject fallYan;
|
|
[SerializeField] private GameObject fallYanRoll;
|
|
[SerializeField] private Animator fish;
|
|
[SerializeField] private Animator rollPlatform;
|
|
[SerializeField] private GameObject rollPlatformLong;
|
|
[SerializeField] private GameObject rollPlatformLong2;
|
|
private bool playYanIsFalling;
|
|
private double playYanFallBeat;
|
|
private bool isFish;
|
|
private bool isFinalBlock;
|
|
private bool isEndEvent;
|
|
private bool nextPlatformIsSameHeight;
|
|
private bool isRollPlatform;
|
|
|
|
public void StartInput(double beat, double hitBeat)
|
|
{
|
|
if (game == null) game = AgbNightWalk.instance;
|
|
if (anim == null) anim = GetComponent<Animator>();
|
|
if (hitBeat > game.endBeat + 1)
|
|
{
|
|
foreach (Transform child in transform)
|
|
{
|
|
child.gameObject.SetActive(false);
|
|
}
|
|
return;
|
|
}
|
|
if (game.RollOnBeat(hitBeat - 1))
|
|
{
|
|
startBeat = beat;
|
|
endBeat = hitBeat;
|
|
ResetInput();
|
|
return;
|
|
}
|
|
isRollPlatform = game.RollOnBeat(hitBeat);
|
|
lastAdditionalHeightInUnits = game.FindHeightUnitsAtBeat(hitBeat);
|
|
additionalHeightInUnits = game.FindHeightUnitsAtBeat(hitBeat + (isRollPlatform ? 2 : 1));
|
|
additionalHeight = lastAdditionalHeightInUnits * handler.heightAmount;
|
|
nextPlatformIsSameHeight = lastAdditionalHeightInUnits == additionalHeightInUnits;
|
|
isFinalBlock = hitBeat == game.endBeat + 1;
|
|
platform.SetActive(nextPlatformIsSameHeight && !isFinalBlock);
|
|
startBeat = beat;
|
|
endBeat = hitBeat;
|
|
isFish = game.FishOnBeat(endBeat);
|
|
fish.gameObject.SetActive(isFish);
|
|
isEndEvent = game.endBeat == endBeat;
|
|
|
|
rollPlatform.transform.parent.gameObject.SetActive(isRollPlatform);
|
|
rollPlatformLong.SetActive(nextPlatformIsSameHeight && !isFinalBlock && !isEndEvent);
|
|
rollPlatformLong2.SetActive(nextPlatformIsSameHeight && !isFinalBlock && !isEndEvent);
|
|
if (isEndEvent)
|
|
{
|
|
if (isRollPlatform) rollPlatform.Play("EndIdle", 0, 0);
|
|
else anim.Play("EndIdle", 0, 0);
|
|
}
|
|
if (isRollPlatform)
|
|
{
|
|
platform.SetActive(false);
|
|
if (startBeat < endBeat)
|
|
{
|
|
if (game.ShouldNotJumpOnBeat(endBeat) || isFish)
|
|
{
|
|
inputEvent = game.ScheduleUserInput(startBeat, endBeat - startBeat, AgbNightWalk.InputAction_AltDown, JustRollHold, RollMissHold, Empty);
|
|
if (nextPlatformIsSameHeight && !isFinalBlock && !isEndEvent)
|
|
{
|
|
BeatAction.New(this, new List<BeatAction.Action>()
|
|
{
|
|
new BeatAction.Action(endBeat, delegate
|
|
{
|
|
if (GameManager.instance.autoplay && !stopped)
|
|
{
|
|
game.playYan.Walk();
|
|
}
|
|
}),
|
|
new BeatAction.Action(endBeat + 0.5, delegate
|
|
{
|
|
if (GameManager.instance.autoplay && !stopped && !isEndEvent)
|
|
{
|
|
game.playYan.Walk();
|
|
anim.DoScaledAnimationAsync("Note", 0.5f);
|
|
SoundByte.PlayOneShotGame("nightWalkAgb/open" + (int)type);
|
|
}
|
|
}),
|
|
new BeatAction.Action(endBeat + 1, delegate
|
|
{
|
|
if (GameManager.instance.autoplay && !stopped && !isEndEvent)
|
|
{
|
|
rollPlatform.DoScaledAnimationAsync("Note", 0.5f);
|
|
SoundByte.PlayOneShotGame("nightWalkAgb/open" + (int)type);
|
|
}
|
|
})
|
|
});
|
|
}
|
|
else
|
|
{
|
|
BeatAction.New(this, new List<BeatAction.Action>()
|
|
{
|
|
new BeatAction.Action(endBeat + 0.5, delegate
|
|
{
|
|
if (GameManager.instance.autoplay && !stopped)
|
|
{
|
|
handler.StopAll();
|
|
handler.DestroyPlatforms(endBeat + 2, endBeat - 3, endBeat + 6);
|
|
SoundByte.PlayOneShotGame("nightWalkAgb/wot");
|
|
game.playYan.Hide();
|
|
fallYanRoll.SetActive(true);
|
|
fallYanRoll.GetComponent<Animator>().DoScaledAnimationAsync("FallSmear", 0.5f);
|
|
}
|
|
})
|
|
});
|
|
}
|
|
}
|
|
else
|
|
{
|
|
inputEvent = game.ScheduleInput(startBeat, endBeat - startBeat, AgbNightWalk.InputAction_AltDown, JustRollHold, RollMissHold, Empty);
|
|
}
|
|
canKick = true;
|
|
BeatAction.New(this, new List<BeatAction.Action>()
|
|
{
|
|
new BeatAction.Action(endBeat, delegate
|
|
{
|
|
if (!stopped)
|
|
{
|
|
SoundByte.PlayOneShotGame("nightWalkAgb/boxKick");
|
|
if (canKick)
|
|
{
|
|
anim.Play("Kick", 0, 0);
|
|
}
|
|
}
|
|
}),
|
|
});
|
|
if (nextPlatformIsSameHeight && !isEndEvent)
|
|
{
|
|
canKickRelease = true;
|
|
BeatAction.New(this, new List<BeatAction.Action>()
|
|
{
|
|
new BeatAction.Action(endBeat + 0.5, delegate
|
|
{
|
|
if (!stopped)
|
|
{
|
|
SoundByte.PlayOneShotGame("nightWalkAgb/boxKick");
|
|
if (canKickRelease)
|
|
{
|
|
rollPlatform.Play("Kick", 0, 0);
|
|
}
|
|
}
|
|
}),
|
|
});
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (game.platformTypes.ContainsKey(hitBeat))
|
|
{
|
|
if (game.platformTypes[hitBeat].platformType == AgbNightWalk.PlatformType.Lollipop)
|
|
{
|
|
type = PlatformType.Lollipop;
|
|
}
|
|
else
|
|
{
|
|
type = PlatformType.Umbrella;
|
|
}
|
|
doFillStartSound = false;
|
|
}
|
|
else
|
|
{
|
|
type = PlatformType.Flower;
|
|
if (game.platformTypes.ContainsKey(hitBeat + 1))
|
|
{
|
|
doFillStartSound = game.platformTypes[hitBeat + 1].fillType != AgbNightWalk.FillType.None;
|
|
}
|
|
}
|
|
if (startBeat < endBeat)
|
|
{
|
|
if (game.ShouldNotJumpOnBeat(endBeat) || isFish)
|
|
{
|
|
inputEvent = AgbNightWalk.instance.ScheduleUserInput(startBeat, endBeat - startBeat, Minigame.InputAction_BasicPress, isEndEvent ? JustEnd : Just, Miss, Empty);
|
|
if (nextPlatformIsSameHeight && !isFinalBlock)
|
|
{
|
|
BeatAction.New(this, new List<BeatAction.Action>()
|
|
{
|
|
new BeatAction.Action(endBeat, delegate
|
|
{
|
|
if (GameManager.instance.autoplay && !stopped)
|
|
{
|
|
game.playYan.Walk();
|
|
}
|
|
}),
|
|
new BeatAction.Action(endBeat + 0.5, delegate
|
|
{
|
|
if (GameManager.instance.autoplay && !stopped && !isEndEvent)
|
|
{
|
|
anim.DoScaledAnimationAsync("Note", 0.5f);
|
|
SoundByte.PlayOneShotGame("nightWalkAgb/open" + (int)type);
|
|
}
|
|
})
|
|
});
|
|
}
|
|
else
|
|
{
|
|
BeatAction.New(this, new List<BeatAction.Action>()
|
|
{
|
|
new BeatAction.Action(endBeat, delegate
|
|
{
|
|
if (GameManager.instance.autoplay && !stopped)
|
|
{
|
|
handler.StopAll();
|
|
handler.DestroyPlatforms(endBeat + 2, endBeat - 3, endBeat + 6);
|
|
SoundByte.PlayOneShotGame("nightWalkAgb/wot");
|
|
game.playYan.Hide();
|
|
fallYan.SetActive(true);
|
|
fallYan.GetComponent<Animator>().DoScaledAnimationAsync("FallSmear", 0.5f);
|
|
}
|
|
})
|
|
});
|
|
}
|
|
}
|
|
else if (!isFish)
|
|
{
|
|
inputEvent = AgbNightWalk.instance.ScheduleInput(startBeat, endBeat - startBeat, Minigame.InputAction_BasicPress, isEndEvent ? JustEnd : Just, Miss, Empty);
|
|
}
|
|
if (nextPlatformIsSameHeight && !isEndEvent)
|
|
{
|
|
canKick = true;
|
|
BeatAction.New(this, new List<BeatAction.Action>()
|
|
{
|
|
new BeatAction.Action(endBeat, delegate
|
|
{
|
|
if (!stopped)
|
|
{
|
|
SoundByte.PlayOneShotGame("nightWalkAgb/boxKick");
|
|
if (canKick)
|
|
{
|
|
anim.Play("Kick", 0, 0);
|
|
}
|
|
}
|
|
})
|
|
});
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
private void Awake()
|
|
{
|
|
game = AgbNightWalk.instance;
|
|
anim = GetComponent<Animator>();
|
|
Update();
|
|
}
|
|
|
|
private bool startGlowing;
|
|
private void Update()
|
|
{
|
|
var cond = Conductor.instance;
|
|
if (cond.isPlaying && !cond.isPaused)
|
|
{
|
|
if (!stopped)
|
|
{
|
|
float normalizedBeat = cond.GetPositionFromBeat(startBeat, endBeat - startBeat);
|
|
|
|
float newPosX = Mathf.LerpUnclamped(handler.playerXPos + (float)((endBeat - startBeat) * handler.platformDistance), handler.playerXPos, normalizedBeat);
|
|
|
|
transform.localPosition = new Vector3(newPosX, handler.defaultYPos + additionalHeight);
|
|
|
|
if (cond.songPositionInBeats > endBeat + (handler.platformCount * 0.5f))
|
|
{
|
|
ResetInput();
|
|
}
|
|
}
|
|
if (playYanIsFalling)
|
|
{
|
|
float normalizedFallBeat = cond.GetPositionFromBeat(playYanFallBeat, 2);
|
|
EasingFunction.Function func = EasingFunction.GetEasingFunction(EasingFunction.Ease.EaseInQuad);
|
|
float newPlayYanY = func(0, -12, normalizedFallBeat);
|
|
if (fallYan.activeSelf) fallYan.transform.localPosition = new Vector3(0, newPlayYanY);
|
|
else if (fallYanRoll.activeSelf) fallYanRoll.transform.localPosition = new Vector3(fallYanRoll.transform.localPosition.x, newPlayYanY);
|
|
}
|
|
|
|
if (!startGlowing && isEndEvent && game.hitJumps >= game.requiredJumps && AgbNightWalk.hitJumpsPersist >= game.requiredJumpsP)
|
|
{
|
|
if (isRollPlatform) rollPlatform.DoScaledAnimationAsync("EndGlow", 0.5f);
|
|
else anim.DoScaledAnimationAsync("EndGlow", 0.5f);
|
|
startGlowing = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
public void Stop()
|
|
{
|
|
stopped = true;
|
|
if (inputEvent != null) inputEvent.Disable();
|
|
if (releaseEvent != null) releaseEvent.Disable();
|
|
}
|
|
|
|
public void Disappear(double beat)
|
|
{
|
|
anim.DoScaledAnimationAsync("Destroy", 0.5f);
|
|
rollPlatform.DoScaledAnimationAsync("Destroy", 0.5f);
|
|
SoundByte.PlayOneShotGame("nightWalkAgb/disappear");
|
|
if (fallYan.activeSelf || fallYanRoll.activeSelf)
|
|
{
|
|
SoundByte.PlayOneShotGame("nightWalkAgb/fall");
|
|
playYanIsFalling = true;
|
|
playYanFallBeat = beat;
|
|
Update();
|
|
}
|
|
}
|
|
|
|
private void ResetInput(float multiplier = 0.5f)
|
|
{
|
|
double newStartBeat = endBeat + (handler.platformCount * multiplier);
|
|
anim.Play("Idle", 0, 0);
|
|
StartInput(newStartBeat, newStartBeat + (handler.platformCount * multiplier));
|
|
}
|
|
private void JustRollHold(PlayerActionEvent caller, float state)
|
|
{
|
|
canKick = false;
|
|
|
|
if (caller.noAutoplay)
|
|
{
|
|
releaseEvent = game.ScheduleUserInput(startBeat, endBeat - startBeat + 0.5, AgbNightWalk.InputAction_AltUp, JustRollRelease, RollMissRelease, Empty);
|
|
}
|
|
else
|
|
{
|
|
releaseEvent = game.ScheduleInput(startBeat, endBeat - startBeat + 0.5, AgbNightWalk.InputAction_AltUp, JustRollRelease, RollMissRelease, Empty);
|
|
}
|
|
|
|
if (state >= 1f || state <= -1f)
|
|
{
|
|
anim.DoScaledAnimationAsync("FlowerBarely", 0.5f);
|
|
return;
|
|
}
|
|
game.playYan.Roll(Conductor.instance.songPositionInBeats);
|
|
SoundByte.PlayOneShot("games/nightWalkRvl/highJump5");
|
|
anim.DoScaledAnimationAsync("Flower", 0.5f);
|
|
}
|
|
|
|
private void JustRollRelease(PlayerActionEvent caller, float state)
|
|
{
|
|
canKickRelease = false;
|
|
double beat = Conductor.instance.songPositionInBeats;
|
|
if (isEndEvent)
|
|
{
|
|
if (game.hitJumps >= game.requiredJumps && AgbNightWalk.hitJumpsPersist >= game.requiredJumpsP)
|
|
{
|
|
rollPlatform.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(this, new List<BeatAction.Action>()
|
|
{
|
|
new BeatAction.Action(beat + 1, 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
|
|
{
|
|
if (isFish)
|
|
{
|
|
game.ScoreMiss();
|
|
game.playYan.transform.localPosition = new Vector3(0, 2);
|
|
game.playYan.Shock(true);
|
|
fish.DoScaledAnimationAsync("Shock", 0.5f);
|
|
handler.StopAll();
|
|
handler.DestroyPlatforms(caller.timer + caller.startBeat + 2, endBeat - 2, endBeat + 6);
|
|
BeatAction.New(this, new List<BeatAction.Action>()
|
|
{
|
|
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.justEarlyTime, Conductor.instance.GetBpmAtBeat(beat));
|
|
BeatAction.New(this, 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 (isFish)
|
|
{
|
|
game.ScoreMiss();
|
|
game.playYan.transform.localPosition = new Vector3(0, 2);
|
|
game.playYan.Shock(true);
|
|
fish.DoScaledAnimationAsync("Shock", 0.5f);
|
|
handler.StopAll();
|
|
handler.DestroyPlatforms(caller.timer + caller.startBeat + 2, endBeat - 2, endBeat + 6);
|
|
BeatAction.New(this, new List<BeatAction.Action>()
|
|
{
|
|
new BeatAction.Action(caller.timer + caller.startBeat + 4, delegate
|
|
{
|
|
game.playYan.Fall(caller.timer + caller.startBeat + 4);
|
|
fish.DoScaledAnimationAsync("FishIdle", 0.5f);
|
|
})
|
|
});
|
|
}
|
|
else if (isFinalBlock)
|
|
{
|
|
handler.DestroyPlatforms(caller.timer + caller.startBeat + 2, endBeat - 2, endBeat);
|
|
double missTime2 = 1.5 - Conductor.instance.SecsToBeats(Minigame.justEarlyTime, Conductor.instance.GetBpmAtBeat(beat));
|
|
BeatAction.New(this, new List<BeatAction.Action>()
|
|
{
|
|
new BeatAction.Action(beat + missTime2, delegate
|
|
{
|
|
game.ScoreMiss();
|
|
handler.StopAll();
|
|
}),
|
|
});
|
|
}
|
|
}
|
|
if (state >= 1f || state <= -1f)
|
|
{
|
|
SoundByte.PlayOneShotGame("nightWalkAgb/ng");
|
|
if (!isEndEvent) rollPlatform.DoScaledAnimationAsync("UmbrellaBarely", 0.5f);
|
|
return;
|
|
}
|
|
SoundByte.PlayOneShot("games/nightWalkRvl/highJump7");
|
|
if (!isEndEvent) rollPlatform.DoScaledAnimationAsync("Umbrella", 0.5f);
|
|
game.starHandler.Evolve(game.evolveAmount * 2);
|
|
game.hitJumps += 2;
|
|
AgbNightWalk.hitJumpsPersist += 2;
|
|
}
|
|
|
|
private void RollMissHold(PlayerActionEvent caller)
|
|
{
|
|
if (caller.noAutoplay)
|
|
{
|
|
releaseEvent = game.ScheduleUserInput(startBeat, endBeat - startBeat + 0.5, AgbNightWalk.InputAction_AltUp, JustRollRelease, RollMissRelease, Empty);
|
|
}
|
|
else
|
|
{
|
|
releaseEvent = game.ScheduleInput(startBeat, endBeat - startBeat + 0.5, AgbNightWalk.InputAction_AltUp, JustRollRelease, RollMissRelease, Empty);
|
|
}
|
|
releaseEvent.canHit = false;
|
|
game.playYan.Walk();
|
|
SoundByte.PlayOneShotGame("nightWalkAgb/open" + (int)type, caller.timer + caller.startBeat + 0.5);
|
|
BeatAction.New(this, new List<BeatAction.Action>()
|
|
{
|
|
new BeatAction.Action(caller.timer + caller.startBeat + 0.5, delegate { anim.DoScaledAnimationAsync("Note", 0.5f); })
|
|
});
|
|
}
|
|
|
|
private void RollMissRelease(PlayerActionEvent caller)
|
|
{
|
|
if (nextPlatformIsSameHeight && !isEndEvent)
|
|
{
|
|
game.playYan.Walk();
|
|
SoundByte.PlayOneShotGame("nightWalkAgb/open" + (int)type, caller.timer + caller.startBeat + 0.5);
|
|
BeatAction.New(this, new List<BeatAction.Action>()
|
|
{
|
|
new BeatAction.Action(caller.timer + caller.startBeat + 0.5, delegate { rollPlatform.DoScaledAnimationAsync("Note", 0.5f); })
|
|
});
|
|
}
|
|
else
|
|
{
|
|
handler.StopAll();
|
|
handler.DestroyPlatforms(caller.timer + caller.startBeat + 1.5, endBeat - 2, endBeat + 6);
|
|
SoundByte.PlayOneShotGame("nightWalkAgb/wot");
|
|
game.playYan.Hide();
|
|
fallYanRoll.SetActive(true);
|
|
fallYanRoll.GetComponent<Animator>().DoScaledAnimationAsync("FallSmear", 0.5f);
|
|
}
|
|
}
|
|
|
|
private void Just(PlayerActionEvent caller, float state)
|
|
{
|
|
canKick = false;
|
|
double beat = Conductor.instance.songPositionInBeats;
|
|
handler.RaiseHeight(beat, lastAdditionalHeightInUnits, additionalHeightInUnits);
|
|
game.playYan.Jump(beat, isFinalBlock);
|
|
if (isFish)
|
|
{
|
|
BeatAction.New(this, new List<BeatAction.Action>()
|
|
{
|
|
new BeatAction.Action(beat + 0.5, delegate
|
|
{
|
|
game.ScoreMiss();
|
|
game.playYan.Shock();
|
|
fish.DoScaledAnimationAsync("Shock", 0.5f);
|
|
handler.StopAll();
|
|
handler.DestroyPlatforms(caller.timer + caller.startBeat + 2, endBeat - 2, endBeat + 6);
|
|
}),
|
|
new BeatAction.Action(caller.timer + caller.startBeat + 4, delegate
|
|
{
|
|
game.playYan.Fall(caller.timer + caller.startBeat + 4);
|
|
fish.DoScaledAnimationAsync("FishIdle", 0.5f);
|
|
})
|
|
});
|
|
}
|
|
else if (isFinalBlock)
|
|
{
|
|
handler.DestroyPlatforms(caller.timer + caller.startBeat + 2, endBeat - 2, endBeat);
|
|
double missTime = 1 - Conductor.instance.SecsToBeats(Minigame.justEarlyTime, Conductor.instance.GetBpmAtBeat(beat));
|
|
BeatAction.New(this, new List<BeatAction.Action>()
|
|
{
|
|
new BeatAction.Action(beat + missTime, delegate
|
|
{
|
|
game.ScoreMiss();
|
|
handler.StopAll();
|
|
}),
|
|
|
|
});
|
|
}
|
|
if (state >= 1 || state <= -1)
|
|
{
|
|
SoundByte.PlayOneShotGame("nightWalkAgb/ng");
|
|
switch (type)
|
|
{
|
|
case PlatformType.Flower:
|
|
anim.DoScaledAnimationAsync("FlowerBarely", 0.5f);
|
|
break;
|
|
case PlatformType.Lollipop:
|
|
anim.DoScaledAnimationAsync("LollipopBarely", 0.5f);
|
|
break;
|
|
case PlatformType.Umbrella:
|
|
anim.DoScaledAnimationAsync("UmbrellaBarely", 0.5f);
|
|
break;
|
|
}
|
|
return;
|
|
}
|
|
if (doFillStartSound) SoundByte.PlayOneShotGame("nightWalkAgb/fillStart");
|
|
else SoundByte.PlayOneShotGame("nightWalkAgb/jump" + (int)type);
|
|
switch (type)
|
|
{
|
|
case PlatformType.Flower:
|
|
anim.DoScaledAnimationAsync("Flower", 0.5f);
|
|
break;
|
|
case PlatformType.Lollipop:
|
|
anim.DoScaledAnimationAsync("Lollipop", 0.5f);
|
|
break;
|
|
case PlatformType.Umbrella:
|
|
anim.DoScaledAnimationAsync("Umbrella", 0.5f);
|
|
break;
|
|
}
|
|
game.starHandler.Evolve(game.evolveAmount);
|
|
game.hitJumps++;
|
|
AgbNightWalk.hitJumpsPersist++;
|
|
}
|
|
|
|
private void JustEnd(PlayerActionEvent caller, float state)
|
|
{
|
|
double beat = caller.timer + caller.startBeat;
|
|
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(this, 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
|
|
{
|
|
handler.RaiseHeight(beat, lastAdditionalHeightInUnits, additionalHeightInUnits);
|
|
game.playYan.Jump(beat);
|
|
}
|
|
}
|
|
|
|
private void Miss(PlayerActionEvent caller)
|
|
{
|
|
if (nextPlatformIsSameHeight)
|
|
{
|
|
game.playYan.Walk();
|
|
SoundByte.PlayOneShotGame("nightWalkAgb/open" + (int)type, caller.timer + caller.startBeat + 0.5);
|
|
BeatAction.New(this, new List<BeatAction.Action>()
|
|
{
|
|
new BeatAction.Action(caller.timer + caller.startBeat + 0.5, delegate { anim.DoScaledAnimationAsync("Note", 0.5f); })
|
|
});
|
|
}
|
|
else
|
|
{
|
|
handler.StopAll();
|
|
handler.DestroyPlatforms(caller.timer + caller.startBeat + 2, endBeat - 2, endBeat + 6);
|
|
SoundByte.PlayOneShotGame("nightWalkAgb/wot");
|
|
game.playYan.Hide();
|
|
fallYan.SetActive(true);
|
|
fallYan.GetComponent<Animator>().DoScaledAnimationAsync("FallSmear", 0.5f);
|
|
}
|
|
}
|
|
|
|
private void Empty(PlayerActionEvent caller) { }
|
|
}
|
|
}
|
|
|