@realsee/dnalogel 3.80.8-alpha.2 → 3.81.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/DigitalPerformancePlugin/core/DigitalHuman.d.ts +18 -0
- package/dist/DigitalPerformanceV2Plugin/controller/index.d.ts +351 -0
- package/dist/DigitalPerformanceV2Plugin/core/CameraDirector.d.ts +61 -0
- package/dist/DigitalPerformanceV2Plugin/core/CameraSampler.d.ts +53 -0
- package/dist/DigitalPerformanceV2Plugin/core/CameraTrack.d.ts +21 -0
- package/dist/DigitalPerformanceV2Plugin/core/FiveModelCameraBridge.d.ts +39 -0
- package/dist/DigitalPerformanceV2Plugin/core/PerformanceClock.d.ts +55 -0
- package/dist/DigitalPerformanceV2Plugin/core/Playground.d.ts +106 -0
- package/dist/DigitalPerformanceV2Plugin/core/shared.d.ts +4 -0
- package/dist/DigitalPerformanceV2Plugin/index.d.ts +9 -0
- package/dist/DigitalPerformanceV2Plugin/typings/index.d.ts +113 -0
- package/dist/index.cjs.js +84 -101
- package/dist/index.d.ts +1 -0
- package/dist/index.js +8739 -7470
- package/dist/index.umd.js +77 -94
- package/docs/assets/navigation.js +1 -1
- package/docs/assets/search.js +1 -1
- package/docs/classes/AreaMakerPluginType.AreaMakerController.html +2 -2
- package/docs/classes/AreaMakerPluginType.AreaMakerItem.html +2 -2
- package/docs/classes/CSS3DRender.html +2 -2
- package/docs/classes/DigitalHuman.html +11 -2
- package/docs/classes/DigitalPerformanceV2.DigitalPerformanceV2PluginController.html +165 -0
- package/docs/classes/DigitalPlayground.html +2 -2
- package/docs/classes/DigitalStateMachine.html +2 -2
- package/docs/classes/GuideLineItem.GuideLineItem.html +2 -2
- package/docs/classes/GuideLineModeItem.GuideLineModeItem.html +2 -2
- package/docs/classes/ModelMakerPluginInstance.html +2 -2
- package/docs/classes/ModelMakerPluginType.ModelMakerBoxItem.html +2 -2
- package/docs/classes/ModelMakerPluginType.ModelMakerPolygonItem.html +2 -2
- package/docs/classes/ModelMakerPluginType.ModelMakerPrismItem.html +2 -2
- package/docs/classes/ModelRoomLabelController.html +2 -2
- package/docs/classes/MoveController.html +2 -2
- package/docs/classes/Object3DHelperController.html +2 -2
- package/docs/classes/PaintBrush.html +2 -2
- package/docs/classes/PanoMeasurePluginLine.html +2 -2
- package/docs/classes/PanoMeasurePluginModel.html +2 -2
- package/docs/classes/PanoMeasurePluginPoint.html +2 -2
- package/docs/classes/PanoMeasurePluginPolyline.html +2 -2
- package/docs/classes/PanoTagPluginController.html +2 -2
- package/docs/classes/Sculpt.html +2 -2
- package/docs/classes/Util.BetterTween.html +2 -2
- package/docs/classes/Util.FiveDomEvents.html +2 -2
- package/docs/classes/Util.FivePuppet.html +2 -2
- package/docs/classes/Util.Interval.html +2 -2
- package/docs/classes/Util.LegacyPointHelper.html +2 -2
- package/docs/classes/Util.LightTag.html +2 -2
- package/docs/classes/Util.LineSegments.html +2 -2
- package/docs/classes/Util.Magnifier.html +2 -2
- package/docs/classes/Util.Object3D.html +2 -2
- package/docs/classes/Util.PointDomHelper.html +2 -2
- package/docs/classes/Util.PointHelper.html +2 -2
- package/docs/classes/Util.PointSelector.html +2 -2
- package/docs/classes/Util.PointSelectorHelper.html +2 -2
- package/docs/classes/Util.Rectangle.html +2 -2
- package/docs/classes/Util.sculpt.BaseEditor.html +2 -2
- package/docs/classes/Util.sculpt.BoxMesh.html +2 -2
- package/docs/classes/Util.sculpt.BoxMeshEditor.html +2 -2
- package/docs/classes/Util.sculpt.CircleMesh.html +2 -2
- package/docs/classes/Util.sculpt.CircleMeshEditor.html +2 -2
- package/docs/classes/Util.sculpt.CircleWithEdgeMesh.html +2 -2
- package/docs/classes/Util.sculpt.CylinderMesh.html +2 -2
- package/docs/classes/Util.sculpt.CylinderMeshEditor.html +2 -2
- package/docs/classes/Util.sculpt.LineMesh.html +2 -2
- package/docs/classes/Util.sculpt.PointMesh.html +2 -2
- package/docs/classes/Util.sculpt.PolygonMesh.html +2 -2
- package/docs/classes/Util.sculpt.PrismMesh.html +2 -2
- package/docs/classes/Util.sculpt.PrismMeshEditor.html +2 -2
- package/docs/classes/Util.sculpt.RectangleMesh.html +2 -2
- package/docs/classes/Util.sculpt.RectangleMeshEditor.html +2 -2
- package/docs/classes/Util.sculpt.RectangleWithEdgeMesh.html +2 -2
- package/docs/classes/WalkController.html +2 -2
- package/docs/enums/CameraMovementEffect.html +2 -2
- package/docs/enums/ContentType.html +2 -2
- package/docs/enums/DIRECTION.html +2 -2
- package/docs/enums/DISPLAY_STRATEGY_TYPE.html +2 -2
- package/docs/enums/DimensionType.html +2 -2
- package/docs/enums/FLOOR_PLAN_ATTACHED_TO.html +2 -2
- package/docs/enums/ITEM_LABEL_PLUGIN_DISPLAY_STRATEGY_TYPE.html +2 -2
- package/docs/enums/PaintBrushTypeEnum.html +2 -2
- package/docs/enums/PointType.html +2 -2
- package/docs/enums/Rotation.html +2 -2
- package/docs/functions/AreaMakerPlugin.html +1 -1
- package/docs/functions/CSS3DRenderPlugin.html +1 -1
- package/docs/functions/CameraMovementPlugin.html +2 -2
- package/docs/functions/CruisePlugin.html +1 -1
- package/docs/functions/CurrentPanoImagePlugin.html +1 -1
- package/docs/functions/DigitalPerformancePlugin.html +1 -1
- package/docs/functions/DigitalPerformanceV2.DigitalPerformanceV2Plugin.html +1 -0
- package/docs/functions/FloorplanGuidePlugin.html +1 -1
- package/docs/functions/GuideLinePlugin.html +1 -1
- package/docs/functions/ItemLabelPlugin.html +1 -1
- package/docs/functions/MapviewFloorplanPlugin.html +1 -1
- package/docs/functions/MeasurePlugin.html +1 -1
- package/docs/functions/ModelChassisCompassPlugin.html +2 -2
- package/docs/functions/ModelEntryDoorGuidePlugin.html +2 -2
- package/docs/functions/ModelFloorplanPlugin.html +1 -1
- package/docs/functions/ModelItemLabelPlugin.html +1 -1
- package/docs/functions/ModelMakerPlugin.html +1 -1
- package/docs/functions/ModelRoomLabelPlugin.html +1 -1
- package/docs/functions/ModelTVVideoPlugin.html +1 -1
- package/docs/functions/ModelViewPlugin.html +2 -2
- package/docs/functions/MovePlugin.html +1 -1
- package/docs/functions/Object3DHelperPlugin.html +1 -1
- package/docs/functions/PanoCompassPlugin.html +1 -1
- package/docs/functions/PanoCursorRaycasterPlugin.html +2 -2
- package/docs/functions/PanoDoorLabelPlugin.html +1 -1
- package/docs/functions/PanoFloorplanRadarPlugin.html +1 -1
- package/docs/functions/PanoMeasurePlugin.html +1 -1
- package/docs/functions/PanoRulerPlugin.html +2 -2
- package/docs/functions/PanoRulerProPlugin.html +2 -2
- package/docs/functions/PanoSpatialTagPlugin.html +2 -2
- package/docs/functions/PanoTagPlugin.html +1 -1
- package/docs/functions/PanoVideoPlugin.html +2 -2
- package/docs/functions/PipelinePlugin.html +1 -1
- package/docs/functions/SculptPlugin.html +2 -2
- package/docs/functions/SculptPluginForFive.html +2 -2
- package/docs/functions/TopviewFloorplanPlugin.html +1 -1
- package/docs/functions/Util.awaitNextFrame.html +1 -1
- package/docs/functions/Util.blink.html +2 -2
- package/docs/functions/Util.blinkWithPreset.html +2 -2
- package/docs/functions/Util.bounding.html +1 -1
- package/docs/functions/Util.boundingBox.html +1 -1
- package/docs/functions/Util.boundingSphere.html +1 -1
- package/docs/functions/Util.boxVertex.html +2 -2
- package/docs/functions/Util.boxVertexes.html +1 -1
- package/docs/functions/Util.checkFiveModelLoaded.html +2 -2
- package/docs/functions/Util.cleanup.html +2 -2
- package/docs/functions/Util.convexHull.html +2 -2
- package/docs/functions/Util.equal.html +2 -2
- package/docs/functions/Util.fiveModelIsLoaded.html +2 -2
- package/docs/functions/Util.generatePolygonGeometry.html +2 -2
- package/docs/functions/Util.getCoordsFromClient.html +1 -1
- package/docs/functions/Util.getCoordsFromElement.html +1 -1
- package/docs/functions/Util.getFrameTime.html +2 -2
- package/docs/functions/Util.getGeometryArea.html +1 -1
- package/docs/functions/Util.getGeometryInfo.html +1 -1
- package/docs/functions/Util.getIntersectFromRelativePosition.html +1 -1
- package/docs/functions/Util.getRaycasterFromFivePointer.html +1 -1
- package/docs/functions/Util.initialCSS3DRender.html +1 -1
- package/docs/functions/Util.inside.html +1 -1
- package/docs/functions/Util.isModelLike.html +1 -1
- package/docs/functions/Util.isNil.html +2 -2
- package/docs/functions/Util.isPanoramaLike.html +1 -1
- package/docs/functions/Util.lookObject.html +2 -2
- package/docs/functions/Util.lookPoint.html +2 -2
- package/docs/functions/Util.nextFrame.html +1 -1
- package/docs/functions/Util.notNil.html +2 -2
- package/docs/functions/Util.reblink.html +2 -2
- package/docs/functions/Util.replaceStaticPrefix.html +2 -2
- package/docs/functions/Util.requestAnimationFrameInterval.html +2 -2
- package/docs/functions/Util.sculpt.createBox.html +1 -1
- package/docs/functions/Util.sculpt.createCircle.html +1 -1
- package/docs/functions/Util.sculpt.createCylinder.html +1 -1
- package/docs/functions/Util.sculpt.createLine.html +2 -2
- package/docs/functions/Util.sculpt.createPoint.html +1 -1
- package/docs/functions/Util.sculpt.createPolygon.html +1 -1
- package/docs/functions/Util.sculpt.createPrism.html +1 -1
- package/docs/functions/Util.sculpt.createRectangle.html +2 -2
- package/docs/functions/Util.sculpt.transformUnit.html +1 -1
- package/docs/functions/Util.sculpt.transformUnitSquare.html +1 -1
- package/docs/functions/Util.tag.html +1 -1
- package/docs/functions/Util.triangleArea.html +2 -2
- package/docs/functions/Util.triangleCenter.html +2 -2
- package/docs/functions/Util.tweenProgress.html +1 -1
- package/docs/functions/Util.uuid.html +2 -2
- package/docs/functions/Util.waitFiveModelLoaded.html +2 -2
- package/docs/functions/Util.worldBounding.html +1 -1
- package/docs/functions/Util.worldBoundingBox.html +1 -1
- package/docs/functions/Util.worldBoundingSphere.html +1 -1
- package/docs/functions/createPolyline.html +2 -2
- package/docs/functions/pluginFlag.html +1 -1
- package/docs/functions/validatePolygon.html +1 -1
- package/docs/hierarchy.html +1 -1
- package/docs/index.html +2 -2
- package/docs/interfaces/AreaMakerPluginType.AnimeOptions.html +2 -2
- package/docs/interfaces/AreaMakerPluginType.Config.html +2 -2
- package/docs/interfaces/AreaMakerPluginType.EventMap.html +2 -2
- package/docs/interfaces/AreaMakerPluginType.Params.html +2 -2
- package/docs/interfaces/AreaMakerPluginType.ServerAreaMakerItem.html +2 -2
- package/docs/interfaces/AreaMakerPluginType.ServerAreaMakerItemV1.html +2 -2
- package/docs/interfaces/AreaMakerPluginType.ServerDataV1.html +2 -2
- package/docs/interfaces/AreaMakerPluginType.ServerDataV2.html +2 -2
- package/docs/interfaces/AreaMakerPluginType.ShowHideOptions.html +2 -2
- package/docs/interfaces/AreaMakerPluginType.State.html +2 -2
- package/docs/interfaces/BoxAnimationConfig.html +2 -2
- package/docs/interfaces/BoxPosition.html +2 -2
- package/docs/interfaces/CSS3DRenderPluginEventMap.html +2 -2
- package/docs/interfaces/CSS3DRenderPluginState.html +2 -2
- package/docs/interfaces/CameraMovementPluginExportType.html +2 -2
- package/docs/interfaces/ChapterLocation.html +2 -2
- package/docs/interfaces/ChapterTimeInfo.html +2 -2
- package/docs/interfaces/ContentTypeMapInterface.html +2 -2
- package/docs/interfaces/CruisePluginTypes.Config.html +2 -2
- package/docs/interfaces/CruisePluginTypes.CruiseKeyframe.html +2 -2
- package/docs/interfaces/CruisePluginTypes.EventMap.html +2 -2
- package/docs/interfaces/CruisePluginTypes.GuildLineConfig.html +2 -2
- package/docs/interfaces/CruisePluginTypes.MoveAction.html +2 -2
- package/docs/interfaces/CruisePluginTypes.MoveWithKeyframesAction.html +2 -2
- package/docs/interfaces/CruisePluginTypes.MoveWithPanoIndexAction.html +2 -2
- package/docs/interfaces/CruisePluginTypes.PluginData.html +2 -2
- package/docs/interfaces/CruisePluginTypes.PluginServerData.html +2 -2
- package/docs/interfaces/CruisePluginTypes.PluginState.html +2 -2
- package/docs/interfaces/CurrentPanoImagePluginType.Config.html +2 -2
- package/docs/interfaces/CurrentPanoImagePluginType.EventMap.html +2 -2
- package/docs/interfaces/CurrentPanoImagePluginType.Params.html +2 -2
- package/docs/interfaces/CurrentPanoImagePluginType.ShowHideOptions.html +2 -2
- package/docs/interfaces/CurrentPanoImagePluginType.State.html +2 -2
- package/docs/interfaces/DigitalCameraKeyframe.html +2 -2
- package/docs/interfaces/DigitalCameraPlayer.html +2 -2
- package/docs/interfaces/DigitalCameraState.html +2 -2
- package/docs/interfaces/DigitalChapter.html +2 -2
- package/docs/interfaces/DigitalDataPlayer.html +2 -2
- package/docs/interfaces/DigitalDataState.html +2 -2
- package/docs/interfaces/DigitalEffectKeyframe.html +2 -2
- package/docs/interfaces/DigitalEffectState.html +2 -2
- package/docs/interfaces/DigitalItemKeyframe.html +2 -2
- package/docs/interfaces/DigitalItemState.html +2 -2
- package/docs/interfaces/DigitalModelKeyframe.html +2 -2
- package/docs/interfaces/DigitalModelPlayer.html +2 -2
- package/docs/interfaces/DigitalModelPlayerEffect.html +2 -2
- package/docs/interfaces/DigitalModelPlayerItem.html +2 -2
- package/docs/interfaces/DigitalModelState.html +2 -2
- package/docs/interfaces/DigitalPerformancePluginConfig.html +2 -2
- package/docs/interfaces/DigitalPerformanceV2.CameraState.html +13 -0
- package/docs/interfaces/DigitalPerformanceV2.DigitalCameraKeyframe.html +23 -0
- package/docs/interfaces/DigitalPerformanceV2.DigitalCameraPlayer.html +7 -0
- package/docs/interfaces/DigitalPerformanceV2.DigitalPerformanceV2PluginConfig.html +7 -0
- package/docs/interfaces/DigitalPerformanceV2.GroupChapterTimeInfo.html +13 -0
- package/docs/interfaces/DigitalPerformanceV2.GroupProgress.html +18 -0
- package/docs/interfaces/DigitalPerformanceV2.V2Progress.html +10 -0
- package/docs/interfaces/DigitalScript.html +2 -2
- package/docs/interfaces/DigitalSubTitleKeyframe.html +2 -2
- package/docs/interfaces/DigitalSubTitlePlayer.html +2 -2
- package/docs/interfaces/DigitalSubTitleState.html +2 -2
- package/docs/interfaces/ExtendedAnimationConfig.html +2 -2
- package/docs/interfaces/FloorplanBounding.html +2 -2
- package/docs/interfaces/FloorplanData.html +2 -2
- package/docs/interfaces/FloorplanEntrance.html +2 -2
- package/docs/interfaces/FloorplanExtraObject.html +2 -2
- package/docs/interfaces/FloorplanExtraObject3D.html +2 -2
- package/docs/interfaces/FloorplanFloorData.html +2 -2
- package/docs/interfaces/FloorplanImagePosition.html +2 -2
- package/docs/interfaces/FloorplanObserver.html +2 -2
- package/docs/interfaces/FloorplanOutlineItem.html +2 -2
- package/docs/interfaces/FloorplanPosition.html +2 -2
- package/docs/interfaces/FloorplanRoomItem.html +2 -2
- package/docs/interfaces/FloorplanRoomLabelItem.html +2 -2
- package/docs/interfaces/FloorplanServerBounding.html +2 -2
- package/docs/interfaces/FloorplanServerComputedData.html +2 -2
- package/docs/interfaces/FloorplanServerData.html +2 -2
- package/docs/interfaces/FloorplanServerDoorItem.html +2 -2
- package/docs/interfaces/FloorplanServerDoorPosition.html +2 -2
- package/docs/interfaces/FloorplanServerEntrance.html +2 -2
- package/docs/interfaces/FloorplanServerFloorData.html +2 -2
- package/docs/interfaces/FloorplanServerImagePosition.html +2 -2
- package/docs/interfaces/FloorplanServerObserver.html +2 -2
- package/docs/interfaces/FloorplanServerOutlineItem.html +2 -2
- package/docs/interfaces/FloorplanServerPosition.html +2 -2
- package/docs/interfaces/FloorplanServerRoomItem.html +2 -2
- package/docs/interfaces/FloorplanServerRoomLabelItem.html +2 -2
- package/docs/interfaces/GlobalProgress.html +2 -2
- package/docs/interfaces/GuideLineModeItem.GuideLineTagContainer.html +2 -2
- package/docs/interfaces/GuideLinePluginType.CatmullRomCurve3.html +2 -2
- package/docs/interfaces/GuideLinePluginType.EventMap.html +2 -2
- package/docs/interfaces/GuideLinePluginType.ExtraRouteData.html +2 -2
- package/docs/interfaces/GuideLinePluginType.GuideLineGeometryStyle.html +2 -2
- package/docs/interfaces/GuideLinePluginType.GuideLineItemContainer.html +2 -2
- package/docs/interfaces/GuideLinePluginType.GuideLineMaterialStyle.html +2 -2
- package/docs/interfaces/GuideLinePluginType.GuideLineMeshStyle.html +2 -2
- package/docs/interfaces/GuideLinePluginType.LineGeometriesConfig.html +2 -2
- package/docs/interfaces/GuideLinePluginType.ModelGuideLineStyle.html +2 -2
- package/docs/interfaces/GuideLinePluginType.ModelGuideLineTagData.html +2 -2
- package/docs/interfaces/GuideLinePluginType.PanoramaGuideLineStyle.html +2 -2
- package/docs/interfaces/GuideLinePluginType.PluginDataV2.html +1 -1
- package/docs/interfaces/GuideLinePluginType.PluginServerData.html +2 -2
- package/docs/interfaces/GuideLinePluginType.PluginState.html +2 -2
- package/docs/interfaces/GuideLinePluginType.Route.html +2 -2
- package/docs/interfaces/HelperOffset.html +2 -2
- package/docs/interfaces/ImagePlaneGroup.html +2 -2
- package/docs/interfaces/ItemLabelPluginData.html +2 -2
- package/docs/interfaces/ItemLabelPluginExportReturnsType.html +2 -2
- package/docs/interfaces/ItemLabelPluginParametersType.html +2 -2
- package/docs/interfaces/MinMax.html +2 -2
- package/docs/interfaces/ModelChassisCompassPluginData.html +2 -2
- package/docs/interfaces/ModelChassisCompassPluginExportType.html +2 -2
- package/docs/interfaces/ModelChassisCompassPluginParameterType.html +2 -2
- package/docs/interfaces/ModelEntryDoorGuidePluginData.html +2 -2
- package/docs/interfaces/ModelEntryDoorGuidePluginExportType.html +2 -2
- package/docs/interfaces/ModelItemLabelPluginData.html +2 -2
- package/docs/interfaces/ModelItemLabelPluginExportReturnsType.html +2 -2
- package/docs/interfaces/ModelItemLabelPluginParametersType.html +2 -2
- package/docs/interfaces/ModelMakerPluginType.BoxItemObjectData.html +2 -2
- package/docs/interfaces/ModelMakerPluginType.EventMap.html +2 -2
- package/docs/interfaces/ModelMakerPluginType.PrismItemObjectData.html +2 -2
- package/docs/interfaces/ModelMakerPluginType.ServerBaseItem.html +2 -2
- package/docs/interfaces/ModelMakerPluginType.ServerBoxItem.html +2 -2
- package/docs/interfaces/ModelMakerPluginType.ServerData.html +2 -2
- package/docs/interfaces/ModelMakerPluginType.ServerPrismItem.html +2 -2
- package/docs/interfaces/ModelMakerPluginType.ServerTrianglesItem.html +2 -2
- package/docs/interfaces/ModelMakerPluginType.State.html +2 -2
- package/docs/interfaces/ModelMakerPluginType.TrianglesItemObjectData.html +2 -2
- package/docs/interfaces/ModelRoomLabelPluginData.html +2 -2
- package/docs/interfaces/ModelTVVideoPluginData.html +2 -2
- package/docs/interfaces/ModelTVVideoPluginExportType.html +2 -2
- package/docs/interfaces/ModelTVVideoPluginParameterType.html +2 -2
- package/docs/interfaces/ModelViewPluginExportType.html +2 -2
- package/docs/interfaces/Object3DHelperState.html +2 -2
- package/docs/interfaces/ObjectHelperControllers.html +2 -2
- package/docs/interfaces/PaintBrushAction.html +2 -2
- package/docs/interfaces/PaintBrushConfigs.html +2 -2
- package/docs/interfaces/PaintBrushState.html +2 -2
- package/docs/interfaces/PanoCursorRaycasterPluginExportType.html +2 -2
- package/docs/interfaces/PanoCursorRaycasterPluginParameterType.html +1 -1
- package/docs/interfaces/PanoMeasureParameterType.html +2 -2
- package/docs/interfaces/PanoMeasurePluginLineJson.html +2 -2
- package/docs/interfaces/PanoMeasurePluginOpenParameter.html +2 -2
- package/docs/interfaces/PanoMeasurePluginPointJson.html +2 -2
- package/docs/interfaces/PanoMeasurePluginPolylineJson.html +2 -2
- package/docs/interfaces/PanoRulerPluginExportType.html +2 -2
- package/docs/interfaces/PanoRulerPluginOptions.html +2 -2
- package/docs/interfaces/PanoRulerPluginParameterType.html +2 -2
- package/docs/interfaces/PanoRulerProPluginExportType.html +2 -2
- package/docs/interfaces/PanoRulerProPluginOptions.html +2 -2
- package/docs/interfaces/PanoRulerProPluginParameterType.html +2 -2
- package/docs/interfaces/PanoRulerProPluginState.html +2 -2
- package/docs/interfaces/PanoSpatialTagPluginContentEvent.html +1 -1
- package/docs/interfaces/PanoSpatialTagPluginContentReplacement.html +1 -1
- package/docs/interfaces/PanoSpatialTagPluginData.html +2 -2
- package/docs/interfaces/PanoSpatialTagPluginDataElement.html +2 -2
- package/docs/interfaces/PanoSpatialTagPluginExportType.html +2 -2
- package/docs/interfaces/PanoSpatialTagPluginOriginElement.html +2 -2
- package/docs/interfaces/PanoSpatialTagPluginParameterType.html +2 -2
- package/docs/interfaces/PanoSpatialTagPluginPointElement.html +2 -2
- package/docs/interfaces/PanoSpatialTagPluginTagElement.html +2 -2
- package/docs/interfaces/PanoVideoPluginType.LoadParams.html +2 -2
- package/docs/interfaces/PanoVideoPluginType.PanoVideoItem.html +2 -2
- package/docs/interfaces/PanoVideoPluginType.PluginData.html +2 -2
- package/docs/interfaces/PanoVideoPluginType.PluginEventMap.html +2 -2
- package/docs/interfaces/PanoVideoPluginType.PluginState.html +2 -2
- package/docs/interfaces/PanoVideoPluginType.VideoItem.html +2 -2
- package/docs/interfaces/PanoVideoPluginType.VideoMeshParams.html +2 -2
- package/docs/interfaces/PluginEventMap.html +2 -2
- package/docs/interfaces/Point.html +2 -2
- package/docs/interfaces/ProgressBarEvents.html +2 -2
- package/docs/interfaces/Room.html +2 -2
- package/docs/interfaces/RoomInfo.html +2 -2
- package/docs/interfaces/RoomLabel.html +2 -2
- package/docs/interfaces/RoomRules.html +1 -1
- package/docs/interfaces/Rooms.html +1 -1
- package/docs/interfaces/Scissor.html +2 -2
- package/docs/interfaces/SculptConfig.html +2 -2
- package/docs/interfaces/State.html +2 -2
- package/docs/interfaces/TagCacheInterface.html +2 -2
- package/docs/interfaces/TagConfig.html +2 -2
- package/docs/interfaces/TagGLTFObjectGroup.html +2 -2
- package/docs/interfaces/TagIconAnimationConfig.html +2 -2
- package/docs/interfaces/TagIconUrl.html +2 -2
- package/docs/interfaces/TagObjectGroup.html +2 -2
- package/docs/interfaces/TagState.html +2 -2
- package/docs/interfaces/TagStyle.html +2 -2
- package/docs/interfaces/Tags.html +2 -2
- package/docs/interfaces/TemporaryState.html +2 -2
- package/docs/interfaces/TraceManager.html +2 -2
- package/docs/interfaces/TracePoint.html +2 -2
- package/docs/interfaces/Util.AnimeInstance.html +2 -2
- package/docs/interfaces/Util.BlinkAnimeOptions.html +2 -2
- package/docs/interfaces/Util.EventHandlerConfig.html +2 -2
- package/docs/interfaces/Util.FiveDomEvent.html +2 -2
- package/docs/interfaces/Util.FiveDomEventMap.html +2 -2
- package/docs/interfaces/Util.LegacyMouseGroupParameter.html +2 -2
- package/docs/interfaces/Util.MagnifierParameter.html +2 -2
- package/docs/interfaces/Util.MouseGroupParameter.html +2 -2
- package/docs/interfaces/Util.ObjectInitialState.html +2 -2
- package/docs/interfaces/Util.PointIntersection.html +2 -2
- package/docs/interfaces/Util.PointSelectorHelperConfig.html +2 -2
- package/docs/interfaces/Util.ReBlinkAnimeOptions.html +2 -2
- package/docs/modules/AreaMakerPluginType.html +2 -2
- package/docs/modules/CruisePluginTypes.html +2 -2
- package/docs/modules/CurrentPanoImagePluginType.html +2 -2
- package/docs/modules/DigitalPerformanceV2.html +16 -0
- package/docs/modules/GuideLineItem.html +2 -2
- package/docs/modules/GuideLineModeItem.html +2 -2
- package/docs/modules/GuideLinePluginType.html +2 -2
- package/docs/modules/ModelMakerPluginType.html +2 -2
- package/docs/modules/PanoVideoPluginType.html +2 -2
- package/docs/modules/SculptData.html +2 -2
- package/docs/modules/SculptType.html +2 -2
- package/docs/modules/Util.html +2 -2
- package/docs/modules/Util.sculpt.html +2 -2
- package/docs/modules.html +3 -2
- package/docs/types/AddObject3DHelperConfig.html +2 -2
- package/docs/types/AreaMakerPluginType.AreaMakerItemEventMap.html +2 -2
- package/docs/types/AreaMakerPluginType.ItemRenderer.html +1 -1
- package/docs/types/AreaMakerPluginType.PluginData.html +2 -2
- package/docs/types/AreaMakerPluginType.ServerData.html +2 -2
- package/docs/types/ArrayPosition.html +1 -1
- package/docs/types/AudioAppearance.html +1 -1
- package/docs/types/BoxTag.html +2 -2
- package/docs/types/CSS3DRenderExportType.html +1 -1
- package/docs/types/CSS3DRenderPluginExportType.html +1 -1
- package/docs/types/CSS3DRenderPluginParameterType.html +1 -1
- package/docs/types/ClassFunctionParameters.html +1 -1
- package/docs/types/Color.html +1 -1
- package/docs/types/ContentTypeConfigKey.html +1 -1
- package/docs/types/ContentTypeConfigKeySplit.html +1 -1
- package/docs/types/ContentTypeMap.html +1 -1
- package/docs/types/Create3DDomContainerReturnType.html +1 -1
- package/docs/types/Create3DElementReturnType.html +1 -1
- package/docs/types/CruisePluginExportType.html +1 -1
- package/docs/types/CruisePluginTypes.CruiseData.html +2 -2
- package/docs/types/CruisePluginTypes.MoveEffect.html +1 -1
- package/docs/types/CurrentPanoImagePluginExportType.html +1 -1
- package/docs/types/DeprecatedMediaPlaneProperty.html +2 -2
- package/docs/types/DeprecatedTagProperty.html +2 -2
- package/docs/types/DigitalPerformancePluginExportInterface.html +1 -1
- package/docs/types/DigitalPerformancePluginParamsInterface.html +1 -1
- package/docs/types/DigitalPerformanceV2.CameraCoordinateSpace.html +7 -0
- package/docs/types/DigitalPerformanceV2.CameraTransition.html +7 -0
- package/docs/types/DigitalPerformanceV2.DigitalPerformanceV2PluginExportInterface.html +1 -0
- package/docs/types/DigitalPerformanceV2.DigitalPerformanceV2PluginParamsInterface.html +1 -0
- package/docs/types/DigitalPerformanceV2.V2ProgressListener.html +1 -0
- package/docs/types/Direction-1.html +1 -1
- package/docs/types/Direction4.html +1 -1
- package/docs/types/ElementRenderer.html +2 -2
- package/docs/types/FloorplanGuidePluginParameterType.html +1 -1
- package/docs/types/FloorplanGuidePluginReturnType.html +1 -1
- package/docs/types/FloorplanRuleLabels.html +2 -2
- package/docs/types/FloorplanServerRuleLabels.html +1 -1
- package/docs/types/GuideLinePluginExportType.html +1 -1
- package/docs/types/GuideLinePluginType.GuideLineItem.html +2 -2
- package/docs/types/GuideLinePluginType.GuideLineItemEventMap.html +1 -1
- package/docs/types/GuideLinePluginType.GuideLineModeItemMode.html +1 -1
- package/docs/types/GuideLinePluginType.GuideLineStyle.html +2 -2
- package/docs/types/GuideLinePluginType.ModelGuideLineTag.html +2 -2
- package/docs/types/GuideLinePluginType.PathItem.html +2 -2
- package/docs/types/GuideLinePluginType.PluginData.html +2 -2
- package/docs/types/GuideLinePluginType.RouteConfig.html +2 -2
- package/docs/types/HelperEventMap.html +1 -1
- package/docs/types/InternalHelperEventMap.html +1 -1
- package/docs/types/KeyframeType.html +1 -1
- package/docs/types/MapviewFloorplanPluginParameterType.html +1 -1
- package/docs/types/MapviewFloorplanPluginReturnType.html +1 -1
- package/docs/types/MaskPosition.html +2 -2
- package/docs/types/MaskTag.html +2 -2
- package/docs/types/MeasureEndReason.html +1 -1
- package/docs/types/MeasurePluginConfig.html +2 -2
- package/docs/types/MeasurePluginEventMap.html +1 -1
- package/docs/types/MediaData.html +2 -2
- package/docs/types/MediaStore.html +1 -1
- package/docs/types/ModelEntryDoorGuidePluginParameterType.html +1 -1
- package/docs/types/ModelFloorplanPluginParameterType.html +1 -1
- package/docs/types/ModelFloorplanPluginReturnType.html +1 -1
- package/docs/types/ModelId.html +1 -1
- package/docs/types/ModelMakerPluginType.ElementRenderer.html +1 -1
- package/docs/types/ModelMakerPluginType.ItemType.html +2 -2
- package/docs/types/ModelMakerPluginType.MarkerItem.html +1 -1
- package/docs/types/ModelMakerPluginType.ServerItem.html +2 -2
- package/docs/types/ModelRoomLabelPluginParameters.html +1 -1
- package/docs/types/ModelRoomLabelPluginReturnType.html +1 -1
- package/docs/types/MoveArgs.html +2 -2
- package/docs/types/MoveOpts.html +2 -2
- package/docs/types/Object3DHelperEventMap.html +1 -1
- package/docs/types/ObjectFit.html +1 -1
- package/docs/types/PaintBrushEventMap.html +1 -1
- package/docs/types/PanoCompassPluginData.html +1 -1
- package/docs/types/PanoCompassPluginExportType.html +1 -1
- package/docs/types/PanoCompassPluginParameterType.html +1 -1
- package/docs/types/PanoFloorplanRadarPluginParameterType.html +1 -1
- package/docs/types/PanoFloorplanRadarPluginReturnType.html +1 -1
- package/docs/types/PanoIndex.html +1 -1
- package/docs/types/PanoMeasurePluginEvent.html +1 -1
- package/docs/types/PanoMeasureReturnType.html +1 -1
- package/docs/types/PanoSpatialTagPluginId.html +1 -1
- package/docs/types/PanoTagPluginExportInterface.html +1 -1
- package/docs/types/PanoTagPluginParamsInterface.html +1 -1
- package/docs/types/PanoVideoPluginParameterType.html +1 -1
- package/docs/types/PanoVideoPluginReturnType.html +1 -1
- package/docs/types/PickTagContentTypeInContentTypeConfigKey.html +2 -2
- package/docs/types/PipelinePluginParameterType.html +1 -1
- package/docs/types/PipelinePluginReturnType.html +1 -1
- package/docs/types/PlaneTag.html +2 -2
- package/docs/types/Point2DTag.html +2 -2
- package/docs/types/Point3DTag.html +2 -2
- package/docs/types/PointTagInstance.html +1 -1
- package/docs/types/PolygonPosition.html +2 -2
- package/docs/types/PolygonTag.html +2 -2
- package/docs/types/Position.html +1 -1
- package/docs/types/PositionFrom.html +1 -1
- package/docs/types/ProgressListener.html +1 -1
- package/docs/types/RotateArgs.html +2 -2
- package/docs/types/RotateOpts.html +2 -2
- package/docs/types/RuleLabelsKey.html +1 -1
- package/docs/types/RuleLabelsValue.html +1 -1
- package/docs/types/ScaleCallback.html +1 -1
- package/docs/types/ScalePosition.html +2 -2
- package/docs/types/SculptData.BoxData.html +1 -1
- package/docs/types/SculptData.CircleData.html +1 -1
- package/docs/types/SculptData.CylinderData.html +1 -1
- package/docs/types/SculptData.PointData.html +1 -1
- package/docs/types/SculptData.PolygonData.html +1 -1
- package/docs/types/SculptData.PolylineData.html +1 -1
- package/docs/types/SculptData.PrismData.html +1 -1
- package/docs/types/SculptData.RectangleData.html +1 -1
- package/docs/types/SculptType.Theme.html +2 -2
- package/docs/types/StateType.html +1 -1
- package/docs/types/StickType.html +1 -1
- package/docs/types/Tag.html +2 -2
- package/docs/types/Tag2D.html +2 -2
- package/docs/types/Tag3D.html +2 -2
- package/docs/types/TagClickParams.html +1 -1
- package/docs/types/TagConfigByKey.html +1 -1
- package/docs/types/TagContentType.html +1 -1
- package/docs/types/TagContentTypeMapping.html +1 -1
- package/docs/types/TagDimensionType.html +1 -1
- package/docs/types/TagElement.html +2 -2
- package/docs/types/TagEvents.html +1 -1
- package/docs/types/TagGLTFObject.html +1 -1
- package/docs/types/TagHooks.html +1 -1
- package/docs/types/TagId.html +1 -1
- package/docs/types/TagInstance.html +1 -1
- package/docs/types/TagPlacement.html +2 -2
- package/docs/types/TagPointType.html +2 -2
- package/docs/types/TagRendererMap.html +1 -1
- package/docs/types/TopviewFloorplanPluginParameterType.html +1 -1
- package/docs/types/TopviewFloorplanPluginReturnType.html +1 -1
- package/docs/types/Util.ActionIfNoIntersection.html +1 -1
- package/docs/types/Util.AdherePoint.html +2 -2
- package/docs/types/Util.PointSelectorConfig.html +1 -1
- package/docs/types/Util.SupportedTarget.html +2 -2
- package/docs/types/Util.Target.html +2 -2
- package/docs/types/Util.ThreeObject.html +2 -2
- package/docs/types/WorkCode.html +1 -1
- package/docs/variables/FLOOR_TYPE_MAP.html +2 -2
- package/docs/variables/PLUGIN.html +1 -1
- package/docs/variables/ROOM_FETILE_TYPE_MAP.html +2 -2
- package/docs/variables/ROOM_TYPE_MAP.html +2 -2
- package/docs/variables/Util.ANIME_PRESETS.html +2 -2
- package/docs/variables/Util.CURRENT_PANO_IMAGE_DEFAULT_IMAGE.html +2 -2
- package/docs/variables/Util.DEFAULT_ANIME_CONFIG.html +2 -2
- package/docs/variables/Util.DEFAULT_STATIC_PREFIX.html +2 -2
- package/docs/variables/Util.DNALOGEL_DEFAULT_ASSETS.html +2 -2
- package/docs/variables/Util.ENTRY_DOOR_DEFAULT_IMAGE.html +2 -2
- package/docs/variables/Util.FLOORPLAN_DEFAULT_IMAGE.html +2 -2
- package/docs/variables/Util.GUIDELINE_DEFAULT_ARROW_TEXTURE.html +2 -2
- package/docs/variables/Util.GUIDELINE_WHITE_ARROW_TEXTURE.html +2 -2
- package/docs/variables/Util.MODEL_CHASSIS_COMPASS_DEFAULT_MODEL.html +2 -2
- package/docs/variables/Util.MODEL_ENTRY_DOOR_GUIDE_PLUGIN_DEFAULT_MODEL.html +2 -2
- package/docs/variables/Util.PANO_COMPASS_DEFAULT_IMAGE.html +2 -2
- package/docs/variables/Util.PANO_SPATIAL_TAG_BLUR_IMAGE.html +2 -2
- package/docs/variables/Util.PANO_TAG_DEFAULT_LINK_ICON.html +2 -2
- package/docs/variables/defaultGlobalConfig.html +1 -1
- package/docs/variables/itemLabelPluginServerParams.html +1 -1
- package/docs/variables/modelItemLabelPluginServerParams.html +1 -1
- package/docs/variables/modelRoomLabelPluginServerParams.html +1 -1
- package/libs/CruisePlugin/Move.js +2 -4
- package/libs/CruisePlugin/Work.js +2 -4
- package/libs/CruisePlugin/index.js +6 -8
- package/libs/DigitalPerformancePlugin/core/DigitalHuman.d.ts +18 -0
- package/libs/DigitalPerformancePlugin/core/DigitalHuman.js +198 -110
- package/libs/DigitalPerformanceV2Plugin/controller/index.d.ts +351 -0
- package/libs/DigitalPerformanceV2Plugin/controller/index.js +750 -0
- package/libs/DigitalPerformanceV2Plugin/core/CameraDirector.d.ts +61 -0
- package/libs/DigitalPerformanceV2Plugin/core/CameraDirector.js +101 -0
- package/libs/DigitalPerformanceV2Plugin/core/CameraSampler.d.ts +53 -0
- package/libs/DigitalPerformanceV2Plugin/core/CameraSampler.js +91 -0
- package/libs/DigitalPerformanceV2Plugin/core/CameraTrack.d.ts +21 -0
- package/libs/DigitalPerformanceV2Plugin/core/CameraTrack.js +32 -0
- package/libs/DigitalPerformanceV2Plugin/core/FiveModelCameraBridge.d.ts +39 -0
- package/libs/DigitalPerformanceV2Plugin/core/FiveModelCameraBridge.js +72 -0
- package/libs/DigitalPerformanceV2Plugin/core/PerformanceClock.d.ts +55 -0
- package/libs/DigitalPerformanceV2Plugin/core/PerformanceClock.js +98 -0
- package/libs/DigitalPerformanceV2Plugin/core/Playground.d.ts +106 -0
- package/libs/DigitalPerformanceV2Plugin/core/Playground.js +209 -0
- package/libs/DigitalPerformanceV2Plugin/core/shared.d.ts +4 -0
- package/libs/DigitalPerformanceV2Plugin/core/shared.js +12 -0
- package/libs/DigitalPerformanceV2Plugin/index/index.js +11 -0
- package/libs/DigitalPerformanceV2Plugin/index.d.ts +9 -0
- package/libs/DigitalPerformanceV2Plugin/index.js +20 -0
- package/libs/DigitalPerformanceV2Plugin/typings/index.d.ts +113 -0
- package/libs/DigitalPerformanceV2Plugin/typings/index.js +1 -0
- package/libs/GuideLinePlugin/Controller.js +4 -6
- package/libs/GuideLinePlugin/GuideLineItem.js +2 -4
- package/libs/GuideLinePlugin/GuideLineModeItem.js +2 -4
- package/libs/GuideLinePlugin/index.js +6 -8
- package/libs/PanoTagPlugin/Components/Tag/index.js +2 -4
- package/libs/PanoTagPlugin/Components/TagContainer.js +2 -4
- package/libs/PanoTagPlugin/Components/TagItem.js +2 -4
- package/libs/PanoTagPlugin/controller/Tag/ModelTag.js +2 -4
- package/libs/PanoTagPlugin/controller/Tag/PlaneTag.js +2 -4
- package/libs/PanoTagPlugin/controller/TagRender.js +2 -4
- package/libs/PanoTagPlugin/controller/TagUtil.js +2 -4
- package/libs/PanoTagPlugin/controller/index.js +5 -7
- package/libs/PanoTagPlugin/index.js +11 -13
- package/libs/PanoTagPlugin/utils/model/mediaPlane.js +126 -129
- package/libs/base/BasePlugin.js +1 -1
- package/libs/index.d.ts +1 -0
- package/libs/index.js +167 -160
- package/libs/shared-utils/logger.js +1 -1
- package/package.json +2 -1
- package/dist/shared-utils/three/StackedAlphaVideoMaterial.d.ts +0 -12
- package/dist/shared-utils/three/isStackedAlphaVideo.d.ts +0 -1
- package/libs/shared-utils/three/StackedAlphaVideoMaterial.d.ts +0 -12
- package/libs/shared-utils/three/StackedAlphaVideoMaterial.js +0 -55
- package/libs/shared-utils/three/isStackedAlphaVideo.d.ts +0 -1
- package/libs/shared-utils/three/isStackedAlphaVideo.js +0 -7
|
@@ -0,0 +1,750 @@
|
|
|
1
|
+
var k = Object.defineProperty;
|
|
2
|
+
var C = Object.getOwnPropertySymbols;
|
|
3
|
+
var S = Object.prototype.hasOwnProperty, w = Object.prototype.propertyIsEnumerable;
|
|
4
|
+
var d = (l, e, t) => e in l ? k(l, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : l[e] = t, g = (l, e) => {
|
|
5
|
+
for (var t in e || (e = {}))
|
|
6
|
+
S.call(e, t) && d(l, t, e[t]);
|
|
7
|
+
if (C)
|
|
8
|
+
for (var t of C(e))
|
|
9
|
+
w.call(e, t) && d(l, t, e[t]);
|
|
10
|
+
return l;
|
|
11
|
+
};
|
|
12
|
+
var h = (l, e, t) => (d(l, typeof e != "symbol" ? e + "" : e, t), t);
|
|
13
|
+
var c = (l, e, t) => new Promise((r, a) => {
|
|
14
|
+
var s = (i) => {
|
|
15
|
+
try {
|
|
16
|
+
o(t.next(i));
|
|
17
|
+
} catch (u) {
|
|
18
|
+
a(u);
|
|
19
|
+
}
|
|
20
|
+
}, n = (i) => {
|
|
21
|
+
try {
|
|
22
|
+
o(t.throw(i));
|
|
23
|
+
} catch (u) {
|
|
24
|
+
a(u);
|
|
25
|
+
}
|
|
26
|
+
}, o = (i) => i.done ? r(i.value) : Promise.resolve(i.value).then(s, n);
|
|
27
|
+
o((t = t.apply(l, e)).next());
|
|
28
|
+
});
|
|
29
|
+
import { PerformancePlayground as F, getChapterModelDuration as T, getChapterDuration as b } from "../core/Playground.js";
|
|
30
|
+
import { CameraTrack as E } from "../core/CameraTrack.js";
|
|
31
|
+
import "three";
|
|
32
|
+
import "../../DigitalPerformancePlugin/core/DigitalPlayground.js";
|
|
33
|
+
import "@realsee/five/gltf-loader";
|
|
34
|
+
import "../../DigitalPerformancePlugin/core/DigitalHuman.js";
|
|
35
|
+
import "../../DigitalPerformancePlugin/core/DigitalStateMachine.js";
|
|
36
|
+
import "../../DigitalPerformancePlugin/core/Trace.js";
|
|
37
|
+
import "@realsee/five";
|
|
38
|
+
import "../core/PerformanceClock.js";
|
|
39
|
+
import "../core/CameraDirector.js";
|
|
40
|
+
import "../core/FiveModelCameraBridge.js";
|
|
41
|
+
import "../core/CameraSampler.js";
|
|
42
|
+
const M = "Dnalogel-DigitalPerformanceV2Plugin", P = "five-world";
|
|
43
|
+
class B {
|
|
44
|
+
constructor(e, t = {}) {
|
|
45
|
+
h(this, "five");
|
|
46
|
+
h(this, "config");
|
|
47
|
+
h(this, "NAME", M);
|
|
48
|
+
h(this, "playground");
|
|
49
|
+
h(this, "state", {
|
|
50
|
+
enabled: !0,
|
|
51
|
+
playing: !1,
|
|
52
|
+
continuousPlaying: !1,
|
|
53
|
+
currentChapter: null,
|
|
54
|
+
currentScript: null,
|
|
55
|
+
selectedShotIndex: null
|
|
56
|
+
});
|
|
57
|
+
h(this, "progressListeners", /* @__PURE__ */ new Set());
|
|
58
|
+
h(this, "groupProgressListeners", /* @__PURE__ */ new Set());
|
|
59
|
+
h(this, "keyframesChangedListeners", /* @__PURE__ */ new Set());
|
|
60
|
+
h(this, "currentChapterChangedListeners", /* @__PURE__ */ new Set());
|
|
61
|
+
h(this, "unsubClockTick", null);
|
|
62
|
+
/**
|
|
63
|
+
* 进入编辑时的运镜内存态快照:以章节对象为 key,值为该章节相机关键帧的深拷贝;
|
|
64
|
+
* 值为 null 表示进入编辑时该章节不存在 camera player。null(整体)表示尚未打过快照。
|
|
65
|
+
*/
|
|
66
|
+
h(this, "cameraEditSnapshot", null);
|
|
67
|
+
/**
|
|
68
|
+
* 组级章节时间映射缓存(加法式):按 currentScript 引用缓存。
|
|
69
|
+
* - `groupChapterTimeMapCacheScript` 记录缓存对应的 script 引用;
|
|
70
|
+
* - script 变更 / loadScript 时引用不一致 ⇒ 缓存失效、下次请求重算。
|
|
71
|
+
*/
|
|
72
|
+
h(this, "groupChapterTimeMapCache", null);
|
|
73
|
+
h(this, "groupChapterTimeMapCacheScript", null);
|
|
74
|
+
/**
|
|
75
|
+
* D-SEEK-LIVE(方案 A):连播中「跨章 seek」的重定向令牌。
|
|
76
|
+
* 播放态跨章 seek 时置位 { index, fromTime } 并 abortCurrentPlay;连播循环 await 返回后据此跳转到目标章节继续播放。
|
|
77
|
+
*/
|
|
78
|
+
h(this, "seekRedirect", null);
|
|
79
|
+
/**
|
|
80
|
+
* 加法式:动画组「章节索引 → 楼层」映射(用于 Mapview 只显示当前章节所在楼层)。
|
|
81
|
+
* - number:该章节单一楼层 ⇒ `five.model.show(floor)`;
|
|
82
|
+
* - null:该章节内多段动画跨楼层 ⇒ `five.model.show()`(显示全部,避免藏掉其它层的动画);
|
|
83
|
+
* - 映射缺项按显示全部处理。
|
|
84
|
+
* `null`(整体)表示未启用该能力(不触碰楼层可见性)。由消费方经 `setChapterFloorMap` 注入。
|
|
85
|
+
*/
|
|
86
|
+
h(this, "chapterFloorMap", null);
|
|
87
|
+
this.five = e, this.config = g({ autoPlay: !1, loop: !1, debug: !1 }, t), this.playground = new F(e, this.config.debug), this.unsubClockTick = this.playground.getClock().onTick(() => this.emitProgress());
|
|
88
|
+
}
|
|
89
|
+
/** 加载剧本:预加载资源 + 将模型加入 five 场景;autoPlay 时自动播放首章 */
|
|
90
|
+
loadScript(e) {
|
|
91
|
+
return c(this, null, function* () {
|
|
92
|
+
if (this.state.currentScript = e, this.playground.setScript(e), this.groupChapterTimeMapCache = null, this.groupChapterTimeMapCacheScript = null, this.chapterFloorMap = null, yield this.preloadResources(e), this.five && this.five.scene) {
|
|
93
|
+
yield new Promise((r) => requestAnimationFrame(() => r()));
|
|
94
|
+
let t = 0;
|
|
95
|
+
if (e.chapters.forEach((r) => {
|
|
96
|
+
r.players.forEach((a) => {
|
|
97
|
+
if (a.type === "model") {
|
|
98
|
+
const s = this.playground.loader.getDigitalHuman(a.model, a.id);
|
|
99
|
+
s != null && s.container && (this.five.scene.add(s.container), t++);
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
}), t === 0)
|
|
103
|
+
throw new Error("没有模型被添加到场景中");
|
|
104
|
+
}
|
|
105
|
+
this.config.autoPlay && e.chapters.length > 0 && (yield this.playChapter(e.chapters[0]));
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
/** 播放指定章节 */
|
|
109
|
+
playChapter(e) {
|
|
110
|
+
return c(this, null, function* () {
|
|
111
|
+
this.state.currentChapter = e, this.applyChapterFloor(this.getCurrentChapterIndex()), this.state.continuousPlaying = !1, this.state.playing = !0;
|
|
112
|
+
try {
|
|
113
|
+
yield this.playground.playByChapter(e);
|
|
114
|
+
} finally {
|
|
115
|
+
this.state.playing = !1, this.emitProgress();
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
/** 通过索引播放章节 */
|
|
120
|
+
playChapterByIndex(e) {
|
|
121
|
+
return c(this, null, function* () {
|
|
122
|
+
const t = this.getChapters();
|
|
123
|
+
if (e < 0 || e >= t.length)
|
|
124
|
+
throw new Error("Invalid chapter index");
|
|
125
|
+
yield this.playChapter(t[e]);
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
/** 从当前章节连续播放到最后一章(连播中跨章 seek 可经 seekRedirect 令牌无缝重定向) */
|
|
129
|
+
playAllRemaining() {
|
|
130
|
+
return c(this, null, function* () {
|
|
131
|
+
const e = this.getChapters();
|
|
132
|
+
if (e.length === 0)
|
|
133
|
+
throw new Error("No chapters to play");
|
|
134
|
+
let t = 0;
|
|
135
|
+
if (this.state.currentChapter) {
|
|
136
|
+
const r = e.findIndex((a) => a.name === this.state.currentChapter.name);
|
|
137
|
+
t = r === -1 ? 0 : r;
|
|
138
|
+
}
|
|
139
|
+
this.state.continuousPlaying = !0, this.state.playing = !0, this.seekRedirect = null;
|
|
140
|
+
try {
|
|
141
|
+
for (; t >= 0 && t < e.length && this.state.continuousPlaying; ) {
|
|
142
|
+
let r = 0;
|
|
143
|
+
if (this.seekRedirect && this.seekRedirect.index === t && (r = this.seekRedirect.fromTime), this.seekRedirect = null, this.state.currentChapter = e[t], this.applyChapterFloor(t), this.emitProgress(), yield this.playground.playByChapter(e[t], r), this.seekRedirect) {
|
|
144
|
+
t = this.seekRedirect.index;
|
|
145
|
+
continue;
|
|
146
|
+
}
|
|
147
|
+
t++;
|
|
148
|
+
}
|
|
149
|
+
} finally {
|
|
150
|
+
this.state.playing = !1, this.state.continuousPlaying = !1, this.seekRedirect = null, this.emitProgress();
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
/** 从第一章开始按顺序连续播放(用于"重播全部",保留已捕获的各章节运镜) */
|
|
155
|
+
playAllFromStart() {
|
|
156
|
+
return c(this, null, function* () {
|
|
157
|
+
yield this.playFromChapterIndex(0);
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
/** 从指定章节索引开始,按顺序连续播放到本动画组最后一章(保留已捕获的各章节运镜) */
|
|
161
|
+
playFromChapterIndex(e) {
|
|
162
|
+
return c(this, null, function* () {
|
|
163
|
+
const t = this.getChapters();
|
|
164
|
+
if (t.length === 0)
|
|
165
|
+
throw new Error("No chapters to play");
|
|
166
|
+
const r = e < 0 ? 0 : e >= t.length ? t.length - 1 : e;
|
|
167
|
+
this.state.currentChapter = t[r], yield this.playAllRemaining();
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* 编辑态:仅播放当前章节(不连播下一章)。
|
|
172
|
+
* 章节自然播放到末尾(ended)后,由 controller 执行「进度归零 + 恢复当前章节默认视角」,
|
|
173
|
+
* SHALL NOT 自动连播下一章节(区别于展示端 playAllRemaining 的章节连续播放)。
|
|
174
|
+
* 无当前章节时为 no-op。
|
|
175
|
+
*/
|
|
176
|
+
playCurrentChapterForEdit() {
|
|
177
|
+
return c(this, null, function* () {
|
|
178
|
+
const e = this.state.currentChapter;
|
|
179
|
+
if (!e)
|
|
180
|
+
return;
|
|
181
|
+
const t = this.getCurrentChapterIndex(), r = this.playground.getClock().getTime();
|
|
182
|
+
this.state.continuousPlaying = !1, this.state.playing = !0;
|
|
183
|
+
try {
|
|
184
|
+
yield this.playground.playByChapter(e, r, {
|
|
185
|
+
prepare: () => this.playground.prepareCameraTo(r)
|
|
186
|
+
});
|
|
187
|
+
} finally {
|
|
188
|
+
this.state.playing = !1, this.playground.setTimelineTo(0), this.applyChapterDefaultView(t), this.emitProgress();
|
|
189
|
+
}
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
/** 暂停 */
|
|
193
|
+
pause() {
|
|
194
|
+
this.playground.pause(), this.state.playing = !1, this.emitProgress();
|
|
195
|
+
}
|
|
196
|
+
continue(e) {
|
|
197
|
+
if (e != null && e.prepare)
|
|
198
|
+
return (() => c(this, null, function* () {
|
|
199
|
+
yield this.playground.prepareCameraTo(this.playground.getClock().getTime()), this.playground.resume(), this.state.playing = !0, this.emitProgress();
|
|
200
|
+
}))();
|
|
201
|
+
this.playground.resume(), this.state.playing = !0, this.emitProgress();
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* 编辑态暂停(playing→paused,相机由「导演」交还「用户」拥有)。
|
|
205
|
+
* 统一 Mapview 后,导演接管期间 five 始终是合法 Mapview orbit 状态,暂停瞬间画面不变、
|
|
206
|
+
* 且 five 手势天然为正常模型视角(左键绕 target orbit、右键平移),无需特殊转换。见设计 §5.3.1。
|
|
207
|
+
* 仅供编辑端(camera-mode)暂停路径调用。
|
|
208
|
+
*/
|
|
209
|
+
pauseForEdit() {
|
|
210
|
+
this.pause();
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* 编辑态续播(当前章节):在恢复时钟前先 `await prepareCameraTo(当前时间)`,
|
|
214
|
+
* 以内插动画平滑回到暂停瞬间对应的运镜视角(无突变 user→director 切换,Req 13.9 / 18.9),
|
|
215
|
+
* prepare 不计入播放时间(时钟在 prepare 期间不推进)后再 resume。
|
|
216
|
+
* 章节无运镜关键帧时 prepare 为 no-op。不改变通用 `continue()`/`pause()` 语义。
|
|
217
|
+
*/
|
|
218
|
+
continueForEdit() {
|
|
219
|
+
return c(this, null, function* () {
|
|
220
|
+
yield this.playground.prepareCameraTo(this.playground.getClock().getTime()), this.playground.resume(), this.state.playing = !0, this.emitProgress();
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
/** 运镜开关:关闭后播放仅驱动模型动画,不接管 five 相机(立即生效) */
|
|
224
|
+
setCameraDirectionEnabled(e) {
|
|
225
|
+
this.playground.setCameraDirectionEnabled(e);
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* 加法式:设置「章节索引 → 楼层」映射,启用「播放/切章时 Mapview 只显示当前章节所在楼层」。
|
|
229
|
+
* - number:该章节单一楼层;null:该章节内跨楼层 → 显示全部;映射缺项按显示全部处理。
|
|
230
|
+
* - 传入非 null:立即对当前章节应用一次;此后在任意章节切换(连播推进 / 切章 / 播放预览切章)时自动应用。
|
|
231
|
+
* - 传入 null:停用该能力(不再随章节应用),但**不主动恢复**楼层可见性(恢复由 `reset()` 负责)。
|
|
232
|
+
* 楼层可见性是 five 空间模型的显隐(`five.model.show`),与运镜相机接管相互独立。
|
|
233
|
+
* 各消费方(workshop 编辑端 / NextVR 展示端)自行从各自数据算好映射注入,保证两端行为一致(parity)。
|
|
234
|
+
*/
|
|
235
|
+
setChapterFloorMap(e) {
|
|
236
|
+
if (this.chapterFloorMap = e, e) {
|
|
237
|
+
const t = this.getCurrentChapterIndex();
|
|
238
|
+
this.applyChapterFloor(t >= 0 ? t : 0);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
/** 按章节楼层映射对指定章节应用楼层可见性(映射未启用时 no-op) */
|
|
242
|
+
applyChapterFloor(e) {
|
|
243
|
+
if (!this.chapterFloorMap)
|
|
244
|
+
return;
|
|
245
|
+
const t = e in this.chapterFloorMap ? this.chapterFloorMap[e] : null;
|
|
246
|
+
this.showModelFloor(typeof t == "number" ? t : void 0);
|
|
247
|
+
}
|
|
248
|
+
/** 显示指定楼层(传 undefined 显示全部)。安全访问 five.model.show,避免类型/运行时缺失。 */
|
|
249
|
+
showModelFloor(e) {
|
|
250
|
+
var r, a, s;
|
|
251
|
+
const t = (r = this.five) == null ? void 0 : r.model;
|
|
252
|
+
typeof e == "number" ? (a = t == null ? void 0 : t.show) == null || a.call(t, e) : (s = t == null ? void 0 : t.show) == null || s.call(t);
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* seek 预览:跳转到指定时间并渲染当前帧(不改变播放/暂停状态)。
|
|
256
|
+
* - 无当前章节:不改时钟、不渲染,返回失败指示且不抛异常。
|
|
257
|
+
* - 运镜启用:经 director seek 应用相机;运镜禁用:仅驱动 DigitalHuman。
|
|
258
|
+
*/
|
|
259
|
+
setTimelineTo(e) {
|
|
260
|
+
return this.state.currentChapter ? (this.playground.setTimelineTo(e), this.state.playing || this.playground.previewCameraAt(this.playground.getClock().getTime()), this.emitProgress(), { success: !0 }) : { success: !1, error: "无当前章节" };
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* 在指定时间捕获当前 five 相机为一个运镜关键帧。
|
|
264
|
+
* - 位姿取自 five 当前 Mapview 状态(target=offset、longitude、latitude、distance);fov 取自 fiveState(缺省读 five.getCurrentState())。
|
|
265
|
+
* - 按 timeStamp 升序插入;同 timeStamp 覆盖。
|
|
266
|
+
* 拒绝(保持序列不变并返回 error):未加载 script / 无当前章节 / time 非负有限数校验失败。
|
|
267
|
+
*/
|
|
268
|
+
addCameraKeyframe(e, t, r) {
|
|
269
|
+
const a = this.guardKeyframeEdit();
|
|
270
|
+
if (a)
|
|
271
|
+
return a;
|
|
272
|
+
if (!(Number.isFinite(e) && e >= 0))
|
|
273
|
+
return this.rejectKeyframe("time 必须为非负有限数");
|
|
274
|
+
const s = this.ensureCameraPlayer(), n = this.captureCameraPose(), o = this.resolveFov(t), i = {
|
|
275
|
+
timeStamp: e,
|
|
276
|
+
target: n.target,
|
|
277
|
+
longitude: n.longitude,
|
|
278
|
+
latitude: n.latitude,
|
|
279
|
+
distance: n.distance,
|
|
280
|
+
fov: o
|
|
281
|
+
};
|
|
282
|
+
r != null && r.transition && (i.transition = r.transition), r != null && r.thumbnail && (i.thumbnail = r.thumbnail);
|
|
283
|
+
const u = s.keyframes.findIndex((m) => m.timeStamp === e);
|
|
284
|
+
return u >= 0 ? s.keyframes[u] = i : s.keyframes.push(i), s.keyframes.sort((m, p) => m.timeStamp - p.timeStamp), this.afterKeyframesChanged(s);
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* 更新指定下标关键帧:合并 patch 中出现的字段,按 timeStamp 重排序。
|
|
288
|
+
* 拒绝(保持序列不变):未加载 script / 无章节 / index 越界 / patch.timeStamp 非负有限数校验失败。
|
|
289
|
+
*/
|
|
290
|
+
updateCameraKeyframe(e, t) {
|
|
291
|
+
const r = this.guardKeyframeEdit();
|
|
292
|
+
if (r)
|
|
293
|
+
return r;
|
|
294
|
+
const a = this.getCameraPlayer();
|
|
295
|
+
if (!a || e < 0 || e >= a.keyframes.length)
|
|
296
|
+
return this.rejectKeyframe("index 越界");
|
|
297
|
+
if (t.timeStamp !== void 0 && !(Number.isFinite(t.timeStamp) && t.timeStamp >= 0))
|
|
298
|
+
return this.rejectKeyframe("time 必须为非负有限数");
|
|
299
|
+
const s = g(g({}, a.keyframes[e]), t);
|
|
300
|
+
return a.keyframes[e] = s, a.keyframes.sort((n, o) => n.timeStamp - o.timeStamp), this.afterKeyframesChanged(a);
|
|
301
|
+
}
|
|
302
|
+
/** 移除指定下标关键帧。拒绝(保持序列不变):未加载 script / 无章节 / index 越界。 */
|
|
303
|
+
removeCameraKeyframe(e) {
|
|
304
|
+
const t = this.guardKeyframeEdit();
|
|
305
|
+
if (t)
|
|
306
|
+
return t;
|
|
307
|
+
const r = this.getCameraPlayer();
|
|
308
|
+
return !r || e < 0 || e >= r.keyframes.length ? this.rejectKeyframe("index 越界") : (r.keyframes.splice(e, 1), this.afterKeyframesChanged(r));
|
|
309
|
+
}
|
|
310
|
+
/** 获取当前章节的运镜关键帧(升序副本;无章节/无 camera player 时返回空数组) */
|
|
311
|
+
getCameraKeyframes() {
|
|
312
|
+
const e = this.getCameraPlayer();
|
|
313
|
+
return e ? e.keyframes.map((t) => g({}, t)) : [];
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* 序列化当前章节的运镜 player。
|
|
317
|
+
* keyframes 按 timeStamp 升序,仅写入已设置的可选字段(不写 undefined 占位)。
|
|
318
|
+
* 空/无 camera player 返回 keyframes:[];未加载 script / 无章节 时拒绝并返回 error。
|
|
319
|
+
*/
|
|
320
|
+
serializeCameraPlayer() {
|
|
321
|
+
var t;
|
|
322
|
+
if (!this.state.currentScript)
|
|
323
|
+
return { success: !1, error: "未加载剧本" };
|
|
324
|
+
if (!this.state.currentChapter)
|
|
325
|
+
return { success: !1, error: "无当前章节" };
|
|
326
|
+
const e = this.getCameraPlayer();
|
|
327
|
+
return {
|
|
328
|
+
success: !0,
|
|
329
|
+
player: {
|
|
330
|
+
name: (t = e == null ? void 0 : e.name) != null ? t : "camera",
|
|
331
|
+
type: "camera",
|
|
332
|
+
keyframes: this.serializeKeyframes(e),
|
|
333
|
+
coordinateSpace: P
|
|
334
|
+
}
|
|
335
|
+
};
|
|
336
|
+
}
|
|
337
|
+
/**
|
|
338
|
+
* 序列化全部章节中"含非空关键帧"的运镜 player,按章节索引返回。
|
|
339
|
+
* 供编辑端按"章节起始动画 id"聚合后整组保存。未加载 script 时返回空数组。
|
|
340
|
+
*/
|
|
341
|
+
serializeAllCameraPlayers() {
|
|
342
|
+
if (!this.state.currentScript)
|
|
343
|
+
return [];
|
|
344
|
+
const e = [];
|
|
345
|
+
return this.getChapters().forEach((t, r) => {
|
|
346
|
+
var s;
|
|
347
|
+
const a = this.cameraPlayerOf(t);
|
|
348
|
+
a && a.keyframes.length > 0 && e.push({
|
|
349
|
+
chapterIndex: r,
|
|
350
|
+
player: {
|
|
351
|
+
name: (s = a.name) != null ? s : "camera",
|
|
352
|
+
type: "camera",
|
|
353
|
+
keyframes: this.serializeKeyframes(a),
|
|
354
|
+
coordinateSpace: P
|
|
355
|
+
}
|
|
356
|
+
});
|
|
357
|
+
}), e;
|
|
358
|
+
}
|
|
359
|
+
/**
|
|
360
|
+
* 按章节索引批量加载运镜(用于从持久化数据还原):替换对应章节 camera player 的关键帧。
|
|
361
|
+
* 调用方负责"对账"(只传锚点命中的章节),越界索引忽略。
|
|
362
|
+
*/
|
|
363
|
+
loadCameraPlayersByChapterIndex(e) {
|
|
364
|
+
const t = this.getChapters();
|
|
365
|
+
Object.keys(e).forEach((a) => {
|
|
366
|
+
var u, m;
|
|
367
|
+
const s = Number(a);
|
|
368
|
+
if (!Number.isInteger(s) || s < 0 || s >= t.length)
|
|
369
|
+
return;
|
|
370
|
+
const n = t[s], o = e[s];
|
|
371
|
+
let i = n.players.find((p) => p.type === "camera");
|
|
372
|
+
i || (i = { name: (u = o.name) != null ? u : "camera", type: "camera", keyframes: [] }, n.players.push(i)), i.keyframes = [...(m = o.keyframes) != null ? m : []].sort((p, f) => p.timeStamp - f.timeStamp), o.coordinateSpace && (i.coordinateSpace = o.coordinateSpace);
|
|
373
|
+
});
|
|
374
|
+
const r = this.cameraPlayerOf(this.state.currentChapter);
|
|
375
|
+
r && this.playground.setCameraKeyframes(r.keyframes);
|
|
376
|
+
}
|
|
377
|
+
/** 注册关键帧序列变更监听(camera-keyframes-changed);返回反订阅函数 */
|
|
378
|
+
onCameraKeyframesChanged(e) {
|
|
379
|
+
return this.keyframesChangedListeners.add(e), () => this.keyframesChangedListeners.delete(e);
|
|
380
|
+
}
|
|
381
|
+
// —— 编辑端加法式新增能力(Requirement 18 / design Part III §7)——
|
|
382
|
+
/**
|
|
383
|
+
* 章节默认视角(Chapter_Default_View)。
|
|
384
|
+
* - 章节存在 ≥1 个运镜关键帧:返回该章节相机轨道 `sample(0)`(因首帧夹紧,等于首帧 CameraState)。
|
|
385
|
+
* - 章节存在 0 个运镜关键帧:返回 `undefined`。
|
|
386
|
+
* 默认视角不单独持久化,完全由关键帧派生(不在 cameraPlayers 新增字段)。
|
|
387
|
+
*/
|
|
388
|
+
getChapterDefaultView(e) {
|
|
389
|
+
const t = this.buildChapterCameraTrack(e);
|
|
390
|
+
if (!(!t || !t.hasContent()))
|
|
391
|
+
return t.sample(0);
|
|
392
|
+
}
|
|
393
|
+
/**
|
|
394
|
+
* 应用章节默认视角到 five。
|
|
395
|
+
* - 章节存在关键帧:经 FiveModelCameraBridge 立即应用 `sample(0)`。
|
|
396
|
+
* - 章节存在 0 个关键帧:no-op(保持当前 five 相机状态、不强制移动)。
|
|
397
|
+
*/
|
|
398
|
+
applyChapterDefaultView(e) {
|
|
399
|
+
const t = this.getChapterDefaultView(e);
|
|
400
|
+
t && this.playground.applyCameraStateImmediately(t);
|
|
401
|
+
}
|
|
402
|
+
/**
|
|
403
|
+
* 设为当前编辑章节(不开始播放)。该次调用内联动完成:
|
|
404
|
+
* 切暂停 → `seek(0)`(进度归零、各 DigitalHuman 渲染 t=0)→ 重建 director 轨道到该章节关键帧 →
|
|
405
|
+
* 应用该章节默认视角 → 读取并更新该章节总时长 → 清除已选中运镜项 → 派发 onCurrentChapterChanged。
|
|
406
|
+
* 越界索引为 no-op。
|
|
407
|
+
*/
|
|
408
|
+
setCurrentChapter(e) {
|
|
409
|
+
const t = this.getChapters();
|
|
410
|
+
if (e < 0 || e >= t.length)
|
|
411
|
+
return;
|
|
412
|
+
const r = t[e];
|
|
413
|
+
this.playground.pause(), this.state.playing = !1, this.state.currentChapter = r, this.playground.prepareChapter(r, 0), this.applyChapterFloor(e), this.applyChapterDefaultView(e), this.state.selectedShotIndex = null, this.emitProgress(), this.emitCurrentChapterChanged();
|
|
414
|
+
}
|
|
415
|
+
/** 当前章节信息:{ index, name, duration };duration 为该章节模型动画时长(排除相机 player) */
|
|
416
|
+
getCurrentChapterInfo() {
|
|
417
|
+
const e = this.state.currentChapter;
|
|
418
|
+
return e ? {
|
|
419
|
+
index: this.getCurrentChapterIndex(),
|
|
420
|
+
name: e.name,
|
|
421
|
+
duration: T(e)
|
|
422
|
+
} : { index: -1, name: "", duration: 0 };
|
|
423
|
+
}
|
|
424
|
+
/** 注册当前章节变更监听(current-chapter-changed);返回反订阅函数 */
|
|
425
|
+
onCurrentChapterChanged(e) {
|
|
426
|
+
return this.currentChapterChangedListeners.add(e), () => this.currentChapterChangedListeners.delete(e);
|
|
427
|
+
}
|
|
428
|
+
/**
|
|
429
|
+
* 进入运镜编辑:对全部章节运镜内存态打一次深快照(供 discardCameraChanges 还原)。
|
|
430
|
+
* 仅记录内存快照,不触碰持久化、不改相机/播放状态。
|
|
431
|
+
*/
|
|
432
|
+
beginCameraEditSession() {
|
|
433
|
+
const e = /* @__PURE__ */ new Map();
|
|
434
|
+
this.getChapters().forEach((t) => {
|
|
435
|
+
const r = this.cameraPlayerOf(t);
|
|
436
|
+
e.set(t, r ? this.cloneKeyframes(r.keyframes) : null);
|
|
437
|
+
}), this.cameraEditSnapshot = e;
|
|
438
|
+
}
|
|
439
|
+
/**
|
|
440
|
+
* 放弃运镜修改:将运镜内存态还原到 `beginCameraEditSession` 时的快照(不走服务端重载)。
|
|
441
|
+
* 未打过快照时为 no-op。还原后重建当前章节 director 轨道并派发关键帧变更事件。
|
|
442
|
+
*/
|
|
443
|
+
discardCameraChanges() {
|
|
444
|
+
const e = this.cameraEditSnapshot;
|
|
445
|
+
if (!e)
|
|
446
|
+
return;
|
|
447
|
+
e.forEach((r, a) => {
|
|
448
|
+
const s = this.cameraPlayerOf(a);
|
|
449
|
+
if (r === null)
|
|
450
|
+
s && (s.keyframes = []);
|
|
451
|
+
else if (s)
|
|
452
|
+
s.keyframes = this.cloneKeyframes(r);
|
|
453
|
+
else {
|
|
454
|
+
const n = { name: "camera", type: "camera", keyframes: this.cloneKeyframes(r) };
|
|
455
|
+
a.players.push(n);
|
|
456
|
+
}
|
|
457
|
+
});
|
|
458
|
+
const t = this.cameraPlayerOf(this.state.currentChapter);
|
|
459
|
+
this.playground.setCameraKeyframes(t ? t.keyframes : []), this.emitKeyframesChanged(this.getCameraKeyframes());
|
|
460
|
+
}
|
|
461
|
+
/** 当前进度(当前章节内 currentTime/totalTime,单位 ms;含当前章节索引/总章节数) */
|
|
462
|
+
getProgress() {
|
|
463
|
+
const e = this.playground.getClock(), t = e.getTime();
|
|
464
|
+
let r = e.getDuration();
|
|
465
|
+
r <= 0 && this.state.currentChapter && (r = b(this.state.currentChapter));
|
|
466
|
+
const a = this.getChapters(), s = this.state.currentChapter, n = s ? a.findIndex((o) => o === s || o.name === s.name) : -1;
|
|
467
|
+
return { currentTime: t, totalTime: r, currentChapterIndex: n, totalChapters: a.length };
|
|
468
|
+
}
|
|
469
|
+
/** 注册进度监听;返回反订阅函数 */
|
|
470
|
+
onProgressChanged(e) {
|
|
471
|
+
return this.progressListeners.add(e), () => this.progressListeners.delete(e);
|
|
472
|
+
}
|
|
473
|
+
/**
|
|
474
|
+
* 组级章节时间映射(加法式):每章 { index, name, startTime, endTime, duration } 逐章累计。
|
|
475
|
+
* - duration[i] = getChapterModelDuration(chapters[i])(排除 camera player)
|
|
476
|
+
* - startTime[0]=0、startTime[i]=endTime[i-1]、endTime[i]=startTime[i]+duration[i]
|
|
477
|
+
* - 未加载 / 空章节组返回 [];纯读,不修改任何引擎状态。
|
|
478
|
+
* 按 currentScript 引用缓存;loadScript / script 变更时失效重算。
|
|
479
|
+
*/
|
|
480
|
+
getGroupChapterTimeMap() {
|
|
481
|
+
const e = this.state.currentScript;
|
|
482
|
+
if (!e)
|
|
483
|
+
return [];
|
|
484
|
+
if (this.groupChapterTimeMapCache && this.groupChapterTimeMapCacheScript === e)
|
|
485
|
+
return this.groupChapterTimeMapCache;
|
|
486
|
+
const t = this.getChapters(), r = [];
|
|
487
|
+
let a = 0;
|
|
488
|
+
for (let s = 0; s < t.length; s++) {
|
|
489
|
+
const n = T(t[s]), o = a, i = o + n;
|
|
490
|
+
r.push({ index: s, name: t[s].name, startTime: o, endTime: i, duration: n }), a = i;
|
|
491
|
+
}
|
|
492
|
+
return this.groupChapterTimeMapCache = r, this.groupChapterTimeMapCacheScript = e, r;
|
|
493
|
+
}
|
|
494
|
+
/**
|
|
495
|
+
* 组级进度聚合(加法式):由章节级 getProgress() + getGroupChapterTimeMap() 派生。
|
|
496
|
+
* - groupTotalTime = Σ duration
|
|
497
|
+
* - groupCurrentTime = startTime[currentChapterIndex] + clamp(currentTime, 0, duration[idx])(无当前章节为 0)
|
|
498
|
+
* - 0 ≤ groupCurrentTime ≤ groupTotalTime;percentage ∈ [0,100](groupTotalTime=0 时为 0)
|
|
499
|
+
* 纯读,不修改任何引擎状态。
|
|
500
|
+
*/
|
|
501
|
+
getGroupProgress() {
|
|
502
|
+
const e = this.getProgress(), t = this.getGroupChapterTimeMap(), r = t.length === 0 ? 0 : t[t.length - 1].endTime, a = e.currentChapterIndex;
|
|
503
|
+
let s = 0;
|
|
504
|
+
if (a >= 0 && a < t.length) {
|
|
505
|
+
const o = t[a].startTime, i = this.clamp(e.currentTime, 0, t[a].duration);
|
|
506
|
+
s = this.clamp(o + i, 0, r);
|
|
507
|
+
}
|
|
508
|
+
const n = r > 0 ? this.clamp(s / r * 100, 0, 100) : 0;
|
|
509
|
+
return {
|
|
510
|
+
groupCurrentTime: s,
|
|
511
|
+
groupTotalTime: r,
|
|
512
|
+
percentage: n,
|
|
513
|
+
currentChapterIndex: a,
|
|
514
|
+
currentChapterTime: e.currentTime,
|
|
515
|
+
currentChapterTotalTime: e.totalTime,
|
|
516
|
+
totalChapters: e.totalChapters
|
|
517
|
+
};
|
|
518
|
+
}
|
|
519
|
+
/**
|
|
520
|
+
* 注册组级进度监听(加法式,独立监听集合);返回反订阅函数。
|
|
521
|
+
* 在既有 emitProgress() 内追加组级广播,每 tick / 章节切换 / pause / seek 时随章节级广播一并触发。
|
|
522
|
+
*/
|
|
523
|
+
onGroupProgressChanged(e) {
|
|
524
|
+
return this.groupProgressListeners.add(e), () => this.groupProgressListeners.delete(e);
|
|
525
|
+
}
|
|
526
|
+
/**
|
|
527
|
+
* 播放/预览专用:设为当前章节(不开始播放,区别于编辑端 setCurrentChapter)。
|
|
528
|
+
* 透传 playground.prepareChapter:切模型可见性 + 重绑相机轨道 + 配置时钟时长并 seek 到 fromTime(不 start)。
|
|
529
|
+
* 不做编辑端默认视角设置 / 选中清理等联动。越界索引为 no-op。
|
|
530
|
+
*/
|
|
531
|
+
setCurrentChapterForPlayback(e, t) {
|
|
532
|
+
const r = this.getChapters();
|
|
533
|
+
e < 0 || e >= r.length || (this.state.currentChapter = r[e], this.applyChapterFloor(e), this.playground.prepareChapter(r[e], t));
|
|
534
|
+
}
|
|
535
|
+
/**
|
|
536
|
+
* 跳转到组级时间(ms):映射为 (章节 index, 章节内时间),必要时切章后 setTimelineTo。
|
|
537
|
+
* 保留 seek 前的播放/暂停状态(D-SEEK-LIVE,方案 A):
|
|
538
|
+
* - 暂停态:跨章则先 setCurrentChapterForPlayback 切章,再 setTimelineTo 预览该帧后交还用户。
|
|
539
|
+
* - 播放态同章:clock.seek 续播(经 setTimelineTo)。
|
|
540
|
+
* - 播放态跨章:置 seekRedirect 并 abortCurrentPlay,由连播循环跳到目标章节从 localTime 继续。
|
|
541
|
+
* 越界钳制到 [0, groupTotalTime];未加载 script 返回 { success:false } 不抛异常。
|
|
542
|
+
*/
|
|
543
|
+
seekToGroupTime(e) {
|
|
544
|
+
if (!this.state.currentScript)
|
|
545
|
+
return { success: !1, error: "未加载剧本" };
|
|
546
|
+
const t = this.getGroupChapterTimeMap();
|
|
547
|
+
if (t.length === 0)
|
|
548
|
+
return { success: !1, error: "无章节" };
|
|
549
|
+
const r = t[t.length - 1].endTime, a = this.clamp(e, 0, r), { index: s, localTime: n } = this.mapGroupTimeToChapter(a, t), o = s !== this.getCurrentChapterIndex();
|
|
550
|
+
if (this.state.playing && this.state.continuousPlaying && o)
|
|
551
|
+
return this.seekRedirect = { index: s, fromTime: n }, this.playground.abortCurrentPlay(), { success: !0 };
|
|
552
|
+
o && this.setCurrentChapterForPlayback(s, n);
|
|
553
|
+
const i = this.setTimelineTo(n);
|
|
554
|
+
return this.emitProgress(), i;
|
|
555
|
+
}
|
|
556
|
+
/** 跳转到组级百分比 [0,100](= seekToGroupTime(clamp(pct,0,100)/100 * groupTotalTime)) */
|
|
557
|
+
seekToGroupPercentage(e) {
|
|
558
|
+
const t = this.getGroupChapterTimeMap(), r = t.length === 0 ? 0 : t[t.length - 1].endTime;
|
|
559
|
+
return this.seekToGroupTime(this.clamp(e, 0, 100) / 100 * r);
|
|
560
|
+
}
|
|
561
|
+
/**
|
|
562
|
+
* 组级时间 → (章节索引, 章节内时间)(加法式内部)。
|
|
563
|
+
* - g ≤ 0 → { index: 0, localTime: 0 }
|
|
564
|
+
* - g ≥ groupTotal → { index: last, localTime: duration[last] }
|
|
565
|
+
* - 否则 startTime[index] ≤ g < endTime[index] 且 localTime = g - startTime[index]
|
|
566
|
+
* - 零时长章节(start==end)被自动跳过(不会定位其内部)
|
|
567
|
+
* 前置条件:timeMap 非空。
|
|
568
|
+
*/
|
|
569
|
+
mapGroupTimeToChapter(e, t) {
|
|
570
|
+
const r = t[t.length - 1], a = r.endTime;
|
|
571
|
+
if (e <= 0)
|
|
572
|
+
return { index: 0, localTime: 0 };
|
|
573
|
+
if (e >= a)
|
|
574
|
+
return { index: r.index, localTime: r.duration };
|
|
575
|
+
for (const s of t)
|
|
576
|
+
if (e < s.endTime)
|
|
577
|
+
return { index: s.index, localTime: e - s.startTime };
|
|
578
|
+
return { index: r.index, localTime: r.duration };
|
|
579
|
+
}
|
|
580
|
+
/** 数值钳制工具 */
|
|
581
|
+
clamp(e, t, r) {
|
|
582
|
+
return e < t ? t : e > r ? r : e;
|
|
583
|
+
}
|
|
584
|
+
/** 当前可用章节 */
|
|
585
|
+
getChapters() {
|
|
586
|
+
var e;
|
|
587
|
+
return ((e = this.state.currentScript) == null ? void 0 : e.chapters) || [];
|
|
588
|
+
}
|
|
589
|
+
/** 当前状态快照 */
|
|
590
|
+
getState() {
|
|
591
|
+
return { playing: this.state.playing, currentChapter: this.state.currentChapter };
|
|
592
|
+
}
|
|
593
|
+
/** 重置播放(保留已加载资源) */
|
|
594
|
+
reset() {
|
|
595
|
+
this.playground.reset(), this.state.playing = !1, this.state.continuousPlaying = !1, this.state.currentChapter = null, this.state.selectedShotIndex = null, this.seekRedirect = null, this.chapterFloorMap && (this.showModelFloor(), this.chapterFloorMap = null), this.emitProgress();
|
|
596
|
+
}
|
|
597
|
+
/** 销毁插件、释放资源 */
|
|
598
|
+
dispose() {
|
|
599
|
+
this.unsubClockTick && (this.unsubClockTick(), this.unsubClockTick = null), this.chapterFloorMap && (this.showModelFloor(), this.chapterFloorMap = null), this.progressListeners.clear(), this.keyframesChangedListeners.clear(), this.currentChapterChangedListeners.clear(), this.groupProgressListeners.clear(), this.cameraEditSnapshot = null, this.playground.dispose();
|
|
600
|
+
}
|
|
601
|
+
/** 预加载模型 / 动画 / 道具(复用 Shared_Core 加载) */
|
|
602
|
+
preloadResources(e) {
|
|
603
|
+
return c(this, null, function* () {
|
|
604
|
+
const t = [], r = [], a = /* @__PURE__ */ new Set(), s = [], n = /* @__PURE__ */ new Map();
|
|
605
|
+
e.chapters.forEach((o) => {
|
|
606
|
+
o.players.forEach((i) => {
|
|
607
|
+
if (i.type !== "model")
|
|
608
|
+
return;
|
|
609
|
+
const u = i;
|
|
610
|
+
t.push(u.model), r.push(i.id), u.keyframes.forEach((m) => {
|
|
611
|
+
var f, y;
|
|
612
|
+
if (!m.animation)
|
|
613
|
+
return;
|
|
614
|
+
a.add(m.animation.url);
|
|
615
|
+
const p = m.animation.item;
|
|
616
|
+
p && (s.push(p.url), n.set(p.url, {
|
|
617
|
+
position: (f = p.position) != null ? f : [0, 0, 0],
|
|
618
|
+
rotation: (y = p.rotation) != null ? y : [0, 0, 0]
|
|
619
|
+
}));
|
|
620
|
+
});
|
|
621
|
+
});
|
|
622
|
+
}), yield Promise.all([
|
|
623
|
+
this.playground.loader.loadModels(t, r),
|
|
624
|
+
this.playground.loader.loadItems(s, n),
|
|
625
|
+
this.playground.loader.loadAnimations(Array.from(a))
|
|
626
|
+
]);
|
|
627
|
+
});
|
|
628
|
+
}
|
|
629
|
+
emitProgress() {
|
|
630
|
+
if (this.progressListeners.size > 0) {
|
|
631
|
+
const e = this.getProgress();
|
|
632
|
+
this.progressListeners.forEach((t) => t(e));
|
|
633
|
+
}
|
|
634
|
+
this.emitGroupProgress();
|
|
635
|
+
}
|
|
636
|
+
/** 组级进度广播(加法式新增;独立监听集合,既有 onProgressChanged 语义不变) */
|
|
637
|
+
emitGroupProgress() {
|
|
638
|
+
if (this.groupProgressListeners.size === 0)
|
|
639
|
+
return;
|
|
640
|
+
const e = this.getGroupProgress();
|
|
641
|
+
this.groupProgressListeners.forEach((t) => t(e));
|
|
642
|
+
}
|
|
643
|
+
// —— 运镜关键帧编辑辅助 ——
|
|
644
|
+
/** 编辑前置校验:未加载 script / 无当前章节时返回拒绝结果,否则返回 null */
|
|
645
|
+
guardKeyframeEdit() {
|
|
646
|
+
return this.state.currentScript ? this.state.currentChapter ? null : this.rejectKeyframe("无当前章节") : this.rejectKeyframe("未加载剧本");
|
|
647
|
+
}
|
|
648
|
+
/** 拒绝结果:保持当前序列不变并返回 error */
|
|
649
|
+
rejectKeyframe(e) {
|
|
650
|
+
return { success: !1, error: e, keyframes: this.getCameraKeyframes() };
|
|
651
|
+
}
|
|
652
|
+
/** 当前章节的 camera player(不存在返回 null) */
|
|
653
|
+
getCameraPlayer() {
|
|
654
|
+
return this.cameraPlayerOf(this.state.currentChapter);
|
|
655
|
+
}
|
|
656
|
+
/** 指定章节的 camera player(不存在返回 null) */
|
|
657
|
+
cameraPlayerOf(e) {
|
|
658
|
+
if (!e)
|
|
659
|
+
return null;
|
|
660
|
+
const t = e.players.find((r) => r.type === "camera");
|
|
661
|
+
return t != null ? t : null;
|
|
662
|
+
}
|
|
663
|
+
/** 把 camera player 的关键帧序列化为升序、仅含已设置可选字段的副本(Mapview 位姿) */
|
|
664
|
+
serializeKeyframes(e) {
|
|
665
|
+
return (e ? [...e.keyframes].sort((r, a) => r.timeStamp - a.timeStamp) : []).map((r) => {
|
|
666
|
+
const a = {
|
|
667
|
+
timeStamp: r.timeStamp,
|
|
668
|
+
target: [...r.target],
|
|
669
|
+
longitude: r.longitude,
|
|
670
|
+
latitude: r.latitude,
|
|
671
|
+
distance: r.distance,
|
|
672
|
+
fov: r.fov
|
|
673
|
+
};
|
|
674
|
+
return r.transition !== void 0 && (a.transition = r.transition), r.thumbnail !== void 0 && (a.thumbnail = r.thumbnail), a;
|
|
675
|
+
});
|
|
676
|
+
}
|
|
677
|
+
/** 获取当前章节的 camera player,不存在则创建并挂到章节 players 上 */
|
|
678
|
+
ensureCameraPlayer() {
|
|
679
|
+
const e = this.state.currentChapter;
|
|
680
|
+
let t = e.players.find((r) => r.type === "camera");
|
|
681
|
+
return t || (t = { name: "camera", type: "camera", keyframes: [] }, e.players.push(t)), t;
|
|
682
|
+
}
|
|
683
|
+
/** fov 取值:优先 fiveState.fov,否则读 five 当前状态 */
|
|
684
|
+
resolveFov(e) {
|
|
685
|
+
var r, a;
|
|
686
|
+
if (e && Number.isFinite(e.fov))
|
|
687
|
+
return e.fov;
|
|
688
|
+
const t = (a = (r = this.five).getCurrentState) == null ? void 0 : a.call(r).fov;
|
|
689
|
+
return Number.isFinite(t) ? t : 60;
|
|
690
|
+
}
|
|
691
|
+
/** 捕获 five 当前 Mapview 位姿(target=offset、longitude、latitude、distance) */
|
|
692
|
+
captureCameraPose() {
|
|
693
|
+
var r, a;
|
|
694
|
+
const e = (a = (r = this.five).getCurrentState) == null ? void 0 : a.call(r), t = e == null ? void 0 : e.offset;
|
|
695
|
+
return {
|
|
696
|
+
target: t ? [t.x, t.y, t.z] : [0, 0, 0],
|
|
697
|
+
longitude: Number.isFinite(e == null ? void 0 : e.longitude) ? e.longitude : 0,
|
|
698
|
+
latitude: Number.isFinite(e == null ? void 0 : e.latitude) ? e.latitude : 0,
|
|
699
|
+
distance: Number.isFinite(e == null ? void 0 : e.distance) ? e.distance : 0
|
|
700
|
+
};
|
|
701
|
+
}
|
|
702
|
+
/** 关键帧变更后:重建并绑定相机轨道(供 seek 预览/后续播放接管),派发事件,返回成功结果 */
|
|
703
|
+
afterKeyframesChanged(e) {
|
|
704
|
+
this.playground.setCameraKeyframes(e.keyframes);
|
|
705
|
+
const t = this.getCameraKeyframes();
|
|
706
|
+
return this.emitKeyframesChanged(t), { success: !0, keyframes: t };
|
|
707
|
+
}
|
|
708
|
+
emitKeyframesChanged(e) {
|
|
709
|
+
this.keyframesChangedListeners.forEach((t) => t(e.map((r) => g({}, r))));
|
|
710
|
+
}
|
|
711
|
+
emitCurrentChapterChanged() {
|
|
712
|
+
if (this.currentChapterChangedListeners.size === 0)
|
|
713
|
+
return;
|
|
714
|
+
const e = this.getCurrentChapterInfo();
|
|
715
|
+
this.currentChapterChangedListeners.forEach((t) => t(g({}, e)));
|
|
716
|
+
}
|
|
717
|
+
/** 当前章节索引(0-based;无当前章节为 -1),按引用或名称匹配 */
|
|
718
|
+
getCurrentChapterIndex() {
|
|
719
|
+
const e = this.state.currentChapter;
|
|
720
|
+
return e ? this.getChapters().findIndex((t) => t === e || t.name === e.name) : -1;
|
|
721
|
+
}
|
|
722
|
+
/** 由指定章节的相机关键帧构建一条 CameraTrack(无章节/无 camera player 返回 null) */
|
|
723
|
+
buildChapterCameraTrack(e) {
|
|
724
|
+
const t = this.getChapters();
|
|
725
|
+
if (e < 0 || e >= t.length)
|
|
726
|
+
return null;
|
|
727
|
+
const r = this.cameraPlayerOf(t[e]);
|
|
728
|
+
if (!r || r.keyframes.length === 0)
|
|
729
|
+
return null;
|
|
730
|
+
const a = new E();
|
|
731
|
+
return a.setKeyframes(r.keyframes), a;
|
|
732
|
+
}
|
|
733
|
+
/** 深拷贝关键帧序列(数组字段亦深拷贝),供快照/还原使用(Mapview 位姿) */
|
|
734
|
+
cloneKeyframes(e) {
|
|
735
|
+
return e.map((t) => {
|
|
736
|
+
const r = {
|
|
737
|
+
timeStamp: t.timeStamp,
|
|
738
|
+
target: [...t.target],
|
|
739
|
+
longitude: t.longitude,
|
|
740
|
+
latitude: t.latitude,
|
|
741
|
+
distance: t.distance,
|
|
742
|
+
fov: t.fov
|
|
743
|
+
};
|
|
744
|
+
return t.transition !== void 0 && (r.transition = t.transition), t.thumbnail !== void 0 && (r.thumbnail = t.thumbnail), r;
|
|
745
|
+
});
|
|
746
|
+
}
|
|
747
|
+
}
|
|
748
|
+
export {
|
|
749
|
+
B as default
|
|
750
|
+
};
|