GameLogic/SaveManager.cs
using Sandbox;

public static class SaveManager
{
	private const string SaveFileName = "campaign_save.json";

	public static bool HasSave() => FileSystem.Data.FileExists( SaveFileName );

	public static void Save( CampaignSaveData data )
	{
		try
		{
			FileSystem.Data.WriteJson( SaveFileName, data );
			Log.Info( $"💾 [SAUVEGARDE] Progression enregistrée (Round {data.CurrentRoundIndex + 1})." );
		}
		catch ( System.Exception ex )
		{
			Log.Error( $"Erreur lors de la sauvegarde : {ex.Message}" );
		}
	}

	public static CampaignSaveData Load()
	{
		if ( !HasSave() ) return null;

		try
		{
			var data = FileSystem.Data.ReadJson<CampaignSaveData>( SaveFileName );
			Log.Info( $"📂 [CHARGEMENT] Partie reprise au Round {data.CurrentRoundIndex + 1}." );
			return data;
		}
		catch ( System.Exception ex )
		{
			Log.Error( $"Erreur lors du chargement : {ex.Message}" );
			return null;
		}
	}

	public static void ClearSave()
	{
		if ( FileSystem.Data.FileExists( SaveFileName ) )
		{
			FileSystem.Data.DeleteFile( SaveFileName );
			Log.Info( "🗑️ [SAUVEGARDE] Fichier de sauvegarde supprimé." );
		}
	}
}