babyeditor-tool 0.0.8 → 0.0.10

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.
@@ -1 +1 @@
1
- {"version":3,"file":"MetaData.interface.d.ts","sourceRoot":"","sources":["../../../src/interfaces/MetaData.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAGzC,MAAM,WAAW,QAAQ;IAEvB,IAAI,CAAC,EAAE,MAAM,CAAA;IAEb,OAAO,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,CAAA;IAE/B,WAAW,CAAC,EAAE,OAAO,CAAA;IAErB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAElB,eAAe,CAAC,EAAE,MAAM,CAAA;IAExB,iBAAiB,CAAC,EAAE;QAClB,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;QACd,eAAe,EAAE,MAAM,CAAA;KACxB,CAAA;IAED,oBAAoB,CAAC,EAAE;QACrB,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,GAAG,EAAE,MAAM,CAAC;QACZ,eAAe,EAAE,MAAM,CAAA;KACxB,CAAA;IAED,sBAAsB,CAAC,EAAE;QACvB,WAAW,EAAE,MAAM,CAAA;QACnB,cAAc,EAAE,MAAM,CAAA;QACtB,MAAM,EAAE,MAAM,CAAA;QACd,YAAY,EAAE,MAAM,CAAA;QACpB,YAAY,EAAE,MAAM,CAAA;QACpB,GAAG,EAAE,MAAM,CAAA;QACX,eAAe,EAAE,MAAM,CAAA;KACxB,CAAA;IAED,0BAA0B,CAAC,EAAE;QAC3B,KAAK,EAAE,OAAO,EAAE,CAAC;QACjB,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;QACd,eAAe,EAAE,MAAM,CAAA;KACxB,CAAA;IACD,wBAAwB,CAAC,EAAE;QACzB,GAAG,EAAE,MAAM,CAAA;KACZ,CAAA;CACF"}
1
+ {"version":3,"file":"MetaData.interface.d.ts","sourceRoot":"","sources":["../../../src/interfaces/MetaData.interface.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,31 @@
1
- import { Scene, TransformNode } from "@babylonjs/core";
1
+ import { MetaData } from "../interfaces/MetaData.interface";
2
+ import { Scene, TransformNode, Camera } from "@babylonjs/core";
2
3
  import { IScript } from "./SceneLoader";
4
+ import { MapViewer } from "./map/MapViewer";
3
5
  export declare class CustomSystem {
4
6
  scene: Scene;
5
7
  private scriptInstanceList;
6
- constructor(scene: Scene, scriptInstanceList?: IScript[]);
7
- load(): void;
8
+ mapViewers: MapViewer[];
9
+ constructor(scene: Scene, scriptInstanceList?: IScript[], environment?: string);
10
+ load(environment?: string): void;
11
+ applyCameraBehavior(camera: Camera): void;
12
+ /**
13
+ * 加载外部资源模型
14
+ * @param parentNode 父对象
15
+ * @param url 模型地址
16
+ * @param scene 场景
17
+ */
8
18
  static LoadAssetModel(parentNode: TransformNode, url: string, scene: Scene): Promise<void>;
19
+ /**
20
+ * 创建地图查看器
21
+ * @param parentNode 父对象
22
+ * @param metaData 元数据
23
+ */
24
+ createMapViewer(parentNode: TransformNode, metaData: MetaData): MapViewer;
25
+ /**
26
+ * 根据ID获取地图查看器
27
+ * @param id 地图查看器ID
28
+ */
29
+ getMapViewerById(id: string): MapViewer | undefined;
9
30
  }
10
31
  //# sourceMappingURL=CustomSystem.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CustomSystem.d.ts","sourceRoot":"","sources":["../../../src/tool/CustomSystem.ts"],"names":[],"mappings":"AACA,OAAO,EAAmB,KAAK,EAAE,aAAa,EAAwC,MAAM,iBAAiB,CAAC;AAC9G,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,qBAAa,YAAY;IACH,KAAK,EAAE,KAAK;IAAE,OAAO,CAAC,kBAAkB;gBAAxC,KAAK,EAAE,KAAK,EAAU,kBAAkB,GAAE,OAAO,EAAO;IAI5E,IAAI;WAoBS,cAAc,CAAE,UAAU,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK;CAgBlF"}
1
+ {"version":3,"file":"CustomSystem.d.ts","sourceRoot":"","sources":["../../../src/tool/CustomSystem.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AAC5D,OAAO,EAAmB,KAAK,EAAE,aAAa,EAAuH,MAAM,EAAkB,MAAM,iBAAiB,CAAC;AACrN,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,qBAAa,YAAY;IAEH,KAAK,EAAE,KAAK;IAAE,OAAO,CAAC,kBAAkB;IAD5D,UAAU,EAAE,SAAS,EAAE,CAAK;gBACR,KAAK,EAAE,KAAK,EAAU,kBAAkB,GAAE,OAAO,EAAO,EAAE,WAAW,CAAC,EAAE,MAAM;IAIlG,IAAI,CAAE,WAAW,CAAC,EAAE,MAAM;IA4C1B,mBAAmB,CAAE,MAAM,EAAE,MAAM;IA2CnC;;;;;OAKG;WACU,cAAc,CAAE,UAAU,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK;IAiBjF;;;;OAIG;IACH,eAAe,CAAE,UAAU,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ;IAoB9D;;;OAGG;IACH,gBAAgB,CAAE,EAAE,EAAE,MAAM;CAG7B"}
@@ -1,11 +1,13 @@
1
- import { ImportMeshAsync, Node, Mesh } from "@babylonjs/core";
1
+ import { ImportMeshAsync, Node, AbstractMesh, ArcRotateCamera, HDRCubeTexture } from "@babylonjs/core";
2
+ import { MapViewer } from "./map/MapViewer";
2
3
  export class CustomSystem {
3
- constructor(scene, scriptInstanceList = []) {
4
+ constructor(scene, scriptInstanceList = [], environment) {
4
5
  this.scene = scene;
5
6
  this.scriptInstanceList = scriptInstanceList;
6
- this.load();
7
+ this.mapViewers = [];
8
+ this.load(environment);
7
9
  }
8
- load() {
10
+ load(environment) {
9
11
  const transNodes = this.scene.transformNodes;
10
12
  for (let i = 0; i < transNodes.length; i++) {
11
13
  const transNode = transNodes[i];
@@ -20,15 +22,79 @@ export class CustomSystem {
20
22
  }
21
23
  });
22
24
  }
25
+ else if (metaData.meshBuilderType === 'mapViewer' && metaData.mapViewerBuilderOptions) {
26
+ this.createMapViewer(transNode, metaData);
27
+ }
28
+ }
29
+ }
30
+ const cameras = this.scene.cameras;
31
+ for (let i = 0; i < cameras.length; i++) {
32
+ const camera = cameras[i];
33
+ if (camera.metadata && environment !== 'editor') {
34
+ this.applyCameraBehavior(camera);
35
+ }
36
+ }
37
+ if (this.scene.environmentTexture) {
38
+ const url = this.scene.environmentTexture.url;
39
+ this.scene.environmentTexture = null;
40
+ setTimeout(() => {
41
+ try {
42
+ this.scene.environmentTexture = new HDRCubeTexture(url, this.scene, 256);
43
+ }
44
+ catch (error) {
45
+ console.error('加载环境纹理时出错', error);
46
+ }
47
+ }, 1000);
48
+ }
49
+ }
50
+ applyCameraBehavior(camera) {
51
+ const metaData = camera.metadata;
52
+ if (camera instanceof ArcRotateCamera && metaData) {
53
+ // 自动旋转行为
54
+ if (metaData.useAutoRotationBehavior && metaData.autoRotationBehavior) {
55
+ camera.useAutoRotationBehavior = true;
56
+ const autoRotationBehavior = camera.autoRotationBehavior;
57
+ if (autoRotationBehavior) {
58
+ autoRotationBehavior.zoomStopsAnimation = metaData.autoRotationBehavior.zoomStopsAnimation;
59
+ autoRotationBehavior.idleRotationSpeed = metaData.autoRotationBehavior.idleRotationSpeed;
60
+ autoRotationBehavior.idleRotationWaitTime = metaData.autoRotationBehavior.idleRotationWaitTime;
61
+ }
62
+ }
63
+ // 自动抬回视角行为
64
+ if (metaData.useFramingBehavior && metaData.framingBehavior) {
65
+ camera.useFramingBehavior = true;
66
+ const framingBehavior = camera.framingBehavior;
67
+ if (framingBehavior) {
68
+ framingBehavior.zoomStopsAnimation = metaData.framingBehavior.zoomStopsAnimation;
69
+ framingBehavior.defaultElevation = metaData.framingBehavior.defaultElevation;
70
+ framingBehavior.elevationReturnTime = metaData.framingBehavior.elevationReturnTime;
71
+ framingBehavior.elevationReturnWaitTime = metaData.framingBehavior.elevationReturnWaitTime;
72
+ framingBehavior.framingTime = metaData.framingBehavior.framingTime;
73
+ }
74
+ }
75
+ // 视野反弹行为
76
+ if (metaData.useBouncingBehavior && metaData.bouncingBehavior) {
77
+ camera.useBouncingBehavior = true;
78
+ if (camera.bouncingBehavior) {
79
+ camera.bouncingBehavior.autoTransitionRange = metaData.bouncingBehavior.autoTransitionRange || false;
80
+ camera.bouncingBehavior.lowerRadiusTransitionRange = metaData.bouncingBehavior.lowerRadiusTransitionRange || 2;
81
+ camera.bouncingBehavior.upperRadiusTransitionRange = metaData.bouncingBehavior.upperRadiusTransitionRange || -2;
82
+ }
23
83
  }
24
84
  }
25
85
  }
86
+ /**
87
+ * 加载外部资源模型
88
+ * @param parentNode 父对象
89
+ * @param url 模型地址
90
+ * @param scene 场景
91
+ */
26
92
  static async LoadAssetModel(parentNode, url, scene) {
27
93
  const applyMetaData = (node) => {
28
94
  if (node instanceof Node && !node.parent) {
29
95
  node.parent = parentNode;
30
96
  }
31
- if (node instanceof Mesh && node.material) {
97
+ if (node instanceof AbstractMesh && node.material) {
32
98
  node.material.doNotSerialize = true;
33
99
  }
34
100
  node.doNotSerialize = true;
@@ -39,4 +105,30 @@ export class CustomSystem {
39
105
  lights.forEach(node => applyMetaData(node));
40
106
  skeletons.forEach(node => applyMetaData(node));
41
107
  }
108
+ /**
109
+ * 创建地图查看器
110
+ * @param parentNode 父对象
111
+ * @param metaData 元数据
112
+ */
113
+ createMapViewer(parentNode, metaData) {
114
+ const mapViewer = new MapViewer({
115
+ id: metaData.mapViewerBuilderOptions?.id,
116
+ viewWidth: metaData.mapViewerBuilderOptions?.viewWidth,
117
+ bbox: [metaData.mapViewerBuilderOptions?.minX || -180, metaData.mapViewerBuilderOptions?.minY || -90, metaData.mapViewerBuilderOptions?.maxX || 180, metaData.mapViewerBuilderOptions?.maxY || 90],
118
+ }, this.scene);
119
+ parentNode.onDisposeObservable.addOnce(() => {
120
+ mapViewer.dispose();
121
+ this.mapViewers = this.mapViewers.filter(item => item !== mapViewer);
122
+ });
123
+ mapViewer.rootNode.parent = parentNode;
124
+ this.mapViewers.push(mapViewer);
125
+ return mapViewer;
126
+ }
127
+ /**
128
+ * 根据ID获取地图查看器
129
+ * @param id 地图查看器ID
130
+ */
131
+ getMapViewerById(id) {
132
+ return this.mapViewers.find(item => item.id === id);
133
+ }
42
134
  }
@@ -1,8 +1,9 @@
1
- import { Engine, Scene, Node } from "@babylonjs/core";
1
+ import { Engine, Scene, Nullable, Node, Observable, Camera } from "@babylonjs/core";
2
2
  import '@babylonjs/materials';
3
3
  import '@babylonjs/loaders';
4
4
  import '@babylonjs/post-processes';
5
5
  import '@babylonjs/procedural-textures';
6
+ import { CameraAnchor } from "../interfaces/MetaData.interface";
6
7
  /**
7
8
  * 脚本接口
8
9
  */
@@ -25,6 +26,11 @@ export interface BehaviorScript {
25
26
  key: string;
26
27
  values: IStringDictionary<any>;
27
28
  }
29
+ export interface SceneLoaderOption {
30
+ showLoadingUI?: boolean;
31
+ environment?: string;
32
+ }
33
+ export type EventType = 'click' | 'dblclick' | 'pointerdown' | 'pointerup' | 'pointermove';
28
34
  /**
29
35
  * 运行场景加载的核心类
30
36
  * @description 在这里创建初始化场景所需要的一切的东西
@@ -54,17 +60,35 @@ export declare class SceneLoader {
54
60
  * 脚本代码列表
55
61
  */
56
62
  scriptsMap: ScriptsMap;
63
+ /**
64
+ * 场景加载完成观察者
65
+ */
66
+ onLoadObservable: Observable<Scene>;
67
+ /**
68
+ * 场景加载选项
69
+ */
70
+ option: SceneLoaderOption;
57
71
  /**
58
72
  * 脚本实例列表
59
73
  */
60
74
  private scriptInstanceList;
75
+ /**
76
+ * 事件系统
77
+ */
78
+ private eventsSystem;
61
79
  /**
62
80
  * 构造函数
63
81
  * @param container 容器
64
82
  * @param sceneData 场景数据
65
83
  * @param scriptsMap 脚本代码列表
66
84
  */
67
- constructor(container: HTMLDivElement, sceneData: string, scriptsMap?: ScriptsMap);
85
+ constructor(container: HTMLDivElement, sceneData: string, scriptsMap?: ScriptsMap, option?: SceneLoaderOption);
86
+ /**
87
+ * 初始化事件系统
88
+ */
89
+ private initEvents;
90
+ on(eventName: EventType, callback: (event: any) => void): void;
91
+ off(eventName: EventType, callback: (event: any) => void): void;
68
92
  /**
69
93
  * 加载场景
70
94
  * @param sceneData 场景数据数据
@@ -87,6 +111,53 @@ export declare class SceneLoader {
87
111
  * 开始渲染循环
88
112
  */
89
113
  private render;
114
+ /**
115
+ * 根据名称获取节点
116
+ * @param name
117
+ * @returns
118
+ */
119
+ getNodeByName(name: string): Nullable<Node>;
120
+ getMeshByName(name: string): Nullable<import("@babylonjs/core").AbstractMesh>;
121
+ getLightByName(name: string): Nullable<import("@babylonjs/core").Light>;
122
+ getTransformNodeByName(name: string): Nullable<import("@babylonjs/core").TransformNode>;
123
+ getCameraByName(name: string): Nullable<Camera>;
124
+ /**
125
+ * 摄影机飞行到设置的位置锚点
126
+ * @param anchor 目标节点
127
+ * @param duration 飞行时间毫秒,ms
128
+ */
129
+ flyTo(anchor: CameraAnchor, duration?: number): Promise<void>;
130
+ /**
131
+ * 摄影机直接定位到设置的位置锚点
132
+ * @param anchor 目标节点
133
+ * @param camera 指定查看摄影机
134
+ */
135
+ viewTo(anchor: CameraAnchor): void;
136
+ /**
137
+ * 根据名称摄影机飞行到设置的锚点
138
+ * @param name 摄影机锚点名称
139
+ * @param duration 飞行时间毫秒,ms
140
+ */
141
+ flyToAnchorByName(name: string, duration?: number): Promise<void>;
142
+ /**
143
+ * 根据名称摄影机飞行到设置的锚点
144
+ * @param name 摄影机锚点名称
145
+ * @param duration 飞行时间毫秒,ms
146
+ */
147
+ flyToAnchorByIndex(index: number, duration?: number): Promise<void>;
148
+ /**
149
+ * 摄影机飞行到
150
+ * @param anchor 目标节点
151
+ * @param duration 飞行时间毫秒,ms
152
+ * @param camera 指定飞行摄影机
153
+ */
154
+ static FlyTo(camera: Camera, anchor: CameraAnchor, duration?: number): Promise<void>;
155
+ /**
156
+ * 摄影机定位到
157
+ * @param anchor 目标节点
158
+ * @param camera 指定查看摄影机
159
+ */
160
+ static ViewTo(camera: Camera, anchor: CameraAnchor): void;
90
161
  /**
91
162
  * 重置canvas变形后的系统尺寸
92
163
  */
@@ -97,7 +168,7 @@ export declare class SceneLoader {
97
168
  */
98
169
  static LoadCustomSystem(): void;
99
170
  }
100
- export declare function loadScene(container: HTMLDivElement, sceneData: string, scriptsMap?: ScriptsMap): SceneLoader;
171
+ export declare function loadScene(container: HTMLDivElement, sceneData: string, scriptsMap?: ScriptsMap, option?: SceneLoaderOption): SceneLoader;
101
172
  /**
102
173
  * 脚本代码结构
103
174
  */
@@ -1 +1 @@
1
- {"version":3,"file":"SceneLoader.d.ts","sourceRoot":"","sources":["../../../src/tool/SceneLoader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAsF,IAAI,EAAiB,MAAM,iBAAiB,CAAC;AACzJ,OAAO,sBAAsB,CAAA;AAC7B,OAAO,oBAAoB,CAAA;AAC3B,OAAO,2BAA2B,CAAA;AAClC,OAAO,gCAAgC,CAAA;AAIvC;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;CACrC;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB,CAAC,CAAC;IAClC,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAE7B,IAAI,EAAE,QAAQ,CAAC;IAEf,QAAQ,EAAE,OAAO,CAAC;IAElB,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB,GAAG,EAAE,MAAM,CAAC;IAEZ,MAAM,EAAE,iBAAiB,CAAC,GAAG,CAAC,CAAA;CAC/B;AAED;;;GAGG;AACH,qBAAa,WAAW;IACtB;;OAEG;IACH,SAAS,EAAE,WAAW,CAAA;IACtB;;OAEG;IACH,MAAM,EAAE,iBAAiB,CAAA;IACzB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAA;IACd;;OAEG;IACH,KAAK,EAAE,KAAK,CAAA;IACZ;;OAEG;IACH,SAAS,EAAE,MAAM,CAAK;IACtB;;OAEG;IACH,UAAU,EAAE,UAAU,CAAK;IAC3B;;OAEG;IACH,OAAO,CAAC,kBAAkB,CAAgB;IAC1C;;;;;OAKG;gBACS,SAAS,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,UAAU;IAajF;;;;OAIG;IACG,IAAI,CAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,UAAU;IA4CtD;;OAEG;IACH,OAAO,CAAC,WAAW;IAoBnB;;;;;;OAMG;IACH,OAAO,CAAC,SAAS;IA4BjB;;OAEG;IACH,OAAO,CAAC,MAAM;IAOd;;OAEG;IACH,MAAM;IAIN,OAAO;IAKP;;OAEG;IACH,MAAM,CAAC,gBAAgB;CACxB;AAED,wBAAgB,SAAS,CAAE,SAAS,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,GAAE,UAAe,eAInG;AAED;;GAEG;AACH,MAAM,MAAM,OAAO,GAAG;IACpB;;OAEG;IACH,KAAK,EAAE,KAAK,CAAC;IACb;;OAEG;IACH,IAAI,EAAE,IAAI,GAAG,KAAK,CAAC;IACnB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;IACnB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;IACnB;;;OAGG;IACH,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB,CAAA"}
1
+ {"version":3,"file":"SceneLoader.d.ts","sourceRoot":"","sources":["../../../src/tool/SceneLoader.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { Engine, Scene, FreeCamera, Vector3, HavokPlugin, AppendSceneAsync } from "@babylonjs/core";
1
+ import { Engine, Scene, FreeCamera, Vector3, HavokPlugin, AppendSceneAsync, Observable, EasingFunction, QuadraticEase, ArcRotateCamera, TargetCamera, PointerEventTypes } from "@babylonjs/core";
2
2
  import '@babylonjs/materials';
3
3
  import '@babylonjs/loaders';
4
4
  import '@babylonjs/post-processes';
@@ -16,7 +16,7 @@ export class SceneLoader {
16
16
  * @param sceneData 场景数据
17
17
  * @param scriptsMap 脚本代码列表
18
18
  */
19
- constructor(container, sceneData, scriptsMap) {
19
+ constructor(container, sceneData, scriptsMap, option = {}) {
20
20
  /**
21
21
  * 场景数据
22
22
  */
@@ -25,20 +25,92 @@ export class SceneLoader {
25
25
  * 脚本代码列表
26
26
  */
27
27
  this.scriptsMap = {};
28
+ /**
29
+ * 场景加载完成观察者
30
+ */
31
+ this.onLoadObservable = new Observable();
32
+ /**
33
+ * 场景加载选项
34
+ */
35
+ this.option = {};
28
36
  /**
29
37
  * 脚本实例列表
30
38
  */
31
39
  this.scriptInstanceList = [];
40
+ /**
41
+ * 事件系统
42
+ */
43
+ this.eventsSystem = {
44
+ click: [],
45
+ dblclick: [],
46
+ pointerdown: [],
47
+ pointerup: [],
48
+ pointermove: [],
49
+ };
32
50
  this.container = container;
33
51
  this.canvas = document.createElement('canvas');
34
52
  this.canvas.className = 'main-display-canvas';
35
53
  this.canvas.width = container.clientWidth;
36
54
  this.canvas.height = container.clientHeight;
37
55
  this.container.appendChild(this.canvas);
38
- this.engine = new Engine(this.canvas, true);
56
+ this.engine = new Engine(this.canvas, true, {
57
+ adaptToDeviceRatio: true,
58
+ antialias: true,
59
+ stencil: true,
60
+ preserveDrawingBuffer: true,
61
+ alpha: false
62
+ });
39
63
  this.scene = new Scene(this.engine);
64
+ this.option = {
65
+ showLoadingUI: true,
66
+ ...option
67
+ };
68
+ // 监听容器尺寸变化
69
+ const resizeObserver = new ResizeObserver(() => {
70
+ this.canvas.width = container.clientWidth;
71
+ this.canvas.height = container.clientHeight;
72
+ this.engine.resize();
73
+ });
74
+ resizeObserver.observe(container);
40
75
  this.load(sceneData, scriptsMap);
41
76
  }
77
+ /**
78
+ * 初始化事件系统
79
+ */
80
+ initEvents() {
81
+ let lastClickTime = 0;
82
+ this.scene.onPointerObservable.add((pointerInfo) => {
83
+ switch (pointerInfo.type) {
84
+ case PointerEventTypes.POINTERDOWN: // POINTERDOWN
85
+ const clickTime = Date.now();
86
+ if (clickTime - lastClickTime < 300) {
87
+ this.eventsSystem.dblclick.forEach(callback => callback(pointerInfo));
88
+ }
89
+ else {
90
+ lastClickTime = clickTime;
91
+ this.eventsSystem.click.forEach(callback => callback(pointerInfo));
92
+ }
93
+ this.eventsSystem.pointerdown.forEach(callback => callback(pointerInfo));
94
+ break;
95
+ case PointerEventTypes.POINTERUP: // POINTERUP
96
+ this.eventsSystem.pointerup.forEach(callback => callback(pointerInfo));
97
+ break;
98
+ case PointerEventTypes.POINTERMOVE: // POINTERMOVE
99
+ this.eventsSystem.pointermove.forEach(callback => callback(pointerInfo));
100
+ break;
101
+ }
102
+ });
103
+ }
104
+ // 绑定事件
105
+ on(eventName, callback) {
106
+ if (this.eventsSystem[eventName])
107
+ this.eventsSystem[eventName].push(callback);
108
+ }
109
+ // 解绑事件
110
+ off(eventName, callback) {
111
+ if (this.eventsSystem[eventName])
112
+ this.eventsSystem[eventName] = this.eventsSystem[eventName].filter(item => item !== callback);
113
+ }
42
114
  /**
43
115
  * 加载场景
44
116
  * @param sceneData 场景数据数据
@@ -53,6 +125,7 @@ export class SceneLoader {
53
125
  this.scene = new Scene(this.engine);
54
126
  this.sceneData = sceneData;
55
127
  this.scriptInstanceList = [];
128
+ this.initEvents();
56
129
  // 执行更新代码
57
130
  this.scene.onBeforeRenderObservable.add(() => {
58
131
  if (this.scriptInstanceList) {
@@ -68,6 +141,8 @@ export class SceneLoader {
68
141
  const havokModule = await HavokPhysics();
69
142
  this.scene.enablePhysics(new Vector3(0, -9.81, 0), new HavokPlugin(true, havokModule));
70
143
  await AppendSceneAsync('data:' + sceneData, this.scene);
144
+ if (!this.option.showLoadingUI)
145
+ this.engine.hideLoadingUI();
71
146
  let camera;
72
147
  if (this.scene.cameras.length === 0) {
73
148
  camera = new FreeCamera('摄影机', new Vector3(50, 50, 50), this.scene, true);
@@ -81,8 +156,9 @@ export class SceneLoader {
81
156
  if (scriptsMap)
82
157
  this.initScripts(scriptsMap);
83
158
  console.log('完成场景初始化');
84
- new CustomSystem(this.scene, this.scriptInstanceList);
159
+ new CustomSystem(this.scene, this.scriptInstanceList, this.option.environment);
85
160
  this.render();
161
+ this.onLoadObservable.notifyObservers(this.scene);
86
162
  }
87
163
  /**
88
164
  * 初始化脚本
@@ -144,6 +220,173 @@ export class SceneLoader {
144
220
  scene.render();
145
221
  });
146
222
  }
223
+ /**
224
+ * 根据名称获取节点
225
+ * @param name
226
+ * @returns
227
+ */
228
+ getNodeByName(name) {
229
+ return this.scene.getNodeByName(name);
230
+ }
231
+ getMeshByName(name) {
232
+ return this.scene.getMeshByName(name);
233
+ }
234
+ getLightByName(name) {
235
+ return this.scene.getLightByName(name);
236
+ }
237
+ getTransformNodeByName(name) {
238
+ return this.scene.getTransformNodeByName(name);
239
+ }
240
+ getCameraByName(name) {
241
+ return this.scene.getCameraByName(name);
242
+ }
243
+ /**
244
+ * 摄影机飞行到设置的位置锚点
245
+ * @param anchor 目标节点
246
+ * @param duration 飞行时间毫秒,ms
247
+ */
248
+ flyTo(anchor, duration = 2000) {
249
+ if (this.scene.activeCamera) {
250
+ return SceneLoader.FlyTo(this.scene.activeCamera, anchor, duration);
251
+ }
252
+ return Promise.resolve();
253
+ }
254
+ /**
255
+ * 摄影机直接定位到设置的位置锚点
256
+ * @param anchor 目标节点
257
+ * @param camera 指定查看摄影机
258
+ */
259
+ viewTo(anchor) {
260
+ if (this.scene.activeCamera) {
261
+ SceneLoader.ViewTo(this.scene.activeCamera, anchor);
262
+ }
263
+ }
264
+ /**
265
+ * 根据名称摄影机飞行到设置的锚点
266
+ * @param name 摄影机锚点名称
267
+ * @param duration 飞行时间毫秒,ms
268
+ */
269
+ flyToAnchorByName(name, duration = 2000) {
270
+ const camera = this.scene.activeCamera;
271
+ if (camera) {
272
+ const anchorList = camera.metadata?.cameraAnchorList || [];
273
+ const anchor = anchorList.find(item => item.name === name);
274
+ if (anchor) {
275
+ return SceneLoader.FlyTo(camera, anchor, duration);
276
+ }
277
+ }
278
+ return Promise.resolve();
279
+ }
280
+ /**
281
+ * 根据名称摄影机飞行到设置的锚点
282
+ * @param name 摄影机锚点名称
283
+ * @param duration 飞行时间毫秒,ms
284
+ */
285
+ flyToAnchorByIndex(index, duration = 2000) {
286
+ const camera = this.scene.activeCamera;
287
+ if (camera) {
288
+ const anchorList = camera.metadata?.cameraAnchorList || [];
289
+ const anchor = anchorList[index];
290
+ if (anchor) {
291
+ return SceneLoader.FlyTo(camera, anchor, duration);
292
+ }
293
+ }
294
+ return Promise.resolve();
295
+ }
296
+ /**
297
+ * 摄影机飞行到
298
+ * @param anchor 目标节点
299
+ * @param duration 飞行时间毫秒,ms
300
+ * @param camera 指定飞行摄影机
301
+ */
302
+ static FlyTo(camera, anchor, duration = 2000) {
303
+ return new Promise((resolve, reject) => {
304
+ const easeFunction = new QuadraticEase();
305
+ easeFunction.setEasingMode(EasingFunction.EASINGMODE_EASEOUT);
306
+ const startTime = Date.now();
307
+ const currentAnchor = {
308
+ name: '锚点3',
309
+ position: camera.position.asArray(),
310
+ target: [0, 0, 0],
311
+ radius: 0,
312
+ alpha: 0,
313
+ beta: 0
314
+ };
315
+ if (camera instanceof ArcRotateCamera) {
316
+ currentAnchor.radius = camera.radius;
317
+ currentAnchor.alpha = camera.alpha % (2 * Math.PI);
318
+ currentAnchor.beta = camera.beta % (Math.PI);
319
+ currentAnchor.target = camera.target.asArray();
320
+ if (Math.abs(currentAnchor.alpha - anchor.alpha) > Math.PI) {
321
+ if (anchor.alpha > currentAnchor.alpha) {
322
+ anchor.alpha -= 2 * Math.PI;
323
+ }
324
+ else {
325
+ anchor.alpha += 2 * Math.PI;
326
+ }
327
+ }
328
+ }
329
+ if (camera instanceof TargetCamera) {
330
+ currentAnchor.target = camera.target.asArray();
331
+ }
332
+ const getLinearValue = (start, end, val) => {
333
+ return start + (end - start) * val;
334
+ };
335
+ const animate = () => {
336
+ const elapsedTime = Date.now() - startTime;
337
+ const val = easeFunction.ease(elapsedTime / duration);
338
+ if (elapsedTime < duration) {
339
+ requestAnimationFrame(animate);
340
+ }
341
+ if (camera instanceof ArcRotateCamera) {
342
+ camera.radius = getLinearValue(currentAnchor.radius, anchor.radius, val);
343
+ camera.alpha = getLinearValue(currentAnchor.alpha, anchor.alpha, val);
344
+ camera.beta = getLinearValue(currentAnchor.beta, anchor.beta, val);
345
+ const x = getLinearValue(currentAnchor.target[0], anchor.target[0], val);
346
+ const y = getLinearValue(currentAnchor.target[1], anchor.target[1], val);
347
+ const z = getLinearValue(currentAnchor.target[2], anchor.target[2], val);
348
+ camera.target.x = x;
349
+ camera.target.y = y;
350
+ camera.target.z = z;
351
+ }
352
+ else if (camera instanceof TargetCamera) {
353
+ const px = getLinearValue(currentAnchor.position[0], anchor.position[0], val);
354
+ const py = getLinearValue(currentAnchor.position[1], anchor.position[1], val);
355
+ const pz = getLinearValue(currentAnchor.position[2], anchor.position[2], val);
356
+ camera.position = new Vector3(px, py, pz);
357
+ const x = getLinearValue(currentAnchor.target[0], anchor.target[0], val);
358
+ const y = getLinearValue(currentAnchor.target[1], anchor.target[1], val);
359
+ const z = getLinearValue(currentAnchor.target[2], anchor.target[2], val);
360
+ camera.target.x = x;
361
+ camera.target.y = y;
362
+ camera.target.z = z;
363
+ }
364
+ if (elapsedTime >= duration) {
365
+ resolve();
366
+ }
367
+ };
368
+ animate();
369
+ });
370
+ }
371
+ /**
372
+ * 摄影机定位到
373
+ * @param anchor 目标节点
374
+ * @param camera 指定查看摄影机
375
+ */
376
+ static ViewTo(camera, anchor) {
377
+ let activeCamera = camera;
378
+ if (activeCamera) {
379
+ activeCamera.position = new Vector3(anchor.position[0], anchor.position[1], anchor.position[2]);
380
+ if (activeCamera instanceof ArcRotateCamera) {
381
+ activeCamera.radius = anchor.radius;
382
+ activeCamera.alpha = anchor.alpha;
383
+ activeCamera.beta = anchor.beta;
384
+ }
385
+ else if (activeCamera instanceof TargetCamera) {
386
+ activeCamera.setTarget(new Vector3(anchor.target[0], anchor.target[1], anchor.target[2]));
387
+ }
388
+ }
389
+ }
147
390
  /**
148
391
  * 重置canvas变形后的系统尺寸
149
392
  */
@@ -159,7 +402,7 @@ export class SceneLoader {
159
402
  */
160
403
  static LoadCustomSystem() { }
161
404
  }
162
- export function loadScene(container, sceneData, scriptsMap = {}) {
163
- const sceneLoader = new SceneLoader(container, sceneData, scriptsMap);
405
+ export function loadScene(container, sceneData, scriptsMap = {}, option) {
406
+ const sceneLoader = new SceneLoader(container, sceneData, scriptsMap, option);
164
407
  return sceneLoader;
165
408
  }
@@ -0,0 +1,37 @@
1
+ import { Scene, TransformNode } from "@babylonjs/core";
2
+ export declare class Layer {
3
+ /**
4
+ * 图层根节点
5
+ */
6
+ layerRootNode: TransformNode;
7
+ /**
8
+ * 图层名称
9
+ */
10
+ name: string;
11
+ constructor(name: string, scene: Scene);
12
+ /**
13
+ * 获取图层是否启用
14
+ */
15
+ get isEnabled(): boolean;
16
+ /**
17
+ * 设置图层是否启用
18
+ * @param enabled 是否启用
19
+ */
20
+ set isEnabled(enabled: boolean);
21
+ /**
22
+ * 当图层启用状态改变时触发
23
+ * @param observers 观察者
24
+ */
25
+ get onEnabledStateChanged(): import("@babylonjs/core").Observable<boolean>;
26
+ /**
27
+ * 设置图层是否启用
28
+ * @param enabled 是否启用
29
+ */
30
+ setEnabled(enabled: boolean): void;
31
+ /**
32
+ * 释放图层
33
+ */
34
+ dispose(): void;
35
+ onDisposeObservable(observers: () => void): import("@babylonjs/core").Observer<import("@babylonjs/core").Node>;
36
+ }
37
+ //# sourceMappingURL=Layer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Layer.d.ts","sourceRoot":"","sources":["../../../../src/tool/map/Layer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEvD,qBAAa,KAAK;IAChB;;OAEG;IACH,aAAa,EAAE,aAAa,CAAA;IAC5B;;OAEG;IACH,IAAI,EAAE,MAAM,CAAM;gBAEN,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK;IAOtC;;OAEG;IACH,IAAI,SAAS,IAQW,OAAO,CAN9B;IAED;;;OAGG;IACH,IAAI,SAAS,CAAE,OAAO,EAAE,OAAO,EAE9B;IAED;;;OAGG;IACH,IAAI,qBAAqB,kDAExB;IAED;;;OAGG;IACH,UAAU,CAAC,OAAO,EAAE,OAAO;IAI3B;;OAEG;IACH,OAAO;IAIP,mBAAmB,CAAE,SAAS,EAAE,MAAM,IAAI;CAG3C"}