@needle-tools/engine 3.0.0-alpha → 3.0.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/needle-engine.js +11174 -11283
- package/dist/needle-engine.umd.cjs +230 -230
- package/lib/engine/engine_assetdatabase.js +24 -17
- package/lib/engine/engine_assetdatabase.js.map +1 -1
- package/lib/engine/engine_patcher.d.ts +4 -3
- package/lib/engine/engine_patcher.js +61 -44
- package/lib/engine/engine_patcher.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/engine/engine_assetdatabase.ts +29 -18
- package/src/engine/engine_patcher.ts +104 -47
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { InternalUsageTrackerPlugin } from "./extensions/usage_tracker";
|
|
2
|
-
import { Bone, BufferAttribute, BufferGeometry, InterleavedBufferAttribute, Material, Mesh, Object3D, Skeleton, SkinnedMesh, Texture
|
|
2
|
+
import { Bone, BufferAttribute, BufferGeometry, InterleavedBufferAttribute, Material, Mesh, Object3D, Skeleton, SkinnedMesh, Texture } from "three";
|
|
3
3
|
import { addPatch } from "./engine_patcher";
|
|
4
4
|
import { getParam } from "./engine_utils";
|
|
5
5
|
export class AssetDatabase {
|
|
@@ -244,22 +244,18 @@ function updateUsers(symbol, user, object, added) {
|
|
|
244
244
|
object[symbol] = users;
|
|
245
245
|
}
|
|
246
246
|
// We dont want to update users during rendering
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
},
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
const result = fn.apply(this, args);
|
|
260
|
-
noUpdateScope--;
|
|
261
|
-
return result;
|
|
262
|
-
};
|
|
247
|
+
try {
|
|
248
|
+
// addPatch(WebGLRenderer.prototype, "render",
|
|
249
|
+
// () => {
|
|
250
|
+
// noUpdateScope++;
|
|
251
|
+
// },
|
|
252
|
+
// () => {
|
|
253
|
+
// noUpdateScope--;
|
|
254
|
+
// }
|
|
255
|
+
// );
|
|
256
|
+
}
|
|
257
|
+
catch (e) {
|
|
258
|
+
console.warn("Could not wrap WebGLRenderer.render", e);
|
|
263
259
|
}
|
|
264
260
|
// addGltfLoadEventListener(GltfLoadEventType.BeforeLoad, (_) => {
|
|
265
261
|
// noUpdateScope++;
|
|
@@ -273,4 +269,15 @@ function wrapMethod(fn) {
|
|
|
273
269
|
// if(obj instanceof Mesh) {
|
|
274
270
|
// }
|
|
275
271
|
// });
|
|
272
|
+
// class MyObject {
|
|
273
|
+
// myNumber: number = 1;
|
|
274
|
+
// }
|
|
275
|
+
// addPatch(MyObject.prototype, "myNumber", (obj, oldValue, newValue) => {
|
|
276
|
+
// console.log("myNumber changed", oldValue, newValue);
|
|
277
|
+
// });
|
|
278
|
+
// const i = new MyObject();
|
|
279
|
+
// setInterval(() => {
|
|
280
|
+
// console.log("RUN");
|
|
281
|
+
// i.myNumber += 1;
|
|
282
|
+
// }, 1000);
|
|
276
283
|
//# sourceMappingURL=engine_assetdatabase.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine_assetdatabase.js","sourceRoot":"","sources":["../../src/engine/engine_assetdatabase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,cAAc,EAAqB,0BAA0B,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"engine_assetdatabase.js","sourceRoot":"","sources":["../../src/engine/engine_assetdatabase.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
export
|
|
2
|
-
export type
|
|
1
|
+
export type Prefix = (...args: any[]) => any;
|
|
2
|
+
export type Postfix = (...args: any[]) => any;
|
|
3
3
|
/**
|
|
4
4
|
* Use patcher for patching properties insteadof calling Object.defineProperty individually
|
|
5
5
|
* since this will cause conflicts if multiple patches need to be applied to the same property
|
|
6
6
|
*/
|
|
7
|
-
export declare function addPatch<
|
|
7
|
+
export declare function addPatch<T extends object>(prototype: T, fieldName: string, beforeCallback?: Prefix, afterCallback?: Postfix): void;
|
|
8
8
|
export declare function removePatch(prototype: object, fieldName: string, cb: Function): void;
|
|
9
|
+
export declare const NeedlePatchesKey = "Needle:Patches";
|
|
@@ -4,55 +4,53 @@ const _wrappedMethods = new WeakSet();
|
|
|
4
4
|
* Use patcher for patching properties insteadof calling Object.defineProperty individually
|
|
5
5
|
* since this will cause conflicts if multiple patches need to be applied to the same property
|
|
6
6
|
*/
|
|
7
|
-
export function addPatch(prototype, fieldName,
|
|
7
|
+
export function addPatch(prototype, fieldName, beforeCallback, afterCallback) {
|
|
8
|
+
// TODO
|
|
9
|
+
return;
|
|
8
10
|
// TODO: we probably want to turn this into a symbol to prevent anyone from overriding it
|
|
9
11
|
// But when we need to store the symbol per prototype to allow e.g. material disposing to iterate those and dispose all
|
|
10
|
-
const backingField = fieldName + "__needle"; // Symbol(fieldName);// + " (patched)";
|
|
11
|
-
internalAddPatch(prototype, fieldName,
|
|
12
|
+
const backingField = Symbol(fieldName + "__needle"); // Symbol(fieldName);// + " (patched)";
|
|
13
|
+
internalAddPatch(prototype, fieldName, afterCallback, beforeCallback);
|
|
12
14
|
const desc = Object.getOwnPropertyDescriptor(prototype, fieldName);
|
|
15
|
+
const existing = prototype[fieldName];
|
|
16
|
+
console.log(prototype);
|
|
13
17
|
if (desc) {
|
|
14
|
-
// TODO: check if the property is writable
|
|
15
|
-
// the property might be a method in which case we want to wrap it
|
|
16
|
-
if (typeof desc.value === "function") {
|
|
17
|
-
const method = desc.value;
|
|
18
|
-
if (method) {
|
|
19
|
-
if (_wrappedMethods.has(method)) {
|
|
20
|
-
return;
|
|
21
|
-
}
|
|
22
|
-
_wrappedMethods.add(method);
|
|
23
|
-
prototype[fieldName] = function (...args) {
|
|
24
|
-
// call the original method
|
|
25
|
-
const result = method.apply(this, args);
|
|
26
|
-
// call the patches
|
|
27
|
-
const patches = getPatches(prototype, fieldName);
|
|
28
|
-
if (patches) {
|
|
29
|
-
for (const patch of patches) {
|
|
30
|
-
patch(this, result, ...args);
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
return result;
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
else {
|
|
37
|
-
// TODO: declare method?
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
else if (prototype.hasOwnProperty(backingField)) {
|
|
42
18
|
}
|
|
43
19
|
else {
|
|
44
20
|
Object.defineProperty(prototype, fieldName, {
|
|
45
21
|
set: function (value) {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
22
|
+
console.log("setting", fieldName, value);
|
|
23
|
+
if (typeof value === "function") {
|
|
24
|
+
this[backingField] = addWrapper(value, prototype, fieldName);
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
const prev = this[backingField];
|
|
28
|
+
executePrefixes(prototype, fieldName, this, prev, value);
|
|
29
|
+
this[backingField] = value;
|
|
30
|
+
executePostFixes(prototype, fieldName, this, prev, value);
|
|
31
|
+
}
|
|
49
32
|
},
|
|
50
33
|
get: function () {
|
|
51
|
-
|
|
34
|
+
console.log("GET", fieldName);
|
|
35
|
+
const value = this[backingField];
|
|
36
|
+
if (typeof value === "function") {
|
|
37
|
+
if (value[backingField]) {
|
|
38
|
+
return value[backingField];
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return value;
|
|
52
42
|
}
|
|
53
43
|
});
|
|
54
44
|
}
|
|
55
45
|
}
|
|
46
|
+
function addWrapper(originalFunction, prototype, fieldname) {
|
|
47
|
+
return function (...args) {
|
|
48
|
+
executePrefixes(prototype, fieldname, this, ...args);
|
|
49
|
+
const result = originalFunction.apply(this, args);
|
|
50
|
+
executePostFixes(prototype, fieldname, this, result, ...args);
|
|
51
|
+
return result;
|
|
52
|
+
};
|
|
53
|
+
}
|
|
56
54
|
export function removePatch(prototype, fieldName, cb) {
|
|
57
55
|
const patches = getPatches(prototype, fieldName);
|
|
58
56
|
if (patches) {
|
|
@@ -63,35 +61,54 @@ export function removePatch(prototype, fieldName, cb) {
|
|
|
63
61
|
}
|
|
64
62
|
}
|
|
65
63
|
}
|
|
66
|
-
const
|
|
64
|
+
export const NeedlePatchesKey = "Needle:Patches";
|
|
65
|
+
function patches() {
|
|
66
|
+
if (!globalThis[NeedlePatchesKey]) {
|
|
67
|
+
globalThis[NeedlePatchesKey] = new WeakMap();
|
|
68
|
+
}
|
|
69
|
+
return globalThis[NeedlePatchesKey];
|
|
70
|
+
}
|
|
67
71
|
function getPatches(prototype, fieldName) {
|
|
68
|
-
let patchesMap = patches.get(prototype);
|
|
72
|
+
let patchesMap = patches().get(prototype);
|
|
69
73
|
if (!patchesMap) {
|
|
70
74
|
return null;
|
|
71
75
|
}
|
|
72
76
|
return patchesMap.get(fieldName);
|
|
73
77
|
;
|
|
74
78
|
}
|
|
75
|
-
function internalAddPatch(prototype, fieldName,
|
|
76
|
-
let patchesMap = patches.get(prototype);
|
|
79
|
+
function internalAddPatch(prototype, fieldName, postfix, prefix) {
|
|
80
|
+
let patchesMap = patches().get(prototype);
|
|
77
81
|
if (!patchesMap) {
|
|
78
82
|
patchesMap = new Map();
|
|
79
|
-
patches.set(prototype, patchesMap);
|
|
83
|
+
patches().set(prototype, patchesMap);
|
|
80
84
|
}
|
|
81
85
|
let patchList = patchesMap.get(fieldName);
|
|
82
86
|
if (!patchList) {
|
|
83
87
|
patchList = [];
|
|
84
88
|
patchesMap.set(fieldName, patchList);
|
|
85
89
|
}
|
|
86
|
-
patchList.push(
|
|
90
|
+
patchList.push({
|
|
91
|
+
prefix: prefix,
|
|
92
|
+
postfix: postfix
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
function executePrefixes(prototype, fieldName, instance, ...args) {
|
|
96
|
+
if (!instance)
|
|
97
|
+
return;
|
|
98
|
+
const patches = getPatches(prototype, fieldName);
|
|
99
|
+
if (patches) {
|
|
100
|
+
for (const patchInfo of patches) {
|
|
101
|
+
patchInfo.prefix?.call(instance, ...args);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
87
104
|
}
|
|
88
|
-
function
|
|
105
|
+
function executePostFixes(prototype, fieldName, instance, result, ...args) {
|
|
89
106
|
if (!instance)
|
|
90
107
|
return;
|
|
91
108
|
const patches = getPatches(prototype, fieldName);
|
|
92
109
|
if (patches) {
|
|
93
|
-
for (const
|
|
94
|
-
|
|
110
|
+
for (const patchInfo of patches) {
|
|
111
|
+
patchInfo.postfix?.call(instance, result, ...args);
|
|
95
112
|
}
|
|
96
113
|
}
|
|
97
114
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine_patcher.js","sourceRoot":"","sources":["../../src/engine/engine_patcher.ts"],"names":[],"mappings":"AACA,iGAAiG;AAEjG,MAAM,eAAe,GAAG,IAAI,OAAO,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"engine_patcher.js","sourceRoot":"","sources":["../../src/engine/engine_patcher.ts"],"names":[],"mappings":"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"}
|