diff --git a/src/app/babylon/model/data/mark/mark-plan-data.ts b/src/app/babylon/model/data/mark/mark-plan-data.ts index 19e1585..c0f0912 100644 --- a/src/app/babylon/model/data/mark/mark-plan-data.ts +++ b/src/app/babylon/model/data/mark/mark-plan-data.ts @@ -11,6 +11,9 @@ import { MarkData } from "./mark-data"; */ export class AllMarkPlanData { + + + /** * 单位ID("字符串") */ @@ -193,6 +196,7 @@ export class MarkPlanData { */ export class MarkNodeData { + /** * 唯一身份id */ @@ -365,9 +369,9 @@ export class MarkNodeData { let timeScale = 0.3; - let minTime = 3; //最短停留时间 + let minTime = 4; //最短停留时间 - let result = textNum * timeScale; + let result = textNum * timeScale + 1; if (result < minTime) { result = minTime; } diff --git a/src/app/babylon/model/info/mark/model-info-mark.ts b/src/app/babylon/model/info/mark/model-info-mark.ts index d3f5f6d..1a9c1c7 100644 --- a/src/app/babylon/model/info/mark/model-info-mark.ts +++ b/src/app/babylon/model/info/mark/model-info-mark.ts @@ -267,7 +267,7 @@ export class ModelInfo_mark extends ModelInfo { // instance.uiFollowHeadBg.widthInPixels = maxWidth; }, (50)); - console.log("喷水", this.taskNeedWaterParticle()); + // console.log("喷水", this.taskNeedWaterParticle()); if (this.taskNeedWaterParticle()) { this.sprinklingWater(true); @@ -426,7 +426,7 @@ export class ModelInfo_mark extends ModelInfo { // } } - console.log("喷头", this.node_pz); + // console.log("喷头", this.node_pz); if (this.node_pz == null) { result = false; diff --git a/src/app/babylon/model/info/mark/other/mark-plan-particle-info.ts b/src/app/babylon/model/info/mark/other/mark-plan-particle-info.ts index e7dd2de..a6a94fb 100644 --- a/src/app/babylon/model/info/mark/other/mark-plan-particle-info.ts +++ b/src/app/babylon/model/info/mark/other/mark-plan-particle-info.ts @@ -68,7 +68,7 @@ export class ModelInfo_mark_particle extends ModelInfo_mark { // instance.modelBox.scaling = new Vector3(100, 300, 100); ps.emitter = root; instance.particleSet.systems.push(ps); - console.log(ps.name, instance.isPlaying); + // console.log(ps.name, instance.isPlaying); if (instance.isPlaying) { instance.particleSet.start(); } @@ -128,7 +128,7 @@ export class ModelInfo_mark_particle extends ModelInfo_mark { dispose() { if (this.particleSet != null) { - console.log("释放粒子", this.particleSet); + // console.log("释放粒子", this.particleSet); this.particleSet.dispose(); } super.dispose(); diff --git a/src/app/babylon/model/info/model/model-info.ts b/src/app/babylon/model/info/model/model-info.ts index 2a31504..0aac638 100644 --- a/src/app/babylon/model/info/model/model-info.ts +++ b/src/app/babylon/model/info/model/model-info.ts @@ -229,7 +229,7 @@ export class ModelInfo { this.uiFollowRoot.dispose(); } - console.log("释放model" + this.key, disposeMesh); + // console.log("释放model" + this.key, disposeMesh); if (disposeMesh) { if (this.modelBox != null) { this.modelBox.dispose(); diff --git a/src/app/babylon/tool/babylon-tool.ts b/src/app/babylon/tool/babylon-tool.ts index 334fb1b..e29d64f 100644 --- a/src/app/babylon/tool/babylon-tool.ts +++ b/src/app/babylon/tool/babylon-tool.ts @@ -1,3 +1,4 @@ +import { NumberValueAccessor } from '@angular/forms'; import { AbstractMesh, Animation, @@ -130,7 +131,7 @@ export class BabylonTool { path = ObjectsService.getFullPath(path); //根据环境,动态改变桶名 } - console.log("异步加载模型" + path + sceneFilename); + // console.log("异步加载模型" + path + sceneFilename); let modelPath = path + sceneFilename; LoadTool.add(modelPath, tag); @@ -345,6 +346,7 @@ export class BabylonTool { radius: number, alpha: number, beta: number, + onAnimationEnd?: () => void ) { //缓动动画 let easingFunction = new QuadraticEase(); @@ -416,7 +418,7 @@ export class BabylonTool { camera.animations.push(anim_a); camera.animations.push(anim_b); - camera._scene.beginAnimation(camera, 0, allFrame, false); + return camera._scene.beginAnimation(camera, 0, allFrame, false, undefined, onAnimationEnd); } diff --git a/src/app/babylon/tool/particle-system-tool.ts b/src/app/babylon/tool/particle-system-tool.ts index 66b07a2..9a19a4e 100644 --- a/src/app/babylon/tool/particle-system-tool.ts +++ b/src/app/babylon/tool/particle-system-tool.ts @@ -67,11 +67,11 @@ export class ParticleSystemTool { if (instance.psPool.has(path)) { let set = instance.psPool.get(path); let result = instance.cloneParticle(set, name); - console.log(set.uniqueId + "克隆特效id", result.uniqueId); + // console.log(set.uniqueId + "克隆特效id", result.uniqueId); onSuccess(result); } else { - console.log("加载特效", name); + // console.log("加载特效", name); instance.loadPrefab(null, path, true, (value: ParticleSystem) => { onSuccess(value); }) diff --git a/src/app/babylon/tool/speaking-tool.ts b/src/app/babylon/tool/speaking-tool.ts index 9784ed9..54ca515 100644 --- a/src/app/babylon/tool/speaking-tool.ts +++ b/src/app/babylon/tool/speaking-tool.ts @@ -38,7 +38,7 @@ export class SpeakingTool { * @param msg */ speak(msg: string) { - console.log("阅读" + msg); + // console.log("阅读" + msg); if (this.isIE()) { } diff --git a/src/app/babylon/view/building-window/building-window.ts b/src/app/babylon/view/building-window/building-window.ts index 01a900e..8ba677c 100644 --- a/src/app/babylon/view/building-window/building-window.ts +++ b/src/app/babylon/view/building-window/building-window.ts @@ -1,8 +1,10 @@ -import { AbstractMesh, Material, Mesh, PBRMaterial, Texture } from "@babylonjs/core"; +import { AbstractMesh, Material, Mesh, PBRMaterial, Texture, Animatable } from "@babylonjs/core"; import { PlanComponent } from "src/app/pages/plan/plan.component"; import { ConfigManager } from "../../controller/config-manager"; import { DataManager } from "../../controller/data-manager"; +import { EventManager } from "../../controller/event-manager/event-manager"; +import { Event_LoadingChange } from "../../controller/event-manager/events/event-loading-change"; import { InfoManager } from "../../controller/info-manager"; import { ModeManager, ModeType } from "../../controller/mode-manager"; import { SceneManager } from "../../controller/scene-manager"; @@ -23,6 +25,7 @@ import { ModelInfo_building } from "../../model/info/model/model-info-building"; import { FacilityInfoByType, ModelInfo_facility } from "../../model/info/model/model-info-facility"; import { BabylonTool } from "../../tool/babylon-tool"; import { GizmoTool } from "../../tool/gizmo-tool"; +import { LoadTool } from "../../tool/load-tool"; import { TsTool } from "../../tool/ts-tool"; import { FacilityInfoInSceneWindow } from "../facilityinfoinscene-window/facilityinfoinscene-window"; import { MarkWindow } from "../mark-window/mark-window"; @@ -49,6 +52,7 @@ export class BuildingWindow extends UIBase { three: PlanComponent;//前端组件 + cameraAnim: Animatable;//相机动画 //#region 与前端对接部分 @@ -283,12 +287,15 @@ export class BuildingWindow extends UIBase { * @param cameraData * @param showZP */ - revoverCamera(cameraData: ArcRotateCameraData, showZP: boolean) { + revoverCamera(cameraData: ArcRotateCameraData, showZP: boolean, onAnimationEnd?: () => void) { this.showZP(showZP); PlanComponent.instance.isOpenAwning = showZP; let camera = SceneManager.Instance.defaultCamera; if (cameraData != null) { - BabylonTool.AnimMoveCameraTargetAB(camera, 60, cameraData.target, cameraData.radius, cameraData.alpha, cameraData.beta); + this.cameraAnim = BabylonTool.AnimMoveCameraTargetAB(camera, 60, cameraData.target, cameraData.radius, cameraData.alpha, cameraData.beta, onAnimationEnd); + if (Event_LoadingChange.isLoading) { + this.cameraAnim.pause(); + } } } @@ -314,6 +321,10 @@ export class BuildingWindow extends UIBase { SceneManager.Instance.scene.onBeforeRenderObservable.add(() => { instance.onUpdate(); }) + EventManager.addListener(Event_LoadingChange, (eventInfo) => { + instance.onChangeLoading(eventInfo); + }); + } onShow() { @@ -331,6 +342,25 @@ export class BuildingWindow extends UIBase { } + /** + * loading状态改变时 + * @param eventInfo + */ + onChangeLoading(eventInfo: Event_LoadingChange) { + if (eventInfo.showLoading) { + if (this.cameraAnim != null) { + this.cameraAnim.pause(); + } + + } + else { + if (this.cameraAnim != null) { + this.cameraAnim.restart(); + } + + } + } + //#endregion diff --git a/src/app/babylon/view/mark-window/mark-window.ts b/src/app/babylon/view/mark-window/mark-window.ts index 03bca52..cc3e42a 100644 --- a/src/app/babylon/view/mark-window/mark-window.ts +++ b/src/app/babylon/view/mark-window/mark-window.ts @@ -39,6 +39,12 @@ import { WeatherTool } from "./weather-tool"; export class MarkWindow extends UIBase { + /** + * 游离节点特殊Key + */ + readonly c_leaveNode: string = "node_leave_"; + + static instance: MarkWindow; static s_cameraData: ArcRotateCameraData = null;//预定义的相机数据 static s_preLoadMesh: boolean = false;//预加载所有标绘物(如果是false,则在选中每个标绘物的时候,进行预加载单个) @@ -236,6 +242,7 @@ export class MarkWindow extends UIBase { * 保存至已有节点 * @param markPlanId 方案id,一级节点ID * @param nodeId 节点id,二级节点id + * @param newName 是否要覆盖原有的名字 */ saveToOldNode(markPlanId: number, nodeId: number, newName?: string) { let markPlaneData = DataManager.allMarkPlanData.getMarkPlanById(markPlanId); @@ -248,7 +255,7 @@ export class MarkWindow extends UIBase { let copyNodeData = classToClass(this.currentMarkNodeDataCopy);//覆盖数据 copyNodeData.id = oldNodeData.id; copyNodeData.index = oldNodeData.index; - if (newName != null) { + if (newName != null && newName != this.c_leaveNode) { copyNodeData.name = newName; } // copyNodeData.name = oldNodeData.name; @@ -321,10 +328,10 @@ export class MarkWindow extends UIBase { let nodeCopy: MarkNodeData; if (changeBuildingByUI) //从ui点击切层, { - console.log(this.currentMarkNodeInfo); + // console.log(this.currentMarkNodeInfo); if (this.currentMarkNodeInfo == null)//没有当前的markInfo,创建一个游离的节点 { - console.log("拷贝游离节点"); + // console.log("拷贝游离节点"); nodeCopy = this.createLeaveNode(); this.savCurrentNodeData(nodeCopy); } @@ -362,10 +369,14 @@ export class MarkWindow extends UIBase { this.currentMarkNodeDataCopy = nodeCopy;//更新备份数据 this.currentMarkNodeInfo = new MarkNodeInfo(markPlanData, this.currentMarkNodeDataCopy); //this.currentMarkNodeDataCopy = classToClass(this.currentMarkNodeInfo.nodeData); //更新备份数据 - this.updateNodeInfo(); - if (readDescribe) { - this.readDescribe(nodeCopy.describe); - } + this.updateNodeInfo(readDescribe); + // let instance = this; + // if (readDescribe) { //镜头移动完,开始说话 + // setTimeout(() => { + // instance.readDescribe(nodeCopy.describe); + // }, MarkNodeData.speakWaitTime * 1000); + + // } } @@ -936,6 +947,8 @@ export class MarkWindow extends UIBase { + + //#endregion //#region 查询类 @@ -1009,7 +1022,7 @@ export class MarkWindow extends UIBase { * 创建一个游离的节点,用于没有选中已经创建的节点时,存放标绘信息 */ createLeaveNode() { - let result = new MarkNodeData(0, "leave"); + let result = new MarkNodeData(0, this.c_leaveNode); return result; } @@ -1167,8 +1180,9 @@ export class MarkWindow extends UIBase { * 更新节点数据至表现层 * 摄像机、楼层、室内外的更新 * 标记物的重新创建 + * @param readDescribe: 是否阅读介绍 */ - updateNodeInfo() { + updateNodeInfo(readDescribe = false) { let environmentData = this.currentMarkNodeInfo.nodeData.getCurrentEnvironmentData(); let cameraData = this.currentMarkNodeInfo.nodeData.cameraData; let showZP = this.currentMarkNodeInfo.nodeData.showZP; @@ -1198,7 +1212,13 @@ export class MarkWindow extends UIBase { // } //仅此分支生效 - BuildingWindow.instance.revoverCamera(cameraData, showZP); + + //动画还原相机,结束后开始阅读 + BuildingWindow.instance.revoverCamera(cameraData, showZP, (() => { + if (readDescribe) { + instance.readDescribe(instance.currentMarkNodeInfo.nodeData.describe); + } + })); instance.clearEnterObserver(true); diff --git a/src/app/pages/plan/plan.component.ts b/src/app/pages/plan/plan.component.ts index ba9753e..d7948be 100644 --- a/src/app/pages/plan/plan.component.ts +++ b/src/app/pages/plan/plan.component.ts @@ -82,7 +82,7 @@ export class PlanComponent implements OnInit { this.getGasStationBaseInfo().then((res: any) => { //获取单位 基本信息 console.log(res, "当前加油站信息") let simpleData: InsitutionDataSimple = new InsitutionDataSimple(); - simpleData.id = res.id || 1; //来自选中的单位的信息 ,测试:1 + simpleData.id = res.id || 6; //来自选中的单位的信息 ,测试:1 simpleData.key = `${res.id}` || "ceshi"; //测试:"ceshi" simpleData.name = res.stationName || "测试"; //来自选中的单位的信息 ,测试:"测试" @@ -91,7 +91,7 @@ export class PlanComponent implements OnInit { if (ModeManager.institutionDemoKey == ModeManager.c_demoKey_null) { //无指定测试单位,则为正式启动,根据当前单位key寻找 if (has3dData) { //如果已经有三维数据,直接进入 this.beforeOneSatus = StatusManager.getStatus(LoginSatus); - console.log("单位数据", simpleData); + // console.log("单位数据", simpleData); this.beforeOneSatus.onSelectInsSuccess(simpleData) } else { //如果没有三维数据 if (ModeManager.s_isMakeMode) //内部制作模式下,询问新建 diff --git a/src/assets/mesh/mark/disaster/dt/DT.gltf.manifest b/src/assets/mesh/mark/disaster/dt/DT.gltf.manifest new file mode 100644 index 0000000..1781cb5 --- /dev/null +++ b/src/assets/mesh/mark/disaster/dt/DT.gltf.manifest @@ -0,0 +1,5 @@ +{ + "version" : 1, + "enableSceneOffline" : true, + "enableTexturesOffline" : true +} \ No newline at end of file diff --git a/src/assets/mesh/mark/disaster/lyd/LYD.gltf.manifest b/src/assets/mesh/mark/disaster/lyd/LYD.gltf.manifest new file mode 100644 index 0000000..1781cb5 --- /dev/null +++ b/src/assets/mesh/mark/disaster/lyd/LYD.gltf.manifest @@ -0,0 +1,5 @@ +{ + "version" : 1, + "enableSceneOffline" : true, + "enableTexturesOffline" : true +} \ No newline at end of file diff --git a/src/assets/mesh/mark/disaster/lyx/LYX.gltf.manifest b/src/assets/mesh/mark/disaster/lyx/LYX.gltf.manifest new file mode 100644 index 0000000..1781cb5 --- /dev/null +++ b/src/assets/mesh/mark/disaster/lyx/LYX.gltf.manifest @@ -0,0 +1,5 @@ +{ + "version" : 1, + "enableSceneOffline" : true, + "enableTexturesOffline" : true +} \ No newline at end of file diff --git a/src/assets/mesh/mark/disaster/sy/SY.gltf.manifest b/src/assets/mesh/mark/disaster/sy/SY.gltf.manifest new file mode 100644 index 0000000..1781cb5 --- /dev/null +++ b/src/assets/mesh/mark/disaster/sy/SY.gltf.manifest @@ -0,0 +1,5 @@ +{ + "version" : 1, + "enableSceneOffline" : true, + "enableTexturesOffline" : true +} \ No newline at end of file diff --git a/src/assets/mesh/mark/inside/gfmhq/GFMHQ.gltf.manifest b/src/assets/mesh/mark/inside/gfmhq/GFMHQ.gltf.manifest new file mode 100644 index 0000000..1781cb5 --- /dev/null +++ b/src/assets/mesh/mark/inside/gfmhq/GFMHQ.gltf.manifest @@ -0,0 +1,5 @@ +{ + "version" : 1, + "enableSceneOffline" : true, + "enableTexturesOffline" : true +} \ No newline at end of file diff --git a/src/assets/mesh/mark/inside/jyy/JYY.gltf.manifest b/src/assets/mesh/mark/inside/jyy/JYY.gltf.manifest new file mode 100644 index 0000000..1781cb5 --- /dev/null +++ b/src/assets/mesh/mark/inside/jyy/JYY.gltf.manifest @@ -0,0 +1,5 @@ +{ + "version" : 1, + "enableSceneOffline" : true, + "enableTexturesOffline" : true +} \ No newline at end of file diff --git a/src/assets/mesh/mark/inside/ptmhq/PTMHQ.gltf.manifest b/src/assets/mesh/mark/inside/ptmhq/PTMHQ.gltf.manifest new file mode 100644 index 0000000..1781cb5 --- /dev/null +++ b/src/assets/mesh/mark/inside/ptmhq/PTMHQ.gltf.manifest @@ -0,0 +1,5 @@ +{ + "version" : 1, + "enableSceneOffline" : true, + "enableTexturesOffline" : true +} \ No newline at end of file diff --git a/src/assets/mesh/mark/inside/syy/SYY.gltf.manifest b/src/assets/mesh/mark/inside/syy/SYY.gltf.manifest new file mode 100644 index 0000000..1781cb5 --- /dev/null +++ b/src/assets/mesh/mark/inside/syy/SYY.gltf.manifest @@ -0,0 +1,5 @@ +{ + "version" : 1, + "enableSceneOffline" : true, + "enableTexturesOffline" : true +} \ No newline at end of file diff --git a/src/assets/mesh/mark/inside/tcmhq/TCMHQ.gltf.manifest b/src/assets/mesh/mark/inside/tcmhq/TCMHQ.gltf.manifest new file mode 100644 index 0000000..1781cb5 --- /dev/null +++ b/src/assets/mesh/mark/inside/tcmhq/TCMHQ.gltf.manifest @@ -0,0 +1,5 @@ +{ + "version" : 1, + "enableSceneOffline" : true, + "enableTexturesOffline" : true +} \ No newline at end of file diff --git a/src/assets/mesh/mark/inside/xfsd/XFSD.gltf.manifest b/src/assets/mesh/mark/inside/xfsd/XFSD.gltf.manifest new file mode 100644 index 0000000..1781cb5 --- /dev/null +++ b/src/assets/mesh/mark/inside/xfsd/XFSD.gltf.manifest @@ -0,0 +1,5 @@ +{ + "version" : 1, + "enableSceneOffline" : true, + "enableTexturesOffline" : true +} \ No newline at end of file diff --git a/src/assets/mesh/mark/inside/xfsq/XFSQ.gltf.manifest b/src/assets/mesh/mark/inside/xfsq/XFSQ.gltf.manifest new file mode 100644 index 0000000..1781cb5 --- /dev/null +++ b/src/assets/mesh/mark/inside/xfsq/XFSQ.gltf.manifest @@ -0,0 +1,5 @@ +{ + "version" : 1, + "enableSceneOffline" : true, + "enableTexturesOffline" : true +} \ No newline at end of file diff --git a/src/assets/mesh/mark/inside/xyy/XYY.gltf.manifest b/src/assets/mesh/mark/inside/xyy/XYY.gltf.manifest new file mode 100644 index 0000000..1781cb5 --- /dev/null +++ b/src/assets/mesh/mark/inside/xyy/XYY.gltf.manifest @@ -0,0 +1,5 @@ +{ + "version" : 1, + "enableSceneOffline" : true, + "enableTexturesOffline" : true +} \ No newline at end of file diff --git a/src/assets/mesh/mark/inside/ygc/YGC.gltf.manifest b/src/assets/mesh/mark/inside/ygc/YGC.gltf.manifest new file mode 100644 index 0000000..1781cb5 --- /dev/null +++ b/src/assets/mesh/mark/inside/ygc/YGC.gltf.manifest @@ -0,0 +1,5 @@ +{ + "version" : 1, + "enableSceneOffline" : true, + "enableTexturesOffline" : true +} \ No newline at end of file diff --git a/src/assets/mesh/mark/inside/ygcsj/YGCSJ.gltf.manifest b/src/assets/mesh/mark/inside/ygcsj/YGCSJ.gltf.manifest new file mode 100644 index 0000000..1781cb5 --- /dev/null +++ b/src/assets/mesh/mark/inside/ygcsj/YGCSJ.gltf.manifest @@ -0,0 +1,5 @@ +{ + "version" : 1, + "enableSceneOffline" : true, + "enableTexturesOffline" : true +} \ No newline at end of file diff --git a/src/assets/mesh/mark/inside/yzzg/YZZG.gltf.manifest b/src/assets/mesh/mark/inside/yzzg/YZZG.gltf.manifest new file mode 100644 index 0000000..1781cb5 --- /dev/null +++ b/src/assets/mesh/mark/inside/yzzg/YZZG.gltf.manifest @@ -0,0 +1,5 @@ +{ + "version" : 1, + "enableSceneOffline" : true, + "enableTexturesOffline" : true +} \ No newline at end of file diff --git a/src/assets/mesh/mark/inside/zymbrq/ZYMBRQ.gltf.manifest b/src/assets/mesh/mark/inside/zymbrq/ZYMBRQ.gltf.manifest new file mode 100644 index 0000000..1781cb5 --- /dev/null +++ b/src/assets/mesh/mark/inside/zymbrq/ZYMBRQ.gltf.manifest @@ -0,0 +1,5 @@ +{ + "version" : 1, + "enableSceneOffline" : true, + "enableTexturesOffline" : true +} \ No newline at end of file diff --git a/src/assets/mesh/mark/outside/XFC/XFC.gltf.manifest b/src/assets/mesh/mark/outside/XFC/XFC.gltf.manifest new file mode 100644 index 0000000..1781cb5 --- /dev/null +++ b/src/assets/mesh/mark/outside/XFC/XFC.gltf.manifest @@ -0,0 +1,5 @@ +{ + "version" : 1, + "enableSceneOffline" : true, + "enableTexturesOffline" : true +} \ No newline at end of file diff --git a/src/assets/mesh/mark/outside/XFY/XFY.gltf.manifest b/src/assets/mesh/mark/outside/XFY/XFY.gltf.manifest new file mode 100644 index 0000000..1781cb5 --- /dev/null +++ b/src/assets/mesh/mark/outside/XFY/XFY.gltf.manifest @@ -0,0 +1,5 @@ +{ + "version" : 1, + "enableSceneOffline" : true, + "enableTexturesOffline" : true +} \ No newline at end of file