HeavenStudioPlus/Assets/Scripts/Games/Airboarder/Arch.cs
wookywok 841929b547
Airboarder initial PR (#765)
* started working on bon odori

* bon odori is now playable, just no animations and sounds

* bon odori is functional now, just missing the art, better audio and animations

* nothing new, my git is always 1 commit behind

* Revert "nothing new, my git is always 1 commit behind"

This reverts commit b96a70004de5964902f7bc87d819a9e6047e77fb.

* changed the background

im only commiting because saladplainzone is gonna do the anims now

* Accurate BG

* Good prefab

* finalized player prefab

* Finalize Prefab

* More animation stuff

* Bow anim done

* text is now functional, passing the project to AstrlJelly

* merging w master branch

* text scrolling is ALMOST functional

* scrolling is ALMOST ALMOST functional

* FINALLY!!!! TEXT SCOLLING IS DONE!!!!!

* TEXT SCROLLING IS (almost) PERFECT!!!! now we gotta wait for the animations

* minor bug fixes

* TEXT SCROLLING IS ACTUALLY PERFECT NOW. also updated the font

* i forgor to change the outline on the fonts

* Setup

* more working on stuff

* more testing

* more testing

* more testing

* some fixes

* fixes

* testing stuff

* fixed some things

* a few more fixes

* more testing

* More fixes

* bops and animation adjustments

* camera stuff!

* Implementing placeholder icon

* recolorable sky

* fix that bug + format arch file

also change the script name

* oops

---------

Co-authored-by: streitixy <danilomeiraivo@gmail.com>
Co-authored-by: saladplainzone <chocolate2890mail@gmail.com>
Co-authored-by: streitixy <85808002+streitixy@users.noreply.github.com>
Co-authored-by: AstrlJelly <bdlawson115@gmail.com>
Co-authored-by: minenice55 <star.elementa@gmail.com>
2024-03-10 01:47:14 +00:00

157 lines
6.4 KiB
C#

using System.Collections;
using System.Collections.Generic;
using HeavenStudio.Util;
using HeavenStudio.InputSystem;
using UnityEngine;
namespace HeavenStudio.Games.Scripts_Airboarder
{
public class Arch : MonoBehaviour
{
[Header("Components")]
[SerializeField] private GameObject archBasic;
[SerializeField] Animator anim;
public Airboarder game;
public double targetBeat;
public double appearBeat;
public float normalizedStart;
private bool isCrouch;
private void Awake()
{
game = Airboarder.instance;
}
public void CueDuck(double duckBeat)
{
game.ScheduleInput(duckBeat, 3f, Minigame.InputAction_BasicPress, DuckSuccess, DuckMiss, null);
BeatAction.New(game, new List<BeatAction.Action>() {
new BeatAction.Action(duckBeat, delegate {
game.wantsCrouch = false;
game.cpu1CantBop = true;
game.CPU1.DoScaledAnimationAsync("letsgo", 1f, 0, 1);
}),
new BeatAction.Action(duckBeat + 1, delegate {
game.cpu2CantBop = true;
game.CPU1.DoScaledAnimationAsync("duck", 1f, 0, 1);
game.CPU2.DoScaledAnimationAsync("letsgo", 1f, 0, 1);
SoundByte.PlayOneShotGame("airboarder/crouch");
SoundByte.PlayOneShotGame("airboarder/crouchvox");
}),
new BeatAction.Action(duckBeat + 2, delegate {
game.playerCantBop = true;
game.CPU2.DoScaledAnimationAsync("duck", 1f, 0, 1);
game.Player.DoScaledAnimationAsync("letsgo", 1f, 0, 1);
SoundByte.PlayOneShotGame("airboarder/crouch");
SoundByte.PlayOneShotGame("airboarder/crouchvox");
}),
new BeatAction.Action(duckBeat + 2.5, delegate { game.cpu1CantBop = false; } ),
new BeatAction.Action(duckBeat + 3.5, delegate { game.cpu2CantBop = false; } ),
new BeatAction.Action(duckBeat + 4.5, delegate { game.playerCantBop = false; })
});
}
public void CueCrouch(double crouchBeat)
{
game.ScheduleInput(crouchBeat, 3f, Minigame.InputAction_BasicPress, CrouchSuccess, CrouchMiss, null);
BeatAction.New(game, new List<BeatAction.Action>() {
new BeatAction.Action(crouchBeat, delegate {
game.wantsCrouch = true;
game.cpu1CantBop = true;
game.CPU1.DoScaledAnimationAsync("letsgo", 1f, 0, 1);
}),
new BeatAction.Action(crouchBeat+1, delegate {
game.cpu2CantBop = true;
SoundByte.PlayOneShotGame("airboarder/crouch");
SoundByte.PlayOneShotGame("airboarder/crouchCharge");
SoundByte.PlayOneShotGame("airboarder/crouchvox");
game.CPU1.DoScaledAnimationAsync("charge", 1f, 0, 1);
game.CPU2.DoScaledAnimationAsync("letsgo", 1f, 0, 1);
}),
new BeatAction.Action(crouchBeat + 2, delegate {
SoundByte.PlayOneShotGame("airboarder/crouch");
game.playerCantBop = true;
game.CPU2.DoScaledAnimationAsync("charge", 1f, 0, 1);
game.Player.DoScaledAnimationAsync("letsgo", 1f, 0, 1);
SoundByte.PlayOneShotGame("airboarder/crouchCharge");
SoundByte.PlayOneShotGame("airboarder/crouchvox");
})
});
}
void Update()
{
float normalizedStart = game.conductor.GetPositionFromBeat(appearBeat, 40f);
anim.DoNormalizedAnimation("move", normalizedStart, animLayer: 0);
if (normalizedStart > 1) Destroy(gameObject);
}
public void DuckSuccess(PlayerActionEvent caller, float state)
{
game.Player.DoScaledAnimationAsync("duck", 1f, 0, animLayer:1);
double beat = caller.startBeat + caller.timer;
BeatAction.New(this, new() {
new(beat, () => game.playerCantBop = true),
new(beat + 1.5f, () => game.playerCantBop = false)
});
if (state is >= 1 or <= -1)
{
anim.DoScaledAnimationAsync("shake", 1f, 0f, animLayer: 1);
SoundByte.PlayOneShotGame("airboarder/barely");
SoundByte.PlayOneShotGame("airboarder/barelyvox");
}
else
{
SoundByte.PlayOneShotGame("airboarder/crouch");
SoundByte.PlayOneShotGame("airboarder/crouchvox");
}
}
public void DuckMiss(PlayerActionEvent caller)
{
game.Player.DoScaledAnimationAsync("hit1",1.5f, 0, 1);
anim.DoScaledAnimationAsync("break", 1f, 0, animLayer:1);
double beat = caller.startBeat + caller.timer;
game.MissSound(beat);
BeatAction.New(this, new() {
new(beat, () => game.playerCantBop = true),
new(beat + 1.5f, () => game.playerCantBop = false)
});
}
public void CrouchSuccess(PlayerActionEvent caller, float state)
{
game.Player.DoScaledAnimationAsync("charge", 1f, 0, 1);
if (state is >= 1 or <= -1)
{
anim.DoScaledAnimationAsync("shake", 1f, 0, animLayer:1);
SoundByte.PlayOneShotGame("airboarder/barely");
SoundByte.PlayOneShotGame("airboarder/barelyvox");
}
else
{
SoundByte.PlayOneShotGame("airboarder/crouch");
SoundByte.PlayOneShotGame("airboarder/crouchCharge");
SoundByte.PlayOneShotGame("airboarder/crouchvox");
}
game.playerCantBop = true;
}
public void CrouchMiss(PlayerActionEvent caller) {
game.Player.DoScaledAnimationAsync("hit1", 1.5f, 0, 1);
anim.DoScaledAnimationAsync("break", 1f, 0, animLayer: 1);
double beat = caller.startBeat + caller.timer;
game.MissSound(beat);
BeatAction.New(this, new() {
new(beat, ()=>game.playerCantBop = true),
new(beat+1.5f, ()=>game.playerCantBop = false)
});
}
}
}