Editor/MovieMaker/Compiler/MovieCompiler.cs
using System.IO;
using System.Text.Json;
using System.Threading.Tasks;
using Sandbox.MovieMaker;
using Sandbox.Resources;

namespace Editor.MovieMaker;

#nullable enable

[ResourceIdentity( "movie" )]
public sealed class MovieCompiler : ResourceCompiler
{
	protected override async Task<bool> Compile()
	{
		var source = await File.ReadAllTextAsync( Context.AbsolutePath );

		source = Context.ScanJson( source );

		var model = JsonSerializer.Deserialize<EmbeddedMovieResource>( source, EditorJsonOptions )!;
		var compiled = model.EditorData?.Deserialize<MovieProject>( EditorJsonOptions )?.Compile() ?? model.Compiled;

		model = new EmbeddedMovieResource { Compiled = compiled };

		Context.Data.Write( JsonSerializer.Serialize( model, EditorJsonOptions ) );

		return true;
	}
}