HeavenStudio/Assets/Scripts/Games/BoardMeeting/BMExecutive.cs
Rapandrasmus ac1804a901
Space Soccer Improvements (#382)
* SupahScrollSetUp

* Scrolls now, with issues, also added a flames animation

* Started implementing new multiple space kickers

* bg recolor space soccer

* Recolorable dots!

* we circular motitating n shit

* ReAdded Enter and exit stuff

* I despise unexplainable bugs

* The balls are so buggy 😱

* Trying to fix someting

* Fixed Scroll Stutter

* Fixed a whiff bug

* Updated sounds and added ease event for space kickers

* Fixed some bugs

* Changed some names

* new option for quiz show random presses

* Board meeting bug fixes

* Testing Curve stuff

* Converted all code to use new curves, need to fix all issues

* Playing around with keypoint values, will probably expose them so someone else can mess with them

* curves be like

* Fixed stuff

* BALLS FIXED

* Fixed clappy trio stuff

* Added player move event

* Almost fixed, just need to fix wonkiness with high kick toe

* Fixed da bug

* Board meeting and quiz show tweaks

* Fix for board meeting and enter/exit presets for space soccer

* Stop ball added

* Updated how scroll works
2023-04-26 12:43:35 +00:00

102 lines
3.1 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using HeavenStudio.Util;
namespace HeavenStudio.Games.Scripts_BoardMeeting
{
public class BMExecutive : MonoBehaviour
{
public BoardMeeting game;
public bool player;
public Animator anim;
bool canBop = true;
int smileCounter = 0;
public bool spinning;
bool preparing;
Sound rollLoop = null;
private void Awake()
{
anim = GetComponent<Animator>();
game = BoardMeeting.instance;
}
public void Prepare()
{
if (spinning) return;
preparing = true;
anim.DoScaledAnimationAsync("Prepare", 0.5f);
canBop = false;
}
public void Spin(string soundToPlay = "A", bool forceStart = false)
{
if (spinning) return;
spinning = true;
preparing = false;
string animToPlay = game.firstSpinner.anim.GetCurrentAnimatorStateInfo(0).IsName("Spin") ? "Spin" : "LoopSpin";
if (this == game.firstSpinner) anim.DoUnscaledAnimation("Spin", 0);
else anim.DoUnscaledAnimation(forceStart ? "Spin" : animToPlay, forceStart ? 0 : game.firstSpinner.anim.GetCurrentAnimatorStateInfo(0).normalizedTime);
canBop = false;
Jukebox.PlayOneShotGame("boardMeeting/rollPrepare" + soundToPlay);
float offset = 0;
switch (soundToPlay)
{
case "A":
case "B":
offset = 0.01041666666f;
break;
case "C":
case "Player":
offset = 0.02083333333f;
break;
default:
offset = 0;
break;
}
rollLoop = Jukebox.PlayOneShotGame("boardMeeting/roll" + soundToPlay, Conductor.instance.songPositionInBeats + 0.5f - Conductor.instance.GetRestFromRealTime(offset), 1, 1, true);
}
public void Stop(bool hit = true)
{
if (!spinning) return;
spinning = false;
anim.DoScaledAnimationAsync(hit ? "Stop" : "Miss", hit ? 0.5f : 0.25f);
if (rollLoop != null)
{
rollLoop.KillLoop(0);
rollLoop = null;
}
BeatAction.New(game.gameObject, new List<BeatAction.Action>()
{
new BeatAction.Action(Conductor.instance.songPositionInBeats + 1.5f, delegate { canBop = true; })
});
}
public void Bop()
{
if (!canBop || spinning || !anim.IsAnimationNotPlaying() || preparing) return;
if (smileCounter > 0)
{
anim.DoScaledAnimationAsync("SmileBop", 0.5f);
smileCounter--;
}
else
{
anim.DoScaledAnimationAsync("Bop", 0.5f);
}
}
public void Smile()
{
if (spinning) return;
if (!preparing) anim.Play("SmileIdle");
smileCounter = 2;
}
}
}