@needle-tools/engine 2.51.0-pre → 2.53.0-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 (128) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/needle-engine.d.ts +243 -56
  3. package/dist/needle-engine.js +380 -381
  4. package/dist/needle-engine.js.map +4 -4
  5. package/dist/needle-engine.min.js +41 -42
  6. package/dist/needle-engine.min.js.map +4 -4
  7. package/lib/engine/engine_components.js +2 -2
  8. package/lib/engine/engine_components.js.map +1 -1
  9. package/lib/engine/engine_networking_instantiate.d.ts +1 -1
  10. package/lib/engine/engine_networking_instantiate.js +3 -0
  11. package/lib/engine/engine_networking_instantiate.js.map +1 -1
  12. package/lib/engine/engine_serialization_builtin_serializer.d.ts +6 -0
  13. package/lib/engine/engine_serialization_builtin_serializer.js +31 -6
  14. package/lib/engine/engine_serialization_builtin_serializer.js.map +1 -1
  15. package/lib/engine/engine_serialization_core.d.ts +1 -0
  16. package/lib/engine/engine_serialization_core.js +6 -0
  17. package/lib/engine/engine_serialization_core.js.map +1 -1
  18. package/lib/engine/engine_setup.js +2 -2
  19. package/lib/engine/engine_setup.js.map +1 -1
  20. package/lib/engine/engine_texture.d.ts +3 -0
  21. package/lib/engine/engine_texture.js +4 -0
  22. package/lib/engine/engine_texture.js.map +1 -0
  23. package/lib/engine/engine_utils.d.ts +2 -0
  24. package/lib/engine/engine_utils.js +9 -0
  25. package/lib/engine/engine_utils.js.map +1 -1
  26. package/lib/engine/extensions/{NEEDLE_deferred_texture.d.ts → NEEDLE_progressive.d.ts} +2 -2
  27. package/lib/engine/extensions/{NEEDLE_deferred_texture.js → NEEDLE_progressive.js} +10 -9
  28. package/lib/engine/extensions/NEEDLE_progressive.js.map +1 -0
  29. package/lib/engine/extensions/extensions.js +2 -2
  30. package/lib/engine/extensions/extensions.js.map +1 -1
  31. package/lib/engine-components/Camera.d.ts +8 -2
  32. package/lib/engine-components/Camera.js +56 -4
  33. package/lib/engine-components/Camera.js.map +1 -1
  34. package/lib/engine-components/EventTrigger.d.ts +10 -1
  35. package/lib/engine-components/EventTrigger.js +47 -0
  36. package/lib/engine-components/EventTrigger.js.map +1 -1
  37. package/lib/engine-components/Light.js +6 -2
  38. package/lib/engine-components/Light.js.map +1 -1
  39. package/lib/engine-components/OrbitControls.js +6 -2
  40. package/lib/engine-components/OrbitControls.js.map +1 -1
  41. package/lib/engine-components/ParticleSystemModules.js +0 -1
  42. package/lib/engine-components/ParticleSystemModules.js.map +1 -1
  43. package/lib/engine-components/Renderer.d.ts +1 -0
  44. package/lib/engine-components/Renderer.js +13 -6
  45. package/lib/engine-components/Renderer.js.map +1 -1
  46. package/lib/engine-components/ShadowCatcher.js +5 -6
  47. package/lib/engine-components/ShadowCatcher.js.map +1 -1
  48. package/lib/engine-components/Skybox.d.ts +1 -0
  49. package/lib/engine-components/Skybox.js +5 -0
  50. package/lib/engine-components/Skybox.js.map +1 -1
  51. package/lib/engine-components/SpriteRenderer.d.ts +19 -3
  52. package/lib/engine-components/SpriteRenderer.js +154 -41
  53. package/lib/engine-components/SpriteRenderer.js.map +1 -1
  54. package/lib/engine-components/Voip.js +13 -4
  55. package/lib/engine-components/Voip.js.map +1 -1
  56. package/lib/engine-components/WebXRRig.js +12 -0
  57. package/lib/engine-components/WebXRRig.js.map +1 -1
  58. package/lib/engine-components/codegen/components.d.ts +7 -2
  59. package/lib/engine-components/codegen/components.js +7 -2
  60. package/lib/engine-components/codegen/components.js.map +1 -1
  61. package/lib/engine-components/export/{GltfExport.d.ts → gltf/GltfExport.d.ts} +2 -2
  62. package/lib/engine-components/export/{GltfExport.js → gltf/GltfExport.js} +7 -7
  63. package/lib/engine-components/export/gltf/GltfExport.js.map +1 -0
  64. package/lib/engine-components/export/usdz/Extension.d.ts +9 -0
  65. package/lib/engine-components/export/usdz/Extension.js +2 -0
  66. package/lib/engine-components/export/usdz/Extension.js.map +1 -0
  67. package/lib/engine-components/export/usdz/USDZExporter.d.ts +25 -0
  68. package/lib/engine-components/export/usdz/USDZExporter.js +193 -0
  69. package/lib/engine-components/export/usdz/USDZExporter.js.map +1 -0
  70. package/lib/engine-components/export/usdz/extensions/Animation.d.ts +44 -0
  71. package/lib/engine-components/export/usdz/extensions/Animation.js +264 -0
  72. package/lib/engine-components/export/usdz/extensions/Animation.js.map +1 -0
  73. package/lib/engine-components/export/usdz/types.d.ts +34 -0
  74. package/lib/engine-components/export/usdz/types.js +2 -0
  75. package/lib/engine-components/export/usdz/types.js.map +1 -0
  76. package/lib/engine-components/export/usdz/utils/animationutils.d.ts +3 -0
  77. package/lib/engine-components/export/usdz/utils/animationutils.js +46 -0
  78. package/lib/engine-components/export/usdz/utils/animationutils.js.map +1 -0
  79. package/lib/engine-components/export/usdz/utils/quicklook.d.ts +2 -0
  80. package/lib/engine-components/export/usdz/utils/quicklook.js +36 -0
  81. package/lib/engine-components/export/usdz/utils/quicklook.js.map +1 -0
  82. package/lib/engine-components/export/usdz/utils/timeutils.d.ts +1 -0
  83. package/lib/engine-components/export/usdz/utils/timeutils.js +15 -0
  84. package/lib/engine-components/export/usdz/utils/timeutils.js.map +1 -0
  85. package/lib/engine-components/timeline/PlayableDirector.js +6 -0
  86. package/lib/engine-components/timeline/PlayableDirector.js.map +1 -1
  87. package/lib/engine-components/ui/Graphic.d.ts +2 -0
  88. package/lib/engine-components/ui/Graphic.js +15 -0
  89. package/lib/engine-components/ui/Graphic.js.map +1 -1
  90. package/lib/engine-components/ui/Utils.d.ts +2 -1
  91. package/lib/engine-components/ui/Utils.js +5 -3
  92. package/lib/engine-components/ui/Utils.js.map +1 -1
  93. package/package.json +2 -2
  94. package/src/engine/codegen/register_types.js +16 -6
  95. package/src/engine/engine_components.ts +2 -2
  96. package/src/engine/engine_networking_instantiate.ts +4 -1
  97. package/src/engine/engine_serialization_builtin_serializer.ts +35 -7
  98. package/src/engine/engine_serialization_core.ts +7 -1
  99. package/src/engine/engine_setup.ts +2 -2
  100. package/src/engine/engine_texture.ts +6 -0
  101. package/src/engine/engine_utils.ts +13 -2
  102. package/src/engine/extensions/{NEEDLE_deferred_texture.ts → NEEDLE_progressive.ts} +18 -17
  103. package/src/engine/extensions/extensions.ts +2 -2
  104. package/src/engine-components/Camera.ts +53 -5
  105. package/src/engine-components/EventTrigger.ts +39 -19
  106. package/src/engine-components/Light.ts +6 -2
  107. package/src/engine-components/OrbitControls.ts +7 -3
  108. package/src/engine-components/ParticleSystemModules.ts +0 -3
  109. package/src/engine-components/Renderer.ts +13 -7
  110. package/src/engine-components/ShadowCatcher.ts +5 -6
  111. package/src/engine-components/Skybox.ts +4 -0
  112. package/src/engine-components/SpriteRenderer.ts +140 -44
  113. package/src/engine-components/Voip.ts +14 -4
  114. package/src/engine-components/WebXRRig.ts +14 -1
  115. package/src/engine-components/codegen/components.ts +7 -2
  116. package/src/engine-components/export/{GltfExport.ts → gltf/GltfExport.ts} +7 -7
  117. package/src/engine-components/export/usdz/Extension.ts +12 -0
  118. package/src/engine-components/export/usdz/USDZExporter.ts +216 -0
  119. package/src/engine-components/export/usdz/extensions/Animation.ts +306 -0
  120. package/src/engine-components/export/usdz/types.ts +39 -0
  121. package/src/engine-components/export/usdz/utils/animationutils.ts +60 -0
  122. package/src/engine-components/export/usdz/utils/quicklook.ts +43 -0
  123. package/src/engine-components/export/usdz/utils/timeutils.ts +20 -0
  124. package/src/engine-components/timeline/PlayableDirector.ts +5 -0
  125. package/src/engine-components/ui/Graphic.ts +15 -1
  126. package/src/engine-components/ui/Utils.ts +5 -3
  127. package/lib/engine/extensions/NEEDLE_deferred_texture.js.map +0 -1
  128. package/lib/engine-components/export/GltfExport.js.map +0 -1
@@ -0,0 +1,193 @@
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 { delay, getParam, isiOS, isMobileDevice, isSafari } from "../../../engine/engine_utils";
8
+ import { Object3D } from "three";
9
+ import { USDZExporter as ThreeUSDZExporter } from "three/examples/jsm/exporters/USDZExporter";
10
+ import { AnimationExtension } from "./extensions/Animation";
11
+ import { ensureQuicklookLinkIsCreated } from "./utils/quicklook";
12
+ import { getFormattedDate } from "./utils/timeutils";
13
+ import { registerAnimatorsImplictly } from "./utils/animationutils";
14
+ import { Behaviour, GameObject } from "../../Component";
15
+ import { WebXR } from "../../WebXR";
16
+ import { serializable } from "../../../engine/engine_serialization";
17
+ import { showBalloonWarning } from "../../../engine/debug/debug";
18
+ import { Context } from "../../../engine/engine_setup";
19
+ const debug = getParam("debugusdz");
20
+ export class USDZExporter extends Behaviour {
21
+ objectToExport;
22
+ autoExportAnimations = false;
23
+ extensions = [];
24
+ link;
25
+ webxr;
26
+ start() {
27
+ if (debug) {
28
+ window.addEventListener("keydown", (evt) => {
29
+ switch (evt.key) {
30
+ case "t":
31
+ this.exportAsync();
32
+ break;
33
+ }
34
+ });
35
+ if (isMobileDevice()) {
36
+ setTimeout(() => {
37
+ this.exportAsync();
38
+ }, 2000);
39
+ }
40
+ }
41
+ document.getElementById("open-in-ar")?.addEventListener("click", (evt) => {
42
+ evt.preventDefault();
43
+ this.exportAsync();
44
+ });
45
+ if (!this.objectToExport)
46
+ this.objectToExport = this.gameObject;
47
+ }
48
+ onEnable() {
49
+ const ios = isiOS();
50
+ const safari = isSafari();
51
+ if (debug || (ios && safari)) {
52
+ this.createQuicklookButton();
53
+ this.lastCallback = this.quicklookCallback.bind(this);
54
+ this.link = ensureQuicklookLinkIsCreated(this.context);
55
+ this.link.addEventListener('message', this.lastCallback);
56
+ }
57
+ }
58
+ onDisable() {
59
+ this.link?.removeEventListener('message', this.lastCallback);
60
+ }
61
+ async exportAsync() {
62
+ if (!this.objectToExport)
63
+ return;
64
+ const exporter = new ThreeUSDZExporter();
65
+ const extensions = [...this.extensions];
66
+ // collect animators and their clips
67
+ const animExt = new AnimationExtension();
68
+ extensions.push(animExt);
69
+ if (this.autoExportAnimations)
70
+ registerAnimatorsImplictly(this.objectToExport, animExt);
71
+ const eventArgs = { self: this, exporter: exporter, extensions: extensions };
72
+ this.dispatchEvent(new CustomEvent("before-export", { detail: eventArgs }));
73
+ let name = "needle";
74
+ if (debug)
75
+ name += "-" + getFormattedDate();
76
+ //@ts-ignore
77
+ exporter.debug = debug;
78
+ //@ts-ignore
79
+ const arraybuffer = await exporter.parse(this.objectToExport, extensions);
80
+ const blob = new Blob([arraybuffer], { type: 'application/octet-stream' });
81
+ // second file: USDA (without assets)
82
+ //@ts-ignore
83
+ // const usda = exporter.lastUsda;
84
+ // const blob2 = new Blob([usda], { type: 'text/plain' });
85
+ // this.link.download = name + ".usda";
86
+ // this.link.href = URL.createObjectURL(blob2);
87
+ // this.link.click();
88
+ // see https://developer.apple.com/documentation/arkit/adding_an_apple_pay_button_or_a_custom_action_in_ar_quick_look
89
+ const overlay = this.buildQuicklookOverlay();
90
+ const callToAction = overlay.callToAction ? encodeURIComponent(overlay.callToAction) : "";
91
+ const checkoutTitle = overlay.checkoutTitle ? encodeURIComponent(overlay.checkoutTitle) : "";
92
+ const checkoutSubtitle = overlay.checkoutSubtitle ? encodeURIComponent(overlay.checkoutSubtitle) : "";
93
+ this.link.href = URL.createObjectURL(blob) + `#callToAction=${callToAction}&checkoutTitle=${checkoutTitle}&checkoutSubtitle=${checkoutSubtitle}&`;
94
+ if (!this.lastCallback) {
95
+ this.lastCallback = this.quicklookCallback.bind(this);
96
+ this.link.addEventListener('message', this.lastCallback);
97
+ }
98
+ // open quicklook
99
+ this.link.download = name + ".usdz";
100
+ this.link.click();
101
+ // TODO detect QuickLook availability:
102
+ // https://webkit.org/blog/8421/viewing-augmented-reality-assets-in-safari-for-ios/#:~:text=inside%20the%20anchor.-,Feature%20Detection,-To%20detect%20support
103
+ }
104
+ lastCallback;
105
+ quicklookCallback(event) {
106
+ if (event?.data == '_apple_ar_quicklook_button_tapped') {
107
+ if (debug)
108
+ showBalloonWarning("Quicklook closed via call to action button");
109
+ this.dispatchEvent(new CustomEvent("quicklook-button-tapped", { detail: this }));
110
+ }
111
+ }
112
+ buildQuicklookOverlay() {
113
+ const obj = {};
114
+ obj.callToAction = "Close";
115
+ obj.checkoutTitle = "🌵 Made with Needle";
116
+ obj.checkoutSubtitle = "_";
117
+ // Use the quicklook-overlay event to customize the overlay
118
+ this.dispatchEvent(new CustomEvent("quicklook-overlay", { detail: obj }));
119
+ return obj;
120
+ }
121
+ _arButton;
122
+ async createQuicklookButton() {
123
+ if (!this.webxr) {
124
+ await delay(1);
125
+ this.webxr = GameObject.findObjectOfType(WebXR) ?? undefined;
126
+ if (this.webxr) {
127
+ if (this.webxr.VRButton)
128
+ this.webxr.VRButton.parentElement?.removeChild(this.webxr.VRButton);
129
+ // check if we have an AR button already and re-use that
130
+ if (this.webxr.ARButton && this._arButton !== this.webxr.ARButton) {
131
+ this._arButton = this.webxr.ARButton;
132
+ // Hack to remove the immersiveweb link
133
+ const linkInButton = this.webxr.ARButton.parentElement?.querySelector("a");
134
+ if (linkInButton) {
135
+ linkInButton.href = "";
136
+ }
137
+ this.webxr.ARButton.innerText = "Open in Quicklook";
138
+ this.webxr.ARButton.disabled = false;
139
+ this.webxr.ARButton.addEventListener("click", evt => {
140
+ evt.preventDefault();
141
+ this.exportAsync();
142
+ });
143
+ this.webxr.ARButton.classList.add("quicklook-ar-button");
144
+ }
145
+ // create a button if WebXR didnt create one yet
146
+ else {
147
+ this.webxr.createARButton = false;
148
+ this.webxr.createVRButton = false;
149
+ let container = window.document.querySelector(".webxr-buttons");
150
+ if (!container) {
151
+ container = document.createElement("div");
152
+ container.classList.add("webxr-buttons");
153
+ }
154
+ const button = document.createElement("button");
155
+ button.innerText = "Open in Quicklook";
156
+ button.addEventListener("click", () => {
157
+ this.exportAsync();
158
+ });
159
+ button.classList.add('webxr-ar-button');
160
+ button.classList.add('webxr-button');
161
+ button.classList.add("quicklook-ar-button");
162
+ container.appendChild(button);
163
+ }
164
+ }
165
+ else {
166
+ console.warn("Could not find WebXR component: will not create Quicklook button", Context.Current);
167
+ }
168
+ }
169
+ }
170
+ resetStyles(el) {
171
+ el.style.position = "";
172
+ el.style.top = "";
173
+ el.style.left = "";
174
+ el.style.width = "";
175
+ el.style.height = "";
176
+ el.style.margin = "";
177
+ el.style.padding = "";
178
+ el.style.border = "";
179
+ el.style.background = "";
180
+ el.style.color = "";
181
+ el.style.font = "";
182
+ el.style.textAlign = "";
183
+ el.style.opacity = "";
184
+ el.style.zIndex = "";
185
+ }
186
+ }
187
+ __decorate([
188
+ serializable(Object3D)
189
+ ], USDZExporter.prototype, "objectToExport", void 0);
190
+ __decorate([
191
+ serializable()
192
+ ], USDZExporter.prototype, "autoExportAnimations", void 0);
193
+ //# sourceMappingURL=USDZExporter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"USDZExporter.js","sourceRoot":"","sources":["../../../../../engine-components/export/usdz/USDZExporter.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAChG,OAAO,EAAE,QAAQ,EAAS,MAAM,OAAO,CAAC;AAExC,OAAO,EAAE,YAAY,IAAI,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AAC9F,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAC3D,OAAO,EAAE,4BAA4B,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AAEpE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAC;AAEvD,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;AAQpC,MAAM,OAAO,YAAa,SAAQ,SAAS;IAGvC,cAAc,CAAkB;IAGhC,oBAAoB,GAAY,KAAK,CAAC;IAEtC,UAAU,GAA6B,EAAE,CAAC;IAElC,IAAI,CAAqB;IACzB,KAAK,CAAS;IAGtB,KAAK;QACD,IAAI,KAAK,EAAE;YACP,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE;gBACvC,QAAQ,GAAG,CAAC,GAAG,EAAE;oBACb,KAAK,GAAG;wBACJ,IAAI,CAAC,WAAW,EAAE,CAAC;wBACnB,MAAM;iBACb;YACL,CAAC,CAAC,CAAC;YACH,IAAI,cAAc,EAAE,EAAE;gBAClB,UAAU,CAAC,GAAG,EAAE;oBACZ,IAAI,CAAC,WAAW,EAAE,CAAC;gBACvB,CAAC,EAAE,IAAI,CAAC,CAAA;aACX;SACJ;QACD,QAAQ,CAAC,cAAc,CAAC,YAAY,CAAC,EAAE,gBAAgB,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACrE,GAAG,CAAC,cAAc,EAAE,CAAC;YACrB,IAAI,CAAC,WAAW,EAAE,CAAC;QACvB,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,CAAC,cAAc;YAAE,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC;IACpE,CAAC;IAID,QAAQ;QACJ,MAAM,GAAG,GAAG,KAAK,EAAE,CAAA;QACnB,MAAM,MAAM,GAAG,QAAQ,EAAE,CAAC;QAC1B,IAAI,KAAK,IAAI,CAAC,GAAG,IAAI,MAAM,CAAC,EAAE;YAC1B,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC7B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtD,IAAI,CAAC,IAAI,GAAG,4BAA4B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACvD,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;SAC5D;IACL,CAAC;IAED,SAAS;QACL,IAAI,CAAC,IAAI,EAAE,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;IACjE,CAAC;IAED,KAAK,CAAC,WAAW;QACb,IAAI,CAAC,IAAI,CAAC,cAAc;YAAE,OAAO;QAEjC,MAAM,QAAQ,GAAG,IAAI,iBAAiB,EAAE,CAAC;QACzC,MAAM,UAAU,GAAQ,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAA;QAE5C,oCAAoC;QACpC,MAAM,OAAO,GAAG,IAAI,kBAAkB,EAAE,CAAC;QACzC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEzB,IAAI,IAAI,CAAC,oBAAoB;YACzB,0BAA0B,CAAC,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;QAE7D,MAAM,SAAS,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC;QAC7E,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,eAAe,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,CAAA;QAE3E,IAAI,IAAI,GAAG,QAAQ,CAAC;QACpB,IAAI,KAAK;YAAE,IAAI,IAAI,GAAG,GAAG,gBAAgB,EAAE,CAAC;QAE5C,YAAY;QACZ,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC;QACvB,YAAY;QACZ,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;QAC1E,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,WAAW,CAAC,EAAE,EAAE,IAAI,EAAE,0BAA0B,EAAE,CAAC,CAAC;QAE3E,qCAAqC;QACrC,YAAY;QACZ,kCAAkC;QAClC,0DAA0D;QAC1D,uCAAuC;QACvC,+CAA+C;QAC/C,qBAAqB;QAErB,qHAAqH;QACrH,MAAM,OAAO,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC7C,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1F,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7F,MAAM,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACtG,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,iBAAiB,YAAY,kBAAkB,aAAa,qBAAqB,gBAAgB,GAAG,CAAC;QAGlJ,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACpB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtD,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;SAC5D;QAED,iBAAiB;QACjB,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,OAAO,CAAC;QACpC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAElB,sCAAsC;QACtC,8JAA8J;IAClK,CAAC;IAEO,YAAY,CAAO;IAEnB,iBAAiB,CAAC,KAAK;QAC3B,IAAK,KAAa,EAAE,IAAI,IAAI,mCAAmC,EAAE;YAC7D,IAAI,KAAK;gBAAE,kBAAkB,CAAC,4CAA4C,CAAC,CAAC;YAC5E,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,yBAAyB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;SACpF;IACL,CAAC;IAEO,qBAAqB;QACzB,MAAM,GAAG,GAAqB,EAAE,CAAC;QACjC,GAAG,CAAC,YAAY,GAAG,OAAO,CAAC;QAC3B,GAAG,CAAC,aAAa,GAAG,qBAAqB,CAAC;QAC1C,GAAG,CAAC,gBAAgB,GAAG,GAAG,CAAC;QAC3B,2DAA2D;QAC3D,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,mBAAmB,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QAC1E,OAAO,GAAG,CAAC;IACf,CAAC;IAEO,SAAS,CAAe;IACxB,KAAK,CAAC,qBAAqB;QAC/B,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;YACb,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC;YACf,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC;YAC7D,IAAI,IAAI,CAAC,KAAK,EAAE;gBACZ,IAAG,IAAI,CAAC,KAAK,CAAC,QAAQ;oBAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,EAAE,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBAC5F,wDAAwD;gBACxD,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;oBAC/D,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;oBACrC,uCAAuC;oBACvC,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC;oBAC3E,IAAI,YAAY,EAAE;wBACd,YAAY,CAAC,IAAI,GAAG,EAAE,CAAC;qBAC1B;oBACD,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,GAAG,mBAAmB,CAAC;oBACpD,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,GAAG,KAAK,CAAC;oBACrC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE;wBAChD,GAAG,CAAC,cAAc,EAAE,CAAC;wBACrB,IAAI,CAAC,WAAW,EAAE,CAAC;oBACvB,CAAC,CAAC,CAAC;oBACH,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;iBAC5D;gBACD,gDAAgD;qBAC3C;oBACD,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,KAAK,CAAC;oBAClC,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,KAAK,CAAC;oBAClC,IAAI,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC;oBAChE,IAAI,CAAC,SAAS,EAAE;wBACZ,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;wBAC1C,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;qBAC5C;oBACD,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;oBAChD,MAAM,CAAC,SAAS,GAAG,mBAAmB,CAAC;oBACvC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;wBAClC,IAAI,CAAC,WAAW,EAAE,CAAC;oBACvB,CAAC,CAAC,CAAC;oBACH,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;oBACxC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;oBACrC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;oBAC5C,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;iBACjC;aACJ;iBACI;gBACD,OAAO,CAAC,IAAI,CAAC,kEAAkE,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;aACrG;SACJ;IACL,CAAC;IAEO,WAAW,CAAC,EAAe;QAC/B,EAAE,CAAC,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC;QACvB,EAAE,CAAC,KAAK,CAAC,GAAG,GAAG,EAAE,CAAC;QAClB,EAAE,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC;QACnB,EAAE,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;QACpB,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC;QACrB,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC;QACrB,EAAE,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC;QACtB,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC;QACrB,EAAE,CAAC,KAAK,CAAC,UAAU,GAAG,EAAE,CAAC;QACzB,EAAE,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;QACpB,EAAE,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC;QACnB,EAAE,CAAC,KAAK,CAAC,SAAS,GAAG,EAAE,CAAC;QACxB,EAAE,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC;QACtB,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC;IACzB,CAAC;CACJ;AA7LG;IADC,YAAY,CAAC,QAAQ,CAAC;oDACS;AAGhC;IADC,YAAY,EAAE;0DACuB"}
@@ -0,0 +1,44 @@
1
+ import { Object3D } from "three";
2
+ import { USDZObject } from "three/examples/jsm/exporters/USDZExporter";
3
+ import { IUSDZExporterExtension } from "../Extension";
4
+ export interface UsdzAnimation {
5
+ createAnimation(ext: AnimationExtension, model: USDZObject, context: any): any;
6
+ }
7
+ export type AnimationClipCollection = Array<{
8
+ root: Object3D;
9
+ clips: Array<THREE.AnimationClip>;
10
+ }>;
11
+ export declare class RegisteredAnimationInfo {
12
+ get start(): number;
13
+ get duration(): number;
14
+ private ext;
15
+ private root;
16
+ private clip;
17
+ constructor(ext: AnimationExtension, root: THREE.Object3D, clip: THREE.AnimationClip);
18
+ }
19
+ export declare class TransformData {
20
+ clip: THREE.AnimationClip;
21
+ pos?: THREE.KeyframeTrack;
22
+ rot?: THREE.KeyframeTrack;
23
+ scale?: THREE.KeyframeTrack;
24
+ get frameRate(): number;
25
+ private ext;
26
+ private root;
27
+ private target;
28
+ constructor(ext: AnimationExtension, root: Object3D, target: Object3D, clip: THREE.AnimationClip);
29
+ addTrack(track: any): void;
30
+ getFrames(): number;
31
+ getDuration(): number;
32
+ getStartTime(arr: TransformData[]): number;
33
+ }
34
+ export declare class AnimationExtension implements IUSDZExporterExtension {
35
+ get extensionName(): string;
36
+ private dict;
37
+ private rootTargetMap;
38
+ getStartTime01(root: Object3D, clip: THREE.AnimationClip): number;
39
+ registerAnimation(root: Object3D, clip: THREE.AnimationClip): RegisteredAnimationInfo | null;
40
+ onAfterHierarchy(_context: any): void;
41
+ private serializers;
42
+ onAfterBuildDocument(_context: any): void;
43
+ onExportObject(object: any, model: USDZObject, _context: any): void;
44
+ }
@@ -0,0 +1,264 @@
1
+ import { GameObject } from "../../../Component";
2
+ import { getParam } from "../../../../engine/engine_utils";
3
+ import { Matrix4, Vector3, Quaternion } from "three";
4
+ //@ts-ignore
5
+ import { buildMatrix } from "three/examples/jsm/exporters/USDZExporter";
6
+ const debug = getParam("debugusdzanimation");
7
+ export class RegisteredAnimationInfo {
8
+ get start() { return this.ext.getStartTime01(this.root, this.clip); }
9
+ get duration() { return this.clip.duration; }
10
+ ext;
11
+ root;
12
+ clip;
13
+ constructor(ext, root, clip) {
14
+ this.ext = ext;
15
+ this.root = root;
16
+ this.clip = clip;
17
+ }
18
+ }
19
+ export class TransformData {
20
+ clip;
21
+ pos;
22
+ rot;
23
+ scale;
24
+ get frameRate() { return 60; }
25
+ ext;
26
+ root;
27
+ target;
28
+ constructor(ext, root, target, clip) {
29
+ this.ext = ext;
30
+ this.root = root;
31
+ this.target = target;
32
+ this.clip = clip;
33
+ }
34
+ addTrack(track) {
35
+ if (track.name.endsWith("position"))
36
+ this.pos = track;
37
+ if (track.name.endsWith("quaternion"))
38
+ this.rot = track;
39
+ if (track.name.endsWith("scale"))
40
+ this.scale = track;
41
+ }
42
+ getFrames() {
43
+ return Math.max(this.pos?.times?.length ?? 0, this.rot?.times?.length ?? 0, this.scale?.times?.length ?? 0);
44
+ }
45
+ getDuration() {
46
+ const times = this.pos?.times ?? this.rot?.times ?? this.scale?.times;
47
+ if (!times)
48
+ return 0;
49
+ return times[times.length - 1];
50
+ }
51
+ getStartTime(arr) {
52
+ let sum = 0;
53
+ for (let i = 0; i < arr.length; i++) {
54
+ const entry = arr[i];
55
+ if (entry === this) {
56
+ return sum;
57
+ }
58
+ else
59
+ sum += entry.getDuration();
60
+ }
61
+ return sum;
62
+ }
63
+ }
64
+ export class AnimationExtension {
65
+ get extensionName() { return "animation"; }
66
+ dict = new Map();
67
+ // private rootTargetMap: Map<Object3D, Object3D[]> = new Map();
68
+ rootTargetMap = new Map();
69
+ getStartTime01(root, clip) {
70
+ const targets = this.rootTargetMap.get(root);
71
+ if (!targets)
72
+ return Infinity;
73
+ let longestStartTime = -1;
74
+ for (const target of targets) {
75
+ const data = this.dict.get(target);
76
+ let startTimeInSeconds = 0;
77
+ if (data?.length) {
78
+ for (const entry of data) {
79
+ if (entry.clip === clip) {
80
+ break;
81
+ }
82
+ startTimeInSeconds += entry.getDuration();
83
+ }
84
+ longestStartTime = Math.max(longestStartTime, startTimeInSeconds);
85
+ }
86
+ else {
87
+ console.warn("No animation found on root", root, clip, data);
88
+ }
89
+ }
90
+ return longestStartTime;
91
+ }
92
+ registerAnimation(root, clip) {
93
+ if (!clip || !root)
94
+ return null;
95
+ if (!this.rootTargetMap.has(root))
96
+ this.rootTargetMap.set(root, []);
97
+ // this.rootTargetMap.get(root)?.push(clip);
98
+ for (const track of clip.tracks) {
99
+ const trackName = track.name.split(".")[2];
100
+ const animationTarget = root.getObjectByName(trackName); // object name
101
+ if (!animationTarget) {
102
+ console.warn("no object found for track", track.name, "using " + root.name + " instead");
103
+ continue;
104
+ // // if no object was found it might be that we have a component that references an animation clip but wants to target another object
105
+ // // in that case UnityGLTF writes the name of the component as track targets because it doesnt know of the intented target
106
+ // animationTarget = root;
107
+ }
108
+ if (!this.dict.has(animationTarget)) {
109
+ this.dict.set(animationTarget, []);
110
+ }
111
+ const arr = this.dict.get(animationTarget);
112
+ if (!arr)
113
+ continue;
114
+ let model = arr.find(x => x.clip === clip);
115
+ if (!model) {
116
+ model = new TransformData(this, root, animationTarget, clip);
117
+ arr.push(model);
118
+ }
119
+ model.addTrack(track);
120
+ const targets = this.rootTargetMap.get(root);
121
+ if (!targets?.includes(animationTarget))
122
+ targets?.push(animationTarget);
123
+ }
124
+ // get the entry for this object.
125
+ // This doesnt work if we have clips animating multiple objects
126
+ const info = new RegisteredAnimationInfo(this, root, clip);
127
+ return info;
128
+ }
129
+ onAfterHierarchy(_context) {
130
+ if (debug)
131
+ console.log(this.dict);
132
+ }
133
+ serializers = [];
134
+ onAfterBuildDocument(_context) {
135
+ for (const ser of this.serializers) {
136
+ const parent = ser.model?.parent;
137
+ const isEmptyParent = parent?.isDynamic === true;
138
+ if (debug)
139
+ console.log(isEmptyParent, ser.model?.parent);
140
+ if (isEmptyParent) {
141
+ ser.registerCallback(parent);
142
+ }
143
+ }
144
+ }
145
+ onExportObject(object, model, _context) {
146
+ GameObject.foreachComponent(object, (comp) => {
147
+ const c = comp;
148
+ if (typeof c.createAnimation === "function") {
149
+ c.createAnimation(this, model, _context);
150
+ }
151
+ }, false);
152
+ // we need to be able to retarget serialization to empty parents before actually serializing (we do that in another callback)
153
+ const ser = new SerializeAnimation(object, this.dict);
154
+ this.serializers.push(ser);
155
+ ser.registerCallback(model);
156
+ }
157
+ }
158
+ class SerializeAnimation {
159
+ object;
160
+ dict;
161
+ model;
162
+ callback;
163
+ constructor(object, dict) {
164
+ this.object = object;
165
+ this.dict = dict;
166
+ }
167
+ registerCallback(model) {
168
+ if (this.model && this.callback) {
169
+ this.model.removeEventListener("serialize", this.callback);
170
+ }
171
+ if (!this.callback)
172
+ this.callback = this.onSerialize.bind(this);
173
+ if (debug)
174
+ console.log("REPARENT", model);
175
+ this.model = model;
176
+ this.model.addEventListener("serialize", this.callback);
177
+ }
178
+ onSerialize(writer, _context) {
179
+ if (debug)
180
+ console.log("SERIALIZE", this.model.name, this.object.type);
181
+ // do we have a track for this?
182
+ const object = this.object;
183
+ const arr = this.dict.get(object);
184
+ if (!arr)
185
+ return;
186
+ // console.log("found data for", object, "exporting animation now");
187
+ // assumption: all tracks have the same time values
188
+ // TODO collect all time values and then use the interpolator to access
189
+ const composedTransform = new Matrix4();
190
+ const translation = new Vector3();
191
+ const rotation = new Quaternion();
192
+ const scale = new Vector3(1, 1, 1);
193
+ // TODO doesn't support individual time arrays right now
194
+ // could use these in case we don't have time values that are identical
195
+ /*
196
+ const translationInterpolant = o.pos?.createInterpolant() as THREE.Interpolant;
197
+ const rotationInterpolant = o.rot?.createInterpolant() as THREE.Interpolant;
198
+ const scaleInterpolant = o.scale?.createInterpolant() as THREE.Interpolant;
199
+ */
200
+ writer.appendLine("matrix4d xformOp:transform.timeSamples = {");
201
+ writer.indent++;
202
+ for (const transformData of arr) {
203
+ let timesArray = transformData.pos?.times;
204
+ if (!timesArray || transformData.rot && transformData.rot.times?.length > timesArray?.length)
205
+ timesArray = transformData.rot?.times;
206
+ if (!timesArray || transformData.scale && transformData.scale.times?.length > timesArray?.length)
207
+ timesArray = transformData.scale?.times;
208
+ if (!timesArray) {
209
+ console.error("got an animated object but no time values??", object, transformData);
210
+ continue;
211
+ }
212
+ const startTime = transformData.getStartTime(arr);
213
+ if (debug)
214
+ writer.appendLine(transformData.clip.name + ": start=" + startTime.toFixed(3) + ", length=" + transformData.getDuration().toFixed(3) + ", frames=" + transformData.getFrames());
215
+ // ignore until https://github.com/three-types/three-ts-types/pull/293 gets merged
216
+ //@ts-ignore
217
+ const positionInterpolant = transformData.pos?.createInterpolant();
218
+ //@ts-ignore
219
+ const rotationInterpolant = transformData.rot?.createInterpolant();
220
+ //@ts-ignore
221
+ const scaleInterpolant = transformData.scale?.createInterpolant();
222
+ if (!positionInterpolant)
223
+ translation.set(object.position.x, object.position.y, object.position.z);
224
+ if (!rotationInterpolant)
225
+ rotation.set(object.quaternion.x, object.quaternion.y, object.quaternion.z, object.quaternion.w);
226
+ if (!scaleInterpolant)
227
+ scale.set(object.scale.x, object.scale.y, object.scale.z);
228
+ for (let index = 0; index < timesArray.length; index++) {
229
+ const time = timesArray[index];
230
+ if (positionInterpolant) {
231
+ const pos = positionInterpolant.evaluate(time);
232
+ translation.set(pos[0], pos[1], pos[2]);
233
+ }
234
+ if (rotationInterpolant) {
235
+ const quat = rotationInterpolant.evaluate(time);
236
+ rotation.set(quat[0], quat[1], quat[2], quat[3]);
237
+ }
238
+ if (scaleInterpolant) {
239
+ const scale = scaleInterpolant.evaluate(time);
240
+ scale.set(scale[0], scale[1], scale[2]);
241
+ }
242
+ composedTransform.compose(translation, rotation, scale);
243
+ let line = `${(startTime + time) * transformData.frameRate}: ${buildMatrix(composedTransform)},`;
244
+ if (debug)
245
+ line = "#" + index + "\t" + line;
246
+ writer.appendLine(line);
247
+ }
248
+ }
249
+ writer.indent--;
250
+ writer.appendLine("}");
251
+ /*
252
+ let transform3 = new Matrix4();
253
+ transform3.compose(0.2,0,0);
254
+ const transform = buildMatrix(model.matrix);
255
+ const transform2 = buildMatrix(transform3.multiply(model.matrix));
256
+
257
+ writer.appendLine(`matrix4d xformOp:transform.timeSamples = {
258
+ 0: ${transform},
259
+ 30: ${transform2}
260
+ }`);
261
+ */
262
+ }
263
+ }
264
+ //# sourceMappingURL=Animation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Animation.js","sourceRoot":"","sources":["../../../../../../engine-components/export/usdz/extensions/Animation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import { Object3D, Matrix4, Material, BufferGeometry } from "three";
2
+ /** implementation is in three */
3
+ export declare class USDZDocument {
4
+ name: string;
5
+ get isDocumentRoot(): boolean;
6
+ add(obj: USDZObject): any;
7
+ remove(obj: USDZObject): any;
8
+ traverse(callback: (obj: USDZObject) => void): any;
9
+ findById(uuid: string): USDZObject | undefined;
10
+ get isDynamic(): boolean;
11
+ }
12
+ /** implementation is in three */
13
+ export declare class USDZObject {
14
+ static createEmptyParent(parent: USDZObject): any;
15
+ uuid: string;
16
+ name: string;
17
+ matrix: Matrix4;
18
+ material: Material;
19
+ geometry: BufferGeometry;
20
+ parent: USDZObject | USDZDocument | null;
21
+ children: USDZObject[];
22
+ _eventListeners: {
23
+ [event: string]: Function[];
24
+ };
25
+ isDynamic: boolean;
26
+ is(obj: Object3D): boolean;
27
+ isEmpty(): boolean;
28
+ clone(): any;
29
+ getPath(): any;
30
+ add(child: USDZObject): any;
31
+ remove(child: USDZObject): any;
32
+ addEventListener(evt: string, listener: Function): any;
33
+ removeEventListener(evt: string, listener: Function): any;
34
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../engine-components/export/usdz/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ import { Object3D } from "three";
2
+ import { AnimationExtension } from "../extensions/Animation";
3
+ export declare function registerAnimatorsImplictly(root: Object3D, ext: AnimationExtension): void;
@@ -0,0 +1,46 @@
1
+ import { Animator } from "../../../Animator";
2
+ import { AnimationClip, KeyframeTrack } from "three";
3
+ import { GameObject } from "../../../Component";
4
+ import { getParam } from "../../../../engine/engine_utils";
5
+ const debug = getParam("debugusdz");
6
+ export function registerAnimatorsImplictly(root, ext) {
7
+ // collect animators and their clips
8
+ const animationClips = [];
9
+ const animators = GameObject.getComponentsInChildren(root, Animator);
10
+ // insert rest pose clip
11
+ let injectedRestPose = false;
12
+ if (debug)
13
+ console.log(animators);
14
+ for (const animator of animators) {
15
+ if (!animator || !animator.runtimeAnimatorController)
16
+ continue;
17
+ if (debug)
18
+ console.log(animator);
19
+ const clips = [];
20
+ for (const action of animator.runtimeAnimatorController.enumerateActions()) {
21
+ if (debug)
22
+ console.log(action);
23
+ const clip = action.getClip();
24
+ // we need to inject a rest pose clip so that the animation position is correct
25
+ // e.g. when the animation starts in the air and animates down we dont want the object to move under the ground
26
+ if (!injectedRestPose && clip.tracks.length > 0) {
27
+ injectedRestPose = true;
28
+ const track = clip.tracks[0];
29
+ const trackBaseName = track.name.substring(0, track.name.lastIndexOf("."));
30
+ const currentPositionTrack = new KeyframeTrack(trackBaseName + ".position", [0, .01], [0, 0, 0, 0, 0, 0]);
31
+ const currentRotationTrack = new KeyframeTrack(trackBaseName + ".quaternion", [0, .01], [0, 0, 0, 1, 0, 0, 0, 1]);
32
+ clips.push(new AnimationClip("rest", .01, [currentPositionTrack, currentRotationTrack]));
33
+ }
34
+ if (!clips.includes(clip))
35
+ clips.push(clip);
36
+ }
37
+ animationClips.push({ root: animator.gameObject, clips: clips });
38
+ }
39
+ if (debug)
40
+ console.log(animationClips);
41
+ for (const pair of animationClips) {
42
+ for (const clip of pair.clips)
43
+ ext.registerAnimation(pair.root, clip);
44
+ }
45
+ }
46
+ //# sourceMappingURL=animationutils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"animationutils.js","sourceRoot":"","sources":["../../../../../../engine-components/export/usdz/utils/animationutils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAmB,aAAa,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAEtE,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAE3D,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;AAEpC,MAAM,UAAU,0BAA0B,CAAC,IAAc,EAAE,GAAuB;IAE9E,oCAAoC;IACpC,MAAM,cAAc,GAAuD,EAAE,CAAC;IAC9E,MAAM,SAAS,GAAG,UAAU,CAAC,uBAAuB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAErE,wBAAwB;IACxB,IAAI,gBAAgB,GAAG,KAAK,CAAC;IAE7B,IAAI,KAAK;QACL,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAE3B,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;QAC9B,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,yBAAyB;YAAE,SAAS;QAE/D,IAAI,KAAK;YACL,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAE1B,MAAM,KAAK,GAA0B,EAAE,CAAC;QAGxC,KAAK,MAAM,MAAM,IAAI,QAAQ,CAAC,yBAAyB,CAAC,gBAAgB,EAAE,EAAE;YACxE,IAAI,KAAK;gBACL,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACxB,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;YAE9B,+EAA+E;YAC/E,+GAA+G;YAC/G,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC7C,gBAAgB,GAAG,IAAI,CAAC;gBACxB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBAC7B,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC3E,MAAM,oBAAoB,GAAG,IAAI,aAAa,CAAC,aAAa,GAAG,WAAW,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC1G,MAAM,oBAAoB,GAAG,IAAI,aAAa,CAAC,aAAa,GAAG,aAAa,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBAClH,KAAK,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,oBAAoB,EAAE,oBAAoB,CAAC,CAAC,CAAC,CAAC;aAC5F;YAED,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACrB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACxB;QAED,cAAc,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;KACpE;IAED,IAAI,KAAK;QACL,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAEhC,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE;QAC/B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK;YACzB,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;KAC9C;AACL,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { Context } from "../../../../engine/engine_setup";
2
+ export declare function ensureQuicklookLinkIsCreated(context: Context): HTMLAnchorElement;