Park/Rides/BasicRide.Persistence.cs
using HC3.Persistence;
using System.Text.Json.Nodes;
namespace HC3;
/// <summary>
/// Handles persistence for a <see cref="BasicRide"/>
/// </summary>
partial class BasicRide
{
protected override JsonObject GetPersistentMetadata()
{
var obj = base.GetPersistentMetadata();
obj["MinimumLoad"] = MinimumLoad.ToString();
obj["RideLength"] = RideLength;
obj["MinimumLoadTime"] = MinimumLoadTime;
obj["MaximumLoadtime"] = MaximumLoadTime;
obj["GuestCost"] = GuestCost;
obj["Durability"] = Durability;
obj["IsBroken"] = IsBroken;
obj["QueueTintData"] = Json.Serialize( queueColors );
obj["Music"] = MusicPlayer.Track?.ResourcePath;
return obj;
}
protected override void SetPersistentMetadata( JsonObject obj )
{
if ( obj == null )
return;
base.SetPersistentMetadata( obj );
if ( obj.TryGetPropertyValue( "MinimumLoad", out var minRequired ) )
{
MinimumLoad = minRequired.GetValueEnum<LoadMode>();
}
if ( obj.TryGetPropertyValue( "RideLength", out var rideLength ) )
{
RideLength = rideLength.GetValue<float>();
}
if ( obj.TryGetPropertyValue( "MinimumLoadTime", out var minLoadTime ) )
{
MinimumLoadTime = minLoadTime.GetValue<float>();
}
if ( obj.TryGetPropertyValue( "MaximumLoadtime", out var maxLoadTime ) )
{
MaximumLoadTime = maxLoadTime.GetValue<float>();
}
if ( obj.TryGetPropertyValue( "GuestCost", out var guestCost ) )
{
GuestCost = guestCost.GetValue<int>();
}
if ( obj.TryGetPropertyValue( "Durability", out var durability ) )
{
Durability = durability.GetValue<float>();
}
if ( obj.TryGetPropertyValue( "IsBroken", out var isBroken ) )
{
IsBroken = isBroken.GetValue<bool>();
MusicPlayer.IsBrokenDown = IsBroken;
}
if ( obj.TryGetPropertyValue( "QueueTintData", out var queueTintData ) )
{
queueColors = Json.Deserialize<Dictionary<TintChannel, Color>>( queueTintData!.ToString() );
UpdateQueueColors();
}
if ( obj.TryGetPropertyValue( "Music", out var musicPath ) )
{
MusicPlayer.SetTrack( musicPath?.GetValue<string>() );
}
}
async void UpdateQueueColors()
{
// Waits for everything else to load (persistence) before we update the queue colours
await PersistenceManager.WaitForLoad();
foreach ( var kv in queueColors )
{
UpdateQueueColor( kv.Value, kv.Key );
}
}
}