namespace Editor; class SceneSelectionMode { public Scene Scene { get; } public SelectionSystem Selection { get; } public Ray FirstRay { get; private set; } public Ray Ray { get; private set; } int calls = 0; Ray previousRay; public SceneSelectionMode( Scene scene, SelectionSystem selection ) { Scene = scene; Selection = selection; } internal void Finish( Ray currentRay ) { Ray = currentRay; OnDisabled(); } internal void Think( Ray currentRay ) { Ray = currentRay; calls++; if ( calls == 1 ) { FirstRay = Ray; OnEnabled(); } if ( previousRay != currentRay ) { OnMouseMoved(); } OnUpdate(); previousRay = Ray; } /// /// Called at start /// public virtual void OnEnabled() { } /// /// The mouse has moved, update the selection /// public virtual void OnMouseMoved() { } /// /// Called every frame /// public virtual void OnUpdate() { } /// /// Called when disabled /// public virtual void OnDisabled() { } }