Utility/CameraSetup.cs

/// <summary>
/// Creates a bunch of callbacks, allowing finer control over applying camera effects
/// </summary>
public sealed class CameraSetup : Component
{
	protected override void OnPreRender()
	{
		var cc = GetComponent<CameraComponent>();
		if ( cc is null ) return;

		ICameraSetup.Post( x => x.PreSetup( cc ) );
		ICameraSetup.Post( x => x.Setup( cc ) );
		ICameraSetup.Post( x => x.PostSetup( cc ) );
	}
}


public interface ICameraSetup : ISceneEvent<ICameraSetup>
{
	// Effects before viewmodel
	public void PreSetup( CameraComponent cc ) { }

	// Place viewmodel
	public void Setup( CameraComponent cc ) { }

	// Effects including viewmodel
	public void PostSetup( CameraComponent cc ) { }
}