Transposer/Globals.cs
using System.Text.Json;
namespace Sandbox.Transposer;
/// <summary>
/// Direction constants used for collision resolution and movement.
/// </summary>
public enum Direction { Left, Right, Up, Down }
/// <summary>
/// Global constants and state shared across the Transposer game.
/// Mirrors the original Unity Globals class — depth layers for draw
/// ordering and persistent score tracking.
/// </summary>
public static class Globals
{
// ── Debug ────────────────────────────────────────────────────────────
public static bool DebugHitboxes { get; set; }
// ── Depth layers (lower number = drawn on top) ──────────────────────
public const int DEPTH_TEXT = -8;
public const int DEPTH_PARTICLE = -7;
public const int DEPTH_BLOOD_PARTICLE = -6;
public const int DEPTH_PLAYER = -5;
public const int DEPTH_ENEMY = -4;
public const int DEPTH_SHINE = -3;
public const int DEPTH_COIN = -2;
public const int DEPTH_TRAIL = -1;
public const int DEPTH_TILE = 0;
public const int GRID_SQUARE_STARTING_SIZE = 64;
public const string LEADERBOARD_STAT = "transposer_score_v1";
// ── Score tracking (persisted across scene switches) ────────────────
public static bool HasPlayedOnce { get; set; }
public static int LastNumSwaps { get; set; }
public static int LastScore { get; set; }
private static int _highScore;
public static int HighScore
{
get => _highScore;
set
{
_highScore = value;
SaveToDisk();
}
}
// ── Persistence ─────────────────────────────────────────────────────
private const string SAVE_FILE = "transposer_save.json";
private class SaveData
{
public int HighScore { get; set; }
}
/// <summary>
/// Load high score from disk. Call once at game startup.
/// </summary>
public static void LoadFromDisk()
{
try
{
if ( FileSystem.Data.FileExists( SAVE_FILE ) )
{
var json = FileSystem.Data.ReadAllText( SAVE_FILE );
var data = JsonSerializer.Deserialize<SaveData>( json );
if ( data is not null )
_highScore = data.HighScore;
}
}
catch ( System.Exception e )
{
Log.Warning( $"Failed to load Transposer save: {e.Message}" );
}
}
private static void SaveToDisk()
{
try
{
var data = new SaveData { HighScore = _highScore };
var json = JsonSerializer.Serialize( data );
FileSystem.Data.WriteAllText( SAVE_FILE, json );
}
catch ( System.Exception e )
{
Log.Warning( $"Failed to save Transposer data: {e.Message}" );
}
}
}