@needle-tools/engine 2.52.0-pre → 2.54.2-pre

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.
Files changed (220) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/dist/needle-engine.d.ts +3018 -2680
  3. package/dist/needle-engine.js +439 -439
  4. package/dist/needle-engine.js.map +4 -4
  5. package/dist/needle-engine.min.js +41 -41
  6. package/dist/needle-engine.min.js.map +4 -4
  7. package/dist/needle-engine.tsbuildinfo +1 -0
  8. package/lib/engine/codegen/register_types.d.ts +1 -0
  9. package/lib/engine/codegen/register_types.js +346 -0
  10. package/lib/engine/codegen/register_types.js.map +1 -0
  11. package/lib/engine/debug/debug.d.ts +1 -0
  12. package/lib/engine/debug/debug.js +4 -0
  13. package/lib/engine/debug/debug.js.map +1 -1
  14. package/lib/engine/debug/debug_console.js +2 -1
  15. package/lib/engine/debug/debug_console.js.map +1 -1
  16. package/lib/engine/debug/debug_overlay.js +3 -1
  17. package/lib/engine/debug/debug_overlay.js.map +1 -1
  18. package/lib/engine/engine_components.js +2 -2
  19. package/lib/engine/engine_components.js.map +1 -1
  20. package/lib/engine/engine_default_parameters.d.ts +2 -2
  21. package/lib/engine/engine_element.js +4 -2
  22. package/lib/engine/engine_element.js.map +1 -1
  23. package/lib/engine/engine_element_loading.d.ts +1 -0
  24. package/lib/engine/engine_element_loading.js +17 -6
  25. package/lib/engine/engine_element_loading.js.map +1 -1
  26. package/lib/engine/engine_element_overlay.js +4 -2
  27. package/lib/engine/engine_element_overlay.js.map +1 -1
  28. package/lib/engine/engine_fileloader.d.ts +3 -0
  29. package/lib/engine/engine_fileloader.js +8 -0
  30. package/lib/engine/engine_fileloader.js.map +1 -0
  31. package/lib/engine/engine_generic_utils.d.ts +1 -0
  32. package/lib/engine/engine_generic_utils.js +14 -0
  33. package/lib/engine/engine_generic_utils.js.map +1 -0
  34. package/lib/engine/engine_input.js +4 -0
  35. package/lib/engine/engine_input.js.map +1 -1
  36. package/lib/engine/engine_networking_instantiate.d.ts +1 -1
  37. package/lib/engine/engine_networking_instantiate.js +3 -0
  38. package/lib/engine/engine_networking_instantiate.js.map +1 -1
  39. package/lib/engine/engine_networking_websocket.d.ts +1 -0
  40. package/lib/engine/engine_networking_websocket.js +1 -1
  41. package/lib/engine/engine_networking_websocket.js.map +1 -1
  42. package/lib/engine/engine_serialization_builtin_serializer.d.ts +6 -0
  43. package/lib/engine/engine_serialization_builtin_serializer.js +35 -7
  44. package/lib/engine/engine_serialization_builtin_serializer.js.map +1 -1
  45. package/lib/engine/engine_serialization_core.d.ts +1 -0
  46. package/lib/engine/engine_serialization_core.js +6 -0
  47. package/lib/engine/engine_serialization_core.js.map +1 -1
  48. package/lib/engine/engine_setup.js +2 -2
  49. package/lib/engine/engine_setup.js.map +1 -1
  50. package/lib/engine/engine_texture.d.ts +3 -0
  51. package/lib/engine/engine_texture.js +4 -0
  52. package/lib/engine/engine_texture.js.map +1 -0
  53. package/lib/engine/engine_utils.d.ts +1 -1
  54. package/lib/engine/engine_utils.js +3 -0
  55. package/lib/engine/engine_utils.js.map +1 -1
  56. package/lib/engine/extensions/NEEDLE_components.d.ts +1 -1
  57. package/lib/engine/extensions/NEEDLE_progressive.d.ts +40 -0
  58. package/lib/engine/extensions/NEEDLE_progressive.js +322 -0
  59. package/lib/engine/extensions/NEEDLE_progressive.js.map +1 -0
  60. package/lib/engine/extensions/extensions.js +2 -2
  61. package/lib/engine/extensions/extensions.js.map +1 -1
  62. package/lib/engine-components/Camera.js +17 -2
  63. package/lib/engine-components/Camera.js.map +1 -1
  64. package/lib/engine-components/GroundProjection.d.ts +2 -1
  65. package/lib/engine-components/GroundProjection.js +19 -12
  66. package/lib/engine-components/GroundProjection.js.map +1 -1
  67. package/lib/engine-components/Light.js +1 -0
  68. package/lib/engine-components/Light.js.map +1 -1
  69. package/lib/engine-components/OrbitControls.js +6 -2
  70. package/lib/engine-components/OrbitControls.js.map +1 -1
  71. package/lib/engine-components/ParticleSystemModules.d.ts +1 -1
  72. package/lib/engine-components/ParticleSystemModules.js +48 -44
  73. package/lib/engine-components/ParticleSystemModules.js.map +1 -1
  74. package/lib/engine-components/ReflectionProbe.d.ts +1 -1
  75. package/lib/engine-components/Renderer.d.ts +1 -1
  76. package/lib/engine-components/Renderer.js +4 -9
  77. package/lib/engine-components/Renderer.js.map +1 -1
  78. package/lib/engine-components/Voip.js +13 -4
  79. package/lib/engine-components/Voip.js.map +1 -1
  80. package/lib/engine-components/Volume.js +8 -1
  81. package/lib/engine-components/Volume.js.map +1 -1
  82. package/lib/engine-components/WebXR.d.ts +2 -2
  83. package/lib/engine-components/WebXRAvatar.d.ts +1 -1
  84. package/lib/engine-components/codegen/components.d.ts +99 -95
  85. package/lib/engine-components/codegen/components.js +99 -95
  86. package/lib/engine-components/codegen/components.js.map +1 -1
  87. package/lib/engine-components/export/{GltfExport.d.ts → gltf/GltfExport.d.ts} +2 -2
  88. package/lib/engine-components/export/{GltfExport.js → gltf/GltfExport.js} +7 -7
  89. package/lib/engine-components/export/gltf/GltfExport.js.map +1 -0
  90. package/lib/engine-components/export/usdz/Extension.d.ts +9 -0
  91. package/lib/engine-components/export/usdz/Extension.js +2 -0
  92. package/lib/engine-components/export/usdz/Extension.js.map +1 -0
  93. package/lib/engine-components/export/usdz/USDZExporter.d.ts +26 -0
  94. package/lib/engine-components/export/usdz/USDZExporter.js +209 -0
  95. package/lib/engine-components/export/usdz/USDZExporter.js.map +1 -0
  96. package/lib/engine-components/export/usdz/extensions/Animation.d.ts +44 -0
  97. package/lib/engine-components/export/usdz/extensions/Animation.js +264 -0
  98. package/lib/engine-components/export/usdz/extensions/Animation.js.map +1 -0
  99. package/lib/engine-components/export/usdz/types.d.ts +34 -0
  100. package/lib/engine-components/export/usdz/types.js +2 -0
  101. package/lib/engine-components/export/usdz/types.js.map +1 -0
  102. package/lib/engine-components/export/usdz/utils/animationutils.d.ts +3 -0
  103. package/lib/engine-components/export/usdz/utils/animationutils.js +46 -0
  104. package/lib/engine-components/export/usdz/utils/animationutils.js.map +1 -0
  105. package/lib/engine-components/export/usdz/utils/quicklook.d.ts +2 -0
  106. package/lib/engine-components/export/usdz/utils/quicklook.js +36 -0
  107. package/lib/engine-components/export/usdz/utils/quicklook.js.map +1 -0
  108. package/lib/engine-components/export/usdz/utils/timeutils.d.ts +1 -0
  109. package/lib/engine-components/export/usdz/utils/timeutils.js +15 -0
  110. package/lib/engine-components/export/usdz/utils/timeutils.js.map +1 -0
  111. package/lib/engine-components/ui/Button.js +30 -0
  112. package/lib/engine-components/ui/Button.js.map +1 -1
  113. package/lib/engine-components/ui/Graphic.d.ts +2 -0
  114. package/lib/engine-components/ui/Graphic.js +15 -0
  115. package/lib/engine-components/ui/Graphic.js.map +1 -1
  116. package/lib/engine-components/ui/InputField.d.ts +2 -0
  117. package/lib/engine-components/ui/InputField.js +23 -1
  118. package/lib/engine-components/ui/InputField.js.map +1 -1
  119. package/lib/engine-components/ui/Utils.d.ts +4 -1
  120. package/lib/engine-components/ui/Utils.js +15 -12
  121. package/lib/engine-components/ui/Utils.js.map +1 -1
  122. package/lib/engine-components-experimental/Presentation.d.ts +6 -0
  123. package/lib/engine-components-experimental/Presentation.js +11 -0
  124. package/lib/engine-components-experimental/Presentation.js.map +1 -0
  125. package/lib/engine-components-experimental/annotation/LineDrawer.d.ts +18 -0
  126. package/lib/engine-components-experimental/annotation/LineDrawer.js +175 -0
  127. package/lib/engine-components-experimental/annotation/LineDrawer.js.map +1 -0
  128. package/lib/engine-components-experimental/annotation/LinesManager.d.ts +54 -0
  129. package/lib/engine-components-experimental/annotation/LinesManager.js +155 -0
  130. package/lib/engine-components-experimental/annotation/LinesManager.js.map +1 -0
  131. package/lib/engine-components-experimental/networking/PlayerSync.d.ts +26 -0
  132. package/lib/engine-components-experimental/networking/PlayerSync.js +121 -0
  133. package/lib/engine-components-experimental/networking/PlayerSync.js.map +1 -0
  134. package/lib/engine-schemes/vec2.d.ts +10 -0
  135. package/lib/engine-schemes/vec2.js +26 -0
  136. package/lib/engine-schemes/vec2.js.map +1 -0
  137. package/lib/include/three/ARButton.d.ts +3 -0
  138. package/lib/include/three/ARButton.js +158 -0
  139. package/lib/include/three/ARButton.js.map +1 -0
  140. package/lib/include/three/EXT_mesh_gpu_instancing_exporter.d.ts +6 -0
  141. package/lib/include/three/EXT_mesh_gpu_instancing_exporter.js +46 -0
  142. package/lib/include/three/EXT_mesh_gpu_instancing_exporter.js.map +1 -0
  143. package/lib/include/three/VRButton.d.ts +5 -0
  144. package/lib/include/three/VRButton.js +122 -0
  145. package/lib/include/three/VRButton.js.map +1 -0
  146. package/lib/tsconfig.tsbuildinfo +1 -0
  147. package/package.json +2 -2
  148. package/src/engine/codegen/register_types.js +212 -204
  149. package/src/engine/debug/debug.ts +5 -0
  150. package/src/engine/debug/debug_console.ts +3 -2
  151. package/src/engine/debug/debug_overlay.ts +3 -1
  152. package/src/engine/engine_components.ts +2 -2
  153. package/src/engine/engine_element.ts +4 -2
  154. package/src/engine/engine_element_loading.ts +13 -6
  155. package/src/engine/engine_element_overlay.ts +4 -2
  156. package/src/engine/engine_input.ts +4 -0
  157. package/src/engine/engine_networking_instantiate.ts +4 -1
  158. package/src/engine/engine_networking_websocket.ts +3 -1
  159. package/src/engine/engine_serialization_builtin_serializer.ts +39 -8
  160. package/src/engine/engine_serialization_core.ts +7 -1
  161. package/src/engine/engine_setup.ts +2 -2
  162. package/src/engine/engine_texture.ts +6 -0
  163. package/src/engine/engine_utils.ts +3 -1
  164. package/src/engine/extensions/NEEDLE_progressive.ts +357 -0
  165. package/src/engine/extensions/extensions.ts +2 -2
  166. package/src/engine-components/Camera.ts +17 -3
  167. package/src/engine-components/GroundProjection.ts +18 -12
  168. package/src/engine-components/Light.ts +3 -1
  169. package/src/engine-components/OrbitControls.ts +7 -3
  170. package/src/engine-components/ParticleSystemModules.ts +50 -47
  171. package/src/engine-components/Renderer.ts +6 -10
  172. package/src/engine-components/Voip.ts +14 -4
  173. package/src/engine-components/Volume.ts +8 -1
  174. package/src/engine-components/WebXR.ts +2 -2
  175. package/src/engine-components/codegen/components.ts +99 -95
  176. package/src/engine-components/export/{GltfExport.ts → gltf/GltfExport.ts} +7 -7
  177. package/src/engine-components/export/usdz/Extension.ts +12 -0
  178. package/src/engine-components/export/usdz/USDZExporter.ts +233 -0
  179. package/src/engine-components/export/usdz/extensions/Animation.ts +306 -0
  180. package/src/engine-components/export/usdz/types.ts +39 -0
  181. package/src/engine-components/export/usdz/utils/animationutils.ts +60 -0
  182. package/src/engine-components/export/usdz/utils/quicklook.ts +43 -0
  183. package/src/engine-components/export/usdz/utils/timeutils.ts +20 -0
  184. package/src/engine-components/ui/Button.ts +8 -8
  185. package/src/engine-components/ui/Graphic.ts +15 -1
  186. package/src/engine-components/ui/InputField.ts +25 -2
  187. package/src/engine-components/ui/Utils.ts +17 -14
  188. package/src/engine-components-experimental/annotation/LineDrawer.ts +10 -7
  189. package/src/engine-components-experimental/annotation/LinesManager.ts +6 -6
  190. package/src/engine-components-experimental/networking/PlayerSync.ts +1 -1
  191. package/lib/engine/engine_caching.d.ts +0 -0
  192. package/lib/engine/engine_caching.js +0 -2
  193. package/lib/engine/engine_caching.js.map +0 -1
  194. package/lib/engine/extensions/NEEDLE_deferred_texture.d.ts +0 -18
  195. package/lib/engine/extensions/NEEDLE_deferred_texture.js +0 -194
  196. package/lib/engine/extensions/NEEDLE_deferred_texture.js.map +0 -1
  197. package/lib/engine/tests/simulate_avatars.d.ts +0 -0
  198. package/lib/engine/tests/simulate_avatars.js +0 -3
  199. package/lib/engine/tests/simulate_avatars.js.map +0 -1
  200. package/lib/engine-components/NavMesh.d.ts +0 -0
  201. package/lib/engine-components/NavMesh.js +0 -101
  202. package/lib/engine-components/NavMesh.js.map +0 -1
  203. package/lib/engine-components/ParticleSystemBehaviours.d.ts +0 -0
  204. package/lib/engine-components/ParticleSystemBehaviours.js +0 -2
  205. package/lib/engine-components/ParticleSystemBehaviours.js.map +0 -1
  206. package/lib/engine-components/SpringJoint.d.ts +0 -0
  207. package/lib/engine-components/SpringJoint.js +0 -43
  208. package/lib/engine-components/SpringJoint.js.map +0 -1
  209. package/lib/engine-components/export/GltfExport.js.map +0 -1
  210. package/lib/engine-components/ui/CanvasScaler.d.ts +0 -0
  211. package/lib/engine-components/ui/CanvasScaler.js +0 -17
  212. package/lib/engine-components/ui/CanvasScaler.js.map +0 -1
  213. package/src/engine/dist/engine_three_utils.js +0 -279
  214. package/src/engine/engine_caching.ts +0 -0
  215. package/src/engine/extensions/NEEDLE_deferred_texture.ts +0 -217
  216. package/src/engine/tests/simulate_avatars.ts +0 -2
  217. package/src/engine-components/NavMesh.ts +0 -117
  218. package/src/engine-components/ParticleSystemBehaviours.ts +0 -0
  219. package/src/engine-components/SpringJoint.ts +0 -45
  220. package/src/engine-components/ui/CanvasScaler.ts +0 -21
@@ -0,0 +1,26 @@
1
+ import { Behaviour, Component } from "../../engine-components/Component";
2
+ import { AssetReference } from "../../engine/engine_addressables";
3
+ export declare class PlayerSync extends Behaviour {
4
+ asset?: AssetReference;
5
+ private joinedRoomFunction?;
6
+ awake(): void;
7
+ onEnable(): void;
8
+ onDisable(): void;
9
+ private onUserJoined;
10
+ private watchTabVisible;
11
+ }
12
+ export declare class PlayerState extends Behaviour {
13
+ private static _all;
14
+ /** all instances for all players */
15
+ static get all(): PlayerState[];
16
+ private static _local;
17
+ /** all instances for the local player */
18
+ static get local(): PlayerState[];
19
+ static isLocalPlayer(obj: THREE.Object3D | Component): boolean;
20
+ owner?: string;
21
+ get isLocalPlayer(): boolean;
22
+ awake(): void;
23
+ start(): void;
24
+ doDestroy(): void;
25
+ onDestroy(): void;
26
+ }
@@ -0,0 +1,121 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { Behaviour, Component, GameObject } from "../../engine-components/Component";
8
+ import { AssetReference } from "../../engine/engine_addressables";
9
+ import { serializable } from "../../engine/engine_serialization_decorator";
10
+ import { syncField } from "../../engine/engine_networking_auto";
11
+ import { RoomEvents } from "../../engine/engine_networking";
12
+ import { Object3D } from "three";
13
+ import { syncDestroy } from "../../engine/engine_networking_instantiate";
14
+ export class PlayerSync extends Behaviour {
15
+ asset;
16
+ joinedRoomFunction;
17
+ awake() {
18
+ this.watchTabVisible();
19
+ this.joinedRoomFunction = this.onUserJoined.bind(this);
20
+ }
21
+ onEnable() {
22
+ this.context.connection.beginListen(RoomEvents.JoinedRoom, this.joinedRoomFunction);
23
+ }
24
+ onDisable() {
25
+ this.context.connection.stopListening(RoomEvents.JoinedRoom, this.joinedRoomFunction);
26
+ }
27
+ async onUserJoined(_model) {
28
+ const instance = await this.asset?.instantiateSynced({ parent: this.gameObject }, true);
29
+ if (instance) {
30
+ let pl = GameObject.getComponent(instance, PlayerState);
31
+ if (pl) {
32
+ pl.owner = this.context.connection.connectionId;
33
+ }
34
+ }
35
+ // TODO: previously created instances are not re-created when re-joining room
36
+ // const inRoom = this.context.connection.usersInRoom();
37
+ // console.log(inRoom);
38
+ // for (const user of inRoom) {
39
+ // if(user !== this.context.connection.connectionId) {
40
+ // console.log(this.context.connection.tryGetState(this.asset.uri))
41
+ // }
42
+ // }
43
+ }
44
+ watchTabVisible() {
45
+ window.addEventListener("visibilitychange", _ => {
46
+ if (document.visibilityState === "visible") {
47
+ for (let i = PlayerState.all.length - 1; i >= 0; i--) {
48
+ const pl = PlayerState.all[i];
49
+ if (!pl.owner || !this.context.connection.userIsInRoom(pl.owner)) {
50
+ pl.doDestroy();
51
+ }
52
+ }
53
+ }
54
+ });
55
+ }
56
+ }
57
+ __decorate([
58
+ serializable(AssetReference)
59
+ ], PlayerSync.prototype, "asset", void 0);
60
+ export class PlayerState extends Behaviour {
61
+ static _all = [];
62
+ /** all instances for all players */
63
+ static get all() {
64
+ return PlayerState._all;
65
+ }
66
+ ;
67
+ static _local = [];
68
+ /** all instances for the local player */
69
+ static get local() {
70
+ return PlayerState._local;
71
+ }
72
+ //** use to check if a component or gameobject is part of a instance owned by the local player */
73
+ static isLocalPlayer(obj) {
74
+ if (obj instanceof Object3D) {
75
+ return GameObject.getComponentInParent(obj, PlayerState)?.isLocalPlayer ?? false;
76
+ }
77
+ else if (obj instanceof Component) {
78
+ return GameObject.getComponentInParent(obj.gameObject, PlayerState)?.isLocalPlayer ?? false;
79
+ }
80
+ return false;
81
+ }
82
+ owner;
83
+ get isLocalPlayer() {
84
+ return this.owner === this.context.connection.connectionId;
85
+ }
86
+ awake() {
87
+ if (this.isLocalPlayer)
88
+ PlayerState.local.push(this);
89
+ PlayerState.all.push(this);
90
+ this.context.connection.beginListen(RoomEvents.UserLeftRoom, (model) => {
91
+ // console.log("USER LEFT", model.userId)
92
+ if (model.userId === this.owner) {
93
+ // console.log("LEFT", this.owner)
94
+ this.doDestroy();
95
+ return;
96
+ }
97
+ });
98
+ }
99
+ start() {
100
+ if (!this.owner || !this.context.connection.userIsInRoom(this.owner)) {
101
+ this.doDestroy();
102
+ return;
103
+ }
104
+ }
105
+ doDestroy() {
106
+ syncDestroy(this.gameObject, this.context.connection);
107
+ }
108
+ onDestroy() {
109
+ PlayerState.all.splice(PlayerState.all.indexOf(this), 1);
110
+ if (this.isLocalPlayer) {
111
+ const index = PlayerState._local.indexOf(this);
112
+ if (index >= 0)
113
+ PlayerState._local.splice(index, 1);
114
+ }
115
+ }
116
+ }
117
+ __decorate([
118
+ syncField(),
119
+ serializable()
120
+ ], PlayerState.prototype, "owner", void 0);
121
+ //# sourceMappingURL=PlayerSync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlayerSync.js","sourceRoot":"","sources":["../../../../engine-components-experimental/networking/PlayerSync.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import * as flatbuffers from 'flatbuffers';
2
+ export declare class Vec2 {
3
+ bb: flatbuffers.ByteBuffer | null;
4
+ bb_pos: number;
5
+ __init(i: number, bb: flatbuffers.ByteBuffer): Vec2;
6
+ x(): number;
7
+ y(): number;
8
+ static sizeOf(): number;
9
+ static createVec2(builder: flatbuffers.Builder, x: number, y: number): flatbuffers.Offset;
10
+ }
@@ -0,0 +1,26 @@
1
+ // automatically generated by the FlatBuffers compiler, do not modify
2
+ export class Vec2 {
3
+ bb = null;
4
+ bb_pos = 0;
5
+ __init(i, bb) {
6
+ this.bb_pos = i;
7
+ this.bb = bb;
8
+ return this;
9
+ }
10
+ x() {
11
+ return this.bb.readFloat32(this.bb_pos);
12
+ }
13
+ y() {
14
+ return this.bb.readFloat32(this.bb_pos + 4);
15
+ }
16
+ static sizeOf() {
17
+ return 8;
18
+ }
19
+ static createVec2(builder, x, y) {
20
+ builder.prep(4, 8);
21
+ builder.writeFloat32(y);
22
+ builder.writeFloat32(x);
23
+ return builder.offset();
24
+ }
25
+ }
26
+ //# sourceMappingURL=vec2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vec2.js","sourceRoot":"","sources":["../../../engine-schemes/vec2.ts"],"names":[],"mappings":"AAAA,qEAAqE;AAIrE,MAAM,OAAO,IAAI;IACf,EAAE,GAAgC,IAAI,CAAC;IACvC,MAAM,GAAG,CAAC,CAAC;IACb,MAAM,CAAC,CAAQ,EAAE,EAAyB;QACxC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAChB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,OAAO,IAAI,CAAC;IACd,CAAC;IAED,CAAC;QACC,OAAO,IAAI,CAAC,EAAG,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC3C,CAAC;IAED,CAAC;QACC,OAAO,IAAI,CAAC,EAAG,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC/C,CAAC;IAED,MAAM,CAAC,MAAM;QACX,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,CAAC,UAAU,CAAC,OAA2B,EAAE,CAAS,EAAE,CAAS;QACjE,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACnB,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACxB,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACxB,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC;IAC1B,CAAC;CAEA"}
@@ -0,0 +1,3 @@
1
+ export class ARButton {
2
+ static createButton(renderer: any, sessionInit?: {}): HTMLAnchorElement | HTMLButtonElement;
3
+ }
@@ -0,0 +1,158 @@
1
+ class ARButton {
2
+ static createButton(renderer, sessionInit = {}) {
3
+ const button = document.createElement('button');
4
+ let ARButtonControlsDomOverlay = false;
5
+ function showStartAR( /*device*/) {
6
+ if (sessionInit.domOverlay === undefined) {
7
+ var overlay = document.createElement('div');
8
+ overlay.style.display = 'none';
9
+ document.body.appendChild(overlay);
10
+ var svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
11
+ svg.setAttribute('width', 38);
12
+ svg.setAttribute('height', 38);
13
+ svg.style.position = 'absolute';
14
+ svg.style.right = '20px';
15
+ svg.style.top = '20px';
16
+ svg.addEventListener('click', function () {
17
+ currentSession.end();
18
+ });
19
+ overlay.appendChild(svg);
20
+ var path = document.createElementNS('http://www.w3.org/2000/svg', 'path');
21
+ path.setAttribute('d', 'M 12,12 L 28,28 M 28,12 12,28');
22
+ path.setAttribute('stroke', '#fff');
23
+ path.setAttribute('stroke-width', 2);
24
+ svg.appendChild(path);
25
+ if (sessionInit.optionalFeatures === undefined) {
26
+ sessionInit.optionalFeatures = [];
27
+ }
28
+ sessionInit.optionalFeatures.push('dom-overlay');
29
+ sessionInit.domOverlay = { root: overlay };
30
+ ARButtonControlsDomOverlay = true;
31
+ }
32
+ if (sessionInit.optionalFeatures === undefined)
33
+ sessionInit.optionalFeatures = [];
34
+ // added for Hololens support
35
+ sessionInit.optionalFeatures.push('local-floor');
36
+ sessionInit.optionalFeatures.push('hand-tracking');
37
+ sessionInit.optionalFeatures.push('layers');
38
+ //
39
+ let currentSession = null;
40
+ let originalDomOverlayParent = null;
41
+ async function onSessionStarted(session) {
42
+ // Workaround: seems WebXR Viewer has a non-standard behaviour when it comes to DOM Overlay and Canvas;
43
+ // HTMLElements that are inside the Canvas element are not visible in the DOM Overlay.
44
+ const isWebXRViewer = /WebXRViewer\//i.test(navigator.userAgent);
45
+ if (isWebXRViewer) {
46
+ if (sessionInit.domOverlay?.root) {
47
+ const overlayElement = sessionInit.domOverlay.root;
48
+ originalDomOverlayParent = overlayElement.parentElement;
49
+ if (originalDomOverlayParent) {
50
+ console.log("Reparent DOM Overlay to body", overlayElement, overlayElement.style.display);
51
+ // mozilla webxr does hide elements on session start
52
+ // this is only necessary if we generated the overlay element
53
+ overlayElement.style.display = "";
54
+ overlayElement.style.visibility = "";
55
+ document.body.appendChild(overlayElement);
56
+ }
57
+ }
58
+ else {
59
+ console.warn("WebXRViewer: No DOM Overlay found");
60
+ }
61
+ }
62
+ session.addEventListener('end', onSessionEnded);
63
+ // 'local' is head-relative, 'local-floor' is what the device thinks the floor is (e.g. Hololens knows pretty well)
64
+ // renderer.xr.setReferenceSpaceType( 'local' );
65
+ await renderer.xr.setSession(session);
66
+ button.textContent = 'STOP AR';
67
+ if (ARButtonControlsDomOverlay)
68
+ sessionInit.domOverlay.root.style.display = '';
69
+ currentSession = session;
70
+ }
71
+ function onSessionEnded( /*event*/) {
72
+ currentSession.removeEventListener('end', onSessionEnded);
73
+ button.textContent = 'START AR';
74
+ // if we reparented the DOM overlay, we're reverting it here
75
+ if (originalDomOverlayParent)
76
+ originalDomOverlayParent.appendChild(sessionInit.domOverlay.root);
77
+ if (ARButtonControlsDomOverlay)
78
+ sessionInit.domOverlay.root.style.display = 'none';
79
+ currentSession = null;
80
+ }
81
+ //
82
+ button.style.display = '';
83
+ button.style.cursor = 'pointer';
84
+ button.style.left = 'calc(50% - 50px)';
85
+ button.style.width = '100px';
86
+ button.textContent = 'START AR';
87
+ button.onmouseenter = function () {
88
+ button.style.opacity = '1.0';
89
+ };
90
+ button.onmouseleave = function () {
91
+ button.style.opacity = '0.5';
92
+ };
93
+ button.onclick = function () {
94
+ if (currentSession === null) {
95
+ navigator.xr.requestSession('immersive-ar', sessionInit).then(onSessionStarted);
96
+ }
97
+ else {
98
+ currentSession.end();
99
+ }
100
+ };
101
+ }
102
+ function disableButton() {
103
+ button.disabled = true;
104
+ button.style.display = '';
105
+ button.style.cursor = 'auto';
106
+ button.style.left = 'calc(50% - 75px)';
107
+ button.style.width = '150px';
108
+ button.onmouseenter = null;
109
+ button.onmouseleave = null;
110
+ button.onclick = null;
111
+ }
112
+ function showARNotSupported() {
113
+ disableButton();
114
+ button.textContent = 'AR NOT SUPPORTED';
115
+ }
116
+ function stylizeElement(element) {
117
+ element.style.position = 'absolute';
118
+ element.style.bottom = '20px';
119
+ element.style.padding = '12px 6px';
120
+ element.style.border = '1px solid #fff';
121
+ element.style.borderRadius = '4px';
122
+ element.style.background = 'rgba(0,0,0,0.1)';
123
+ element.style.color = '#fff';
124
+ element.style.font = 'normal 13px sans-serif';
125
+ element.style.textAlign = 'center';
126
+ element.style.opacity = '0.5';
127
+ element.style.outline = 'none';
128
+ element.style.zIndex = '999';
129
+ }
130
+ if ('xr' in navigator) {
131
+ button.id = 'ARButton';
132
+ button.style.display = 'none';
133
+ stylizeElement(button);
134
+ navigator.xr.isSessionSupported('immersive-ar').then(function (supported) {
135
+ supported ? showStartAR() : showARNotSupported();
136
+ }).catch(showARNotSupported);
137
+ return button;
138
+ }
139
+ else {
140
+ const message = document.createElement('a');
141
+ if (window.isSecureContext === false) {
142
+ message.href = document.location.href.replace(/^http:/, 'https:');
143
+ message.innerHTML = 'WEBXR NEEDS HTTPS'; // TODO Improve message
144
+ }
145
+ else {
146
+ message.href = 'https://immersiveweb.dev/';
147
+ message.innerHTML = 'WEBXR NOT AVAILABLE';
148
+ }
149
+ message.style.left = 'calc(50% - 90px)';
150
+ message.style.width = '180px';
151
+ message.style.textDecoration = 'none';
152
+ stylizeElement(message);
153
+ return message;
154
+ }
155
+ }
156
+ }
157
+ export { ARButton };
158
+ //# sourceMappingURL=ARButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ARButton.js","sourceRoot":"","sources":["../../../../include/three/ARButton.js"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export default class GLTFMeshGPUInstancingExtension {
2
+ constructor(writer: any);
3
+ writer: any;
4
+ name: string;
5
+ writeNode(node: any, nodeDef: any): void;
6
+ }
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Mesh GPU Instancing extension
3
+ *
4
+ * Specification: https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Vendor/EXT_mesh_gpu_instancing
5
+ */
6
+ import { BufferAttribute, Matrix4, Vector3, Quaternion, } from 'three';
7
+ export default class GLTFMeshGPUInstancingExtension {
8
+ constructor(writer) {
9
+ this.writer = writer;
10
+ this.name = 'EXT_mesh_gpu_instancing';
11
+ }
12
+ writeNode(node, nodeDef) {
13
+ if (node.constructor.name !== "InstancedMesh")
14
+ return;
15
+ const writer = this.writer;
16
+ const extensionsUsed = writer.extensionsUsed;
17
+ const extensionDef = {};
18
+ nodeDef.extensions = nodeDef.extensions || {};
19
+ nodeDef.extensions[this.name] = extensionDef;
20
+ let mat = new Matrix4();
21
+ const pos0 = new Array();
22
+ const rot0 = new Array();
23
+ const scl0 = new Array();
24
+ for (let i = 0; i < node.count; i++) {
25
+ node.getMatrixAt(i, mat);
26
+ let p = new Vector3();
27
+ let r = new Quaternion();
28
+ let s = new Vector3();
29
+ mat.decompose(p, r, s);
30
+ pos0.push(p.x, p.y, p.z);
31
+ rot0.push(r.x, r.y, r.z, r.w);
32
+ scl0.push(s.x, s.y, s.z);
33
+ }
34
+ ;
35
+ const pos = new Float32Array(pos0);
36
+ const rot = new Float32Array(rot0);
37
+ const scl = new Float32Array(scl0);
38
+ extensionDef.attributes = {
39
+ "TRANSLATION": writer.processAccessor(new BufferAttribute(pos, 3)),
40
+ "ROTATION": writer.processAccessor(new BufferAttribute(rot, 4)),
41
+ "SCALE": writer.processAccessor(new BufferAttribute(scl, 3)),
42
+ };
43
+ extensionsUsed[this.name] = true;
44
+ }
45
+ }
46
+ //# sourceMappingURL=EXT_mesh_gpu_instancing_exporter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EXT_mesh_gpu_instancing_exporter.js","sourceRoot":"","sources":["../../../../include/three/EXT_mesh_gpu_instancing_exporter.js"],"names":[],"mappings":"AAAA;;;;GAIG;AAEF,OAAO,EACP,eAAe,EACf,OAAO,EACP,OAAO,EACP,UAAU,GACV,MAAM,OAAO,CAAC;AAEf,MAAM,CAAC,OAAO,OAAO,8BAA8B;IAElD,YAAa,MAAM;QAElB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;IAEvC,CAAC;IAED,SAAS,CAAE,IAAI,EAAE,OAAO;QAEvB,IAAG,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,eAAe;YAAE,OAAO;QAErD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,MAAM,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;QAC7C,MAAM,YAAY,GAAG,EAAE,CAAC;QAExB,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC;QAC9C,OAAO,CAAC,UAAU,CAAE,IAAI,CAAC,IAAI,CAAE,GAAG,YAAY,CAAC;QAE/C,IAAI,GAAG,GAAG,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,IAAI,KAAK,EAAE,CAAC;QAEzB,KAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,EAClC;YACC,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YAEzB,IAAI,CAAC,GAAG,IAAI,OAAO,EAAE,CAAC;YACtB,IAAI,CAAC,GAAG,IAAI,UAAU,EAAE,CAAC;YACzB,IAAI,CAAC,GAAG,IAAI,OAAO,EAAE,CAAC;YAEtB,GAAG,CAAC,SAAS,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,CAAC;YAErB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACvB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3B,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACvB;QAAA,CAAC;QAEF,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;QAEnC,YAAY,CAAC,UAAU,GAAG;YACzB,aAAa,EAAG,MAAM,CAAC,eAAe,CAAE,IAAI,eAAe,CAAE,GAAG,EAAE,CAAC,CAAE,CAAE;YACvE,UAAU,EAAG,MAAM,CAAC,eAAe,CAAE,IAAI,eAAe,CAAE,GAAG,EAAE,CAAC,CAAE,CAAE;YACpE,OAAO,EAAG,MAAM,CAAC,eAAe,CAAE,IAAI,eAAe,CAAE,GAAG,EAAE,CAAC,CAAE,CAAE;SACjE,CAAC;QAEF,cAAc,CAAE,IAAI,CAAC,IAAI,CAAE,GAAG,IAAI,CAAC;IAEpC,CAAC;CACD"}
@@ -0,0 +1,5 @@
1
+ export class VRButton {
2
+ static createButton(renderer: any, options: any): HTMLAnchorElement | HTMLButtonElement;
3
+ static xrSessionIsGranted: boolean;
4
+ static registerSessionGrantedListener(): void;
5
+ }
@@ -0,0 +1,122 @@
1
+ class VRButton {
2
+ static createButton(renderer, options) {
3
+ if (options) {
4
+ console.error('THREE.VRButton: The "options" parameter has been removed. Please set the reference space type via renderer.xr.setReferenceSpaceType() instead.');
5
+ }
6
+ const button = document.createElement('button');
7
+ function showEnterVR( /*device*/) {
8
+ let currentSession = null;
9
+ async function onSessionStarted(session) {
10
+ session.addEventListener('end', onSessionEnded);
11
+ // console.log("Session started, features: ",session)
12
+ await renderer.xr.setSession(session);
13
+ button.textContent = 'EXIT VR';
14
+ currentSession = session;
15
+ }
16
+ function onSessionEnded( /*event*/) {
17
+ currentSession.removeEventListener('end', onSessionEnded);
18
+ button.textContent = 'ENTER VR';
19
+ currentSession = null;
20
+ }
21
+ //
22
+ button.style.display = '';
23
+ button.style.cursor = 'pointer';
24
+ button.style.left = 'calc(50% - 50px)';
25
+ button.style.width = '100px';
26
+ button.textContent = 'ENTER VR';
27
+ button.onmouseenter = function () {
28
+ button.style.opacity = '1.0';
29
+ };
30
+ button.onmouseleave = function () {
31
+ button.style.opacity = '0.5';
32
+ };
33
+ button.onclick = function () {
34
+ if (currentSession === null) {
35
+ // WebXR's requestReferenceSpace only works if the corresponding feature
36
+ // was requested at session creation time. For simplicity, just ask for
37
+ // the interesting ones as optional features, but be aware that the
38
+ // requestReferenceSpace call will fail if it turns out to be unavailable.
39
+ // ('local' is always available for immersive sessions and doesn't need to
40
+ // be requested separately.)
41
+ const sessionInit = { optionalFeatures: ['local-floor', 'bounded-floor', 'hand-tracking', 'high-fixed-foveation-level', 'layers'] };
42
+ navigator.xr.requestSession('immersive-vr', sessionInit).then(onSessionStarted);
43
+ }
44
+ else {
45
+ currentSession.end();
46
+ }
47
+ };
48
+ }
49
+ function disableButton() {
50
+ button.disabled = true;
51
+ button.style.display = '';
52
+ button.style.cursor = 'auto';
53
+ button.style.left = 'calc(50% - 75px)';
54
+ button.style.width = '150px';
55
+ button.onmouseenter = null;
56
+ button.onmouseleave = null;
57
+ button.onclick = null;
58
+ }
59
+ function showWebXRNotFound() {
60
+ disableButton();
61
+ button.textContent = 'VR NOT SUPPORTED';
62
+ }
63
+ function stylizeElement(element) {
64
+ element.style.position = 'absolute';
65
+ element.style.bottom = '20px';
66
+ element.style.padding = '12px 6px';
67
+ element.style.border = '1px solid #fff';
68
+ element.style.borderRadius = '4px';
69
+ element.style.background = 'rgba(0,0,0,0.1)';
70
+ element.style.color = '#fff';
71
+ element.style.font = 'normal 13px sans-serif';
72
+ element.style.textAlign = 'center';
73
+ element.style.opacity = '0.5';
74
+ element.style.outline = 'none';
75
+ element.style.zIndex = '999';
76
+ }
77
+ if ('xr' in navigator) {
78
+ button.id = 'VRButton';
79
+ button.style.display = 'none';
80
+ stylizeElement(button);
81
+ navigator.xr.isSessionSupported('immersive-vr').then(function (supported) {
82
+ supported ? showEnterVR() : showWebXRNotFound();
83
+ if (VRButton.xrSessionIsGranted) {
84
+ console.log("XR session is granted - will enter immersive web now");
85
+ button.click();
86
+ }
87
+ });
88
+ return button;
89
+ }
90
+ else {
91
+ const message = document.createElement('a');
92
+ if (window.isSecureContext === false) {
93
+ message.href = document.location.href.replace(/^http:/, 'https:');
94
+ message.innerHTML = 'WEBXR NEEDS HTTPS'; // TODO Improve message
95
+ }
96
+ else {
97
+ message.href = 'https://immersiveweb.dev/';
98
+ message.innerHTML = 'WEBXR NOT AVAILABLE';
99
+ }
100
+ message.style.left = 'calc(50% - 90px)';
101
+ message.style.width = '180px';
102
+ message.style.textDecoration = 'none';
103
+ stylizeElement(message);
104
+ return message;
105
+ }
106
+ }
107
+ static xrSessionIsGranted = false;
108
+ static registerSessionGrantedListener() {
109
+ if ('xr' in navigator) {
110
+ // WebXRViewer (based on Firefox) has a bug where addEventListener
111
+ // throws a silent exception and aborts execution entirely.
112
+ if (/WebXRViewer\//i.test(navigator.userAgent))
113
+ return;
114
+ navigator.xr.addEventListener('sessiongranted', () => {
115
+ VRButton.xrSessionIsGranted = true;
116
+ });
117
+ }
118
+ }
119
+ }
120
+ VRButton.registerSessionGrantedListener();
121
+ export { VRButton };
122
+ //# sourceMappingURL=VRButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VRButton.js","sourceRoot":"","sources":["../../../../include/three/VRButton.js"],"names":[],"mappings":"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"}