HeavenStudio/Assets/Scripts/Games/WorkingDough/NPCDoughBall.cs

63 lines
2.1 KiB
C#
Raw Normal View History

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using NaughtyBezierCurves;
using HeavenStudio.Util;
namespace HeavenStudio.Games.Scripts_WorkingDough
{
public enum FlyingStage
{
EnteringUp = 0,
EnteringDown = 1,
ExitingUp = 2,
ExitingDown = 3
}
public class NPCDoughBall : MonoBehaviour
{
public double startBeat;
public FlyingStage currentFlyingStage = FlyingStage.EnteringUp;
[NonSerialized] public BezierCurve3D enterUpCurve;
[NonSerialized] public BezierCurve3D enterDownCurve;
[NonSerialized] public BezierCurve3D exitUpCurve;
[NonSerialized] public BezierCurve3D exitDownCurve;
private void Update()
{
var cond = Conductor.instance;
float flyPos = 0f;
switch (currentFlyingStage) {
case FlyingStage.EnteringUp:
flyPos = cond.GetPositionFromBeat(startBeat, 0.5f);
transform.position = enterUpCurve.GetPoint(flyPos);
if (flyPos > 1f) currentFlyingStage = FlyingStage.EnteringDown;
break;
case FlyingStage.EnteringDown:
flyPos = cond.GetPositionFromBeat(startBeat + 0.5f, 0.5f);
transform.position = enterDownCurve.GetPoint(flyPos);
if (flyPos > 1f) currentFlyingStage = FlyingStage.ExitingUp;
break;
case FlyingStage.ExitingUp:
flyPos = cond.GetPositionFromBeat(startBeat + 1f, 0.5f);
transform.position = exitUpCurve.GetPoint(flyPos);
if (flyPos > 1f) currentFlyingStage = FlyingStage.ExitingDown;
break;
case FlyingStage.ExitingDown:
flyPos = cond.GetPositionFromBeat(startBeat + 1.5f, 0.5f);
transform.position = exitDownCurve.GetPoint(flyPos);
if (flyPos > 1f) GameObject.Destroy(gameObject);
break;
}
}
}
}