Player/JumperProgress.cs
using Sandbox;
public class JumperProgressData
{
public Vector3 Position { get; set; }
public Angles Angles { get; set; }
public float TimePlayed { get; set; }
public float BestHeight { get; set; }
public int TotalJumps { get; set; }//never reset this
public int TotalFalls { get; set; }//never reset this
public int NumberCompletions { get; set; }//never reset this
public bool HasCompleted { get; set; }
}
public sealed class JumperProgress : Component
{
string FileName => $"{Scene.Name}_progress.json";
public JumperProgressData Current { get; set; }
void Fetch()
{
Current ??= FileSystem.Data.ReadJson<JumperProgressData>( FileName, null );
if ( Current != null )
{
var player = Components.Get<JumperPlayerStuff>( FindMode.InParent );
player.MaxHeight = Current.BestHeight;
player.TotalJumps = Current.TotalJumps;
player.TotalFalls = Current.TotalFalls;
player.TimePlayed = Current.TimePlayed;
player.Completions = Current.NumberCompletions;
player.Position = Current.Position;
GameObject.Parent.WorldPosition = Current.Position;
var plycontroller = GameObject.Components.Get<PlayerController>( FindMode.InAncestors );
plycontroller.WorldRotation = Current.Angles;
}
else
{
Current = new();
}
}
protected override void OnStart()
{
if(IsProxy)
return;
Fetch();
}
public void Save()
{
// If we didn't load data yet (somehow)
if ( Current == null )
{
Fetch();
}
FileSystem.Data.WriteJson( FileName, Current );
}
}