()
| 1404 | }; |
| 1405 | |
| 1406 | const handleStop = async () => { |
| 1407 | setPlayState('stopped'); |
| 1408 | engine.stop(); |
| 1409 | |
| 1410 | // 重置 RuntimeSceneManager 状态(但保留实例以便下次 Play 复用) |
| 1411 | // Reset RuntimeSceneManager state (but keep instance for next Play reuse) |
| 1412 | if (runtimeSceneManagerRef.current) { |
| 1413 | const GlobalSceneManagerKey = Symbol.for('@esengine/service:runtimeSceneManager'); |
| 1414 | if (Core.services.isRegistered(GlobalSceneManagerKey)) { |
| 1415 | Core.services.unregister(GlobalSceneManagerKey); |
| 1416 | } |
| 1417 | // 调用 reset() 而不是 dispose(),保留 sceneLoader 以便复用 |
| 1418 | // Call reset() instead of dispose(), keep sceneLoader for reuse |
| 1419 | runtimeSceneManagerRef.current.reset(); |
| 1420 | // 注意:不设置 ref 为 null,保留实例 |
| 1421 | // Note: Don't set ref to null, keep the instance |
| 1422 | console.log('[Viewport] RuntimeSceneManager reset (instance kept for reuse)'); |
| 1423 | } |
| 1424 | |
| 1425 | // Restore scene snapshot |
| 1426 | await EngineService.getInstance().restoreSceneSnapshot(); |
| 1427 | // Restore editor camera state |
| 1428 | setCamera2DOffset({ x: editorCameraRef.current.x, y: editorCameraRef.current.y }); |
| 1429 | setCamera2DZoom(editorCameraRef.current.zoom); |
| 1430 | // Restore editor mode (restores grid, gizmos, axis indicator based on settings) |
| 1431 | // 恢复编辑器模式(根据设置恢复网格、gizmos、坐标轴指示器) |
| 1432 | EngineService.getInstance().setEditorMode(true); |
| 1433 | // Restore editor default background color |
| 1434 | EngineService.getInstance().setClearColor(0.1, 0.1, 0.12, 1.0); |
| 1435 | }; |
| 1436 | |
| 1437 | const handleReset = () => { |
| 1438 | // Reset camera to origin without stopping playback |
nothing calls this directly
no test coverage detected