Files
sbox-public/game/addons/tools/Code/Scene/SceneView/SceneViewportWidget.Game.cs
Sol Williams 80aa601771 Restore separate GameEditorSessions (#3453)
* SceneEditorSession: make game vs editor scenes more distinct, Scene is whichever is currently active

* Route prefab update, model reload etc events to both scenes if needed

* SceneTree update checking a bit cleaner

* Bring back GameEditorSessions instead, so undo, selection etc can all be linked 1:1 with scenes again

* tweak and tidy
2025-11-26 16:05:23 +00:00

56 lines
1.3 KiB
C#

namespace Editor;
public partial class SceneViewportWidget
{
public void StartPlay()
{
Editor.GameMode.SetPlayWidget( Renderer );
Renderer.Scene = Session.Scene;
Renderer.Camera = null;
Renderer.EnableEngineOverlays = true;
ViewportOptions.Visible = false;
}
public void StopPlay()
{
Editor.GameMode.ClearPlayMode();
Renderer.Scene = Session.Scene;
_activeCamera = _editorCamera;
Renderer.Camera = _activeCamera;
Renderer.EnableEngineOverlays = false;
ViewportOptions.Visible = true;
SetDefaultSize();
}
public void EjectGameCamera()
{
Editor.GameMode.ClearPlayMode();
var gameCamera = Renderer.Scene.Camera;
if ( gameCamera.IsValid() )
{
// put the scene camera at the game cam's transform
State.CameraPosition = gameCamera.WorldPosition;
State.CameraRotation = gameCamera.WorldRotation;
}
if ( !_ejectCamera.IsValid() )
_ejectCamera = Renderer.CreateSceneEditorCamera();
_activeCamera = _ejectCamera;
Renderer.Camera = _activeCamera;
Renderer.EnableEngineOverlays = false;
ViewportOptions.Visible = true;
SetDefaultSize();
}
public void PossesGameCamera()
{
Editor.GameMode.SetPlayWidget( Renderer );
_activeCamera = null;
Renderer.Camera = null;
Renderer.EnableEngineOverlays = true;
ViewportOptions.Visible = false;
}
}