Park/ParkManager.Persistence.cs
using HC3.Persistence;

/// <summary>
/// Handles persistence for the park's top-level data, like money, and rating.
/// </summary>
public sealed partial class ParkManager : ISaveDataProperty<ParkManager.SaveData>
{
	/// <summary>
	/// A record representing the save data for the park manager.
	/// </summary>
	/// <param name="Money"></param>
	/// <param name="Rating"></param>
	private sealed record SaveData( int Money, float Rating );
	string ISaveDataProperty.PropertyName => "Park";
	int ISaveDataProperty.PropertyOrder => -5_000;

	SaveData ISaveDataProperty<SaveData>.WriteValue( Scene scene ) =>
		new( Money, Rating );

	void ISaveDataProperty<SaveData>.ReadValue( Scene scene, SaveData saveData )
	{
		Money = saveData.Money;
		Rating = saveData.Rating;
	}

	string GetPlaceSound( ObjectMaterial material )
	{
		return material switch
		{
			ObjectMaterial.Default => "place_object_default_1",
			ObjectMaterial.Wood => "place_object_wood_1",
			ObjectMaterial.Metal => "place_object_metal_1",
			ObjectMaterial.Natural => "place_object_nature_1",
			_ => "place_object_default_1"
		};
	}
}