22
33public partial class SceneViewportWidget
44{
5- public void StartPlay ( )
5+ /// <summary>
6+ /// Is this viewport the game view?
7+ /// </summary>
8+ public bool IsGameView { get ; private set ; }
9+
10+ /// <summary>
11+ /// Called when the SceneView's view mode changes.
12+ /// </summary>
13+ public void OnViewModeChanged ( SceneViewWidget . ViewMode viewMode )
614 {
7- Editor . GameMode . SetPlayWidget ( Renderer ) ;
815 Renderer . Scene = Session . Scene ;
9- Renderer . Camera = null ;
10- Renderer . EnableEngineOverlays = true ;
11- ViewportOptions . Visible = false ;
16+ GizmoInstance . Selection = Session . Selection ;
17+
18+ if ( _editorCamera . IsValid ( ) && _editorCamera . Scene != Session . Scene )
19+ {
20+ // make sure the editor camera exists in the correct scene
21+ _editorCamera . DestroyGameObject ( ) ;
22+ _editorCamera = Renderer . CreateSceneEditorCamera ( ) ;
23+ }
24+
25+ _activeCamera = viewMode switch
26+ {
27+ SceneViewWidget . ViewMode . Game => null ,
28+ SceneViewWidget . ViewMode . GameEjected => _ejectCamera ,
29+ _ => _editorCamera ,
30+ } ;
31+
32+ Renderer . Camera = _activeCamera ;
33+ Renderer . EnableEngineOverlays = IsGameView ;
34+ ViewportOptions . Visible = ! IsGameView ;
1235 }
1336
14- public void StopPlay ( )
37+ /// <summary>
38+ /// Set this viewport as the game view.
39+ /// </summary>
40+ public void SetGameView ( )
1541 {
16- Editor . GameMode . ClearPlayMode ( ) ;
17- Renderer . Scene = Session . Scene ;
18- _activeCamera = _editorCamera ;
19- Renderer . Camera = _activeCamera ;
20- Renderer . EnableEngineOverlays = false ;
21- ViewportOptions . Visible = true ;
42+ GameMode . SetPlayWidget ( Renderer ) ;
43+ IsGameView = true ;
44+ }
45+
46+ /// <summary>
47+ /// Clear this viewport as the game view.
48+ /// </summary>
49+ public void ClearGameView ( )
50+ {
51+ GameMode . ClearPlayMode ( ) ;
52+ IsGameView = false ;
53+
2254 SetDefaultSize ( ) ;
2355 }
2456
25- public void EjectGameCamera ( )
57+ /// <summary>
58+ /// Called when ejecting from the game state.
59+ /// </summary>
60+ public void OnEject ( )
2661 {
27- Editor . GameMode . ClearPlayMode ( ) ;
62+ GameMode . ClearPlayMode ( ) ;
63+ IsGameView = false ;
64+
65+ SetDefaultSize ( ) ;
2866
2967 var gameCamera = Renderer . Scene . Camera ;
3068 if ( gameCamera . IsValid ( ) )
@@ -36,20 +74,14 @@ public void EjectGameCamera()
3674
3775 if ( ! _ejectCamera . IsValid ( ) )
3876 _ejectCamera = Renderer . CreateSceneEditorCamera ( ) ;
39-
40- _activeCamera = _ejectCamera ;
41- Renderer . Camera = _activeCamera ;
42- Renderer . EnableEngineOverlays = false ;
43- ViewportOptions . Visible = true ;
44- SetDefaultSize ( ) ;
4577 }
4678
47- public void PossesGameCamera ( )
79+ /// <summary>
80+ /// Called when possessing back into the game state.
81+ /// </summary>
82+ public void OnPossessGame ( )
4883 {
49- Editor . GameMode . SetPlayWidget ( Renderer ) ;
50- _activeCamera = null ;
51- Renderer . Camera = null ;
52- Renderer . EnableEngineOverlays = true ;
53- ViewportOptions . Visible = false ;
84+ GameMode . SetPlayWidget ( Renderer ) ;
85+ IsGameView = true ;
5486 }
5587}
0 commit comments