Progression/ShipSkinUnlocks.cs
/// <summary>
/// Cookie-based ship skin unlock tracker. Client-side singleton.
/// </summary>
public sealed class ShipSkinUnlocks
{
private static ShipSkinUnlocks _current;
private static string CookieName => $"{Connection.Local?.DisplayName}.Skins";
public List<string> UnlockedSkins { get; set; } = new();
public bool IsUnlocked( ShipData.ShipSkinEntry skin, ShipData ship )
=> UnlockedSkins.Contains( skin.SkinName + ship.ShipName );
public void Unlock( ShipData.ShipSkinEntry skin, ShipData ship )
{
if ( IsUnlocked( skin, ship ) ) return;
if ( Experience.Current.XP < skin.XPNeeded ) return;
Experience.Current.XP -= skin.XPNeeded;
UnlockedSkins.Add( skin.SkinName + ship.ShipName );
}
public void Save() => Cookie.Set( CookieName, this );
public static ShipSkinUnlocks Current
{
get
{
_current ??= Cookie.Get<ShipSkinUnlocks>( CookieName, new() );
return _current;
}
}
}