new file: .editorconfig
new file: .gitattributes new file: Charts/track.json new file: ProjectOnrinto.csproj new file: ProjectOnrinto.sln new file: Scenes/Audio/audio_stream_player.tscn new file: Scenes/Game/level.tscn new file: Scenes/Prefabs/beat.tscn new file: Scripts/Core/GameManager.cs new file: Scripts/Core/GameManager.cs.uid new file: Scripts/Core/MusicClock.cs new file: Scripts/Core/MusicClock.cs.uid new file: Scripts/Core/TrackGenerator.cs new file: Scripts/Core/TrackGenerator.cs.uid new file: Scripts/Data/ChartEvent.cs new file: Scripts/Data/ChartEvent.cs.uid new file: Scripts/Data/JsonConverter.cs new file: Scripts/Data/JsonConverter.cs.uid new file: Scripts/Data/TrackData.cs new file: Scripts/Data/TrackData.cs.uid new file: Scripts/GameObjects/NoteObject.cs new file: Scripts/GameObjects/NoteObject.cs.uid new file: icon.svg new file: icon.svg.import new file: project.godot
This commit is contained in:
71
Scripts/Core/GameManager.cs
Normal file
71
Scripts/Core/GameManager.cs
Normal file
@@ -0,0 +1,71 @@
|
||||
using Godot;
|
||||
using Onrinto.Chart;
|
||||
|
||||
public partial class GameManager : Node3D
|
||||
{
|
||||
public TrackData CurrentTrack { get; private set; }
|
||||
public static GameManager Instance { get; private set; }
|
||||
|
||||
public float CurrentAbsoluteSpeed { get; private set; }
|
||||
public float CurrentAbsZ { get; private set; }
|
||||
|
||||
private int absoluteSpeedPointIndexArrow = 0;
|
||||
|
||||
private void UpdateAbsoluteState(double time)
|
||||
{
|
||||
var points = CurrentTrack.AbsoluteSpeedPoints;
|
||||
if(points == null || points.Count == 0) return;
|
||||
|
||||
double firstPointTime = CurrentTrack.TickToSeconds(points[0].Tick);
|
||||
if(time < firstPointTime)
|
||||
{
|
||||
CurrentAbsoluteSpeed = points[0].Speed;
|
||||
return;
|
||||
}
|
||||
|
||||
for(int i = absoluteSpeedPointIndexArrow; i < points.Count - 1; i++)
|
||||
{
|
||||
double pointTime_from = CurrentTrack.TickToSeconds(points[i].Tick);
|
||||
double pointTime_to = CurrentTrack.TickToSeconds(points[i + 1].Tick);
|
||||
|
||||
if(time >= pointTime_from && time < pointTime_to)
|
||||
{
|
||||
absoluteSpeedPointIndexArrow = i;
|
||||
|
||||
if(points[i].IsLinear)
|
||||
{
|
||||
double t = (time - pointTime_from) / (pointTime_to - pointTime_from);
|
||||
CurrentAbsoluteSpeed = Mathf.Lerp(points[i].Speed, points[i + 1].Speed, (float)t);
|
||||
}
|
||||
else
|
||||
{
|
||||
CurrentAbsoluteSpeed = points[i].Speed;
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
absoluteSpeedPointIndexArrow = points.Count - 1;
|
||||
CurrentAbsoluteSpeed = points[^1].Speed;
|
||||
}
|
||||
|
||||
// Called when the node enters the scene tree for the first time.
|
||||
public override void _Ready()
|
||||
{
|
||||
if (Instance != null){ QueueFree(); return; }
|
||||
Instance = this;
|
||||
|
||||
ProcessPriority = -100;
|
||||
}
|
||||
|
||||
// Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
public override void _Process(double delta)
|
||||
{
|
||||
double tNow = MusicClock.Instance.CurrentTime;
|
||||
|
||||
if(CurrentTrack == null) return;
|
||||
|
||||
UpdateAbsoluteState(tNow);
|
||||
CurrentAbsZ = CurrentTrack.GetZ(tNow, CurrentTrack.RelativeSpeedPoints, CurrentTrack.RelativeZTable);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user