@@ -5,10 +5,11 @@ import { DamageType, Explosion } from "common/enums";
5
5
import { PerspectiveCamera , Vector3 } from "three" ;
6
6
import { GameViewPort } from "../../camera/game-viewport" ;
7
7
import { World } from "./world" ;
8
- import type { SceneController } from "@plugins/scene-controller" ;
8
+ import type { SceneController , VRSceneController } from "@plugins/scene-controller" ;
9
9
import { easeInCubic } from "@utils/function-utils" ;
10
10
import range from "common/utils/range" ;
11
11
import { mixer } from "@audio/main-mixer" ;
12
+ import { renderComposer } from "@render/index" ;
12
13
13
14
// frequency, duration, strength multiplier
14
15
const explosionFrequencyDuration = {
@@ -134,12 +135,24 @@ export const createViewControllerComposer = (
134
135
if ( sceneController ?. onExitScene ) {
135
136
try {
136
137
world . events . emit ( "scene-controller-exit" , sceneController . name ) ;
137
- prevData = sceneController . onExitScene ( prevData ) ;
138
+ const _prevData = sceneController . onExitScene ( prevData ) ;
139
+ //todo: further validate prevData
140
+ if ( _prevData ?. target && _prevData ?. position ) {
141
+ prevData = _prevData ;
142
+ }
138
143
} catch ( e ) {
139
144
log . error ( e ) ;
140
145
}
141
146
}
142
147
148
+ if ( sceneController ) {
149
+ sceneController . parent . removeFromParent ( ) ;
150
+ }
151
+
152
+ if ( sceneController ?. isWebXR ) {
153
+ ( sceneController as VRSceneController ) . viewerPosition . removeFromParent ( ) ;
154
+ }
155
+
143
156
sceneController = null ;
144
157
gameSurface . togglePointerLock ( false ) ;
145
158
@@ -150,6 +163,15 @@ export const createViewControllerComposer = (
150
163
viewports . length = 0 ;
151
164
viewports . push ( ...createViewports ( newController . viewportsCount ) ) ;
152
165
166
+ if ( newController . isWebXR ) {
167
+ const vrController = newController as VRSceneController ;
168
+ vrController . setupXR ( renderComposer . glRenderer . xr ) ;
169
+ newController . scene . add ( vrController . viewerPosition ) ;
170
+ vrController . viewerPosition . add ( vrController . viewport . camera ) ;
171
+ }
172
+
173
+ newController . scene . add ( newController . parent ) ;
174
+
153
175
await newController . onEnterScene ( prevData ) ;
154
176
sceneController = newController ;
155
177
0 commit comments