MCPcopy Create free account
hub / github.com/esengine/esengine / readNode

Function readNode

scripts/check-bone-hierarchy.mjs:23–119  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

21let offset = 27;
22
23function readNode() {
24 let endOffset, numProperties, propertyListLen, nameLen;
25
26 if (is64Bit) {
27 endOffset = Number(view.getBigUint64(offset, true));
28 numProperties = Number(view.getBigUint64(offset + 8, true));
29 propertyListLen = Number(view.getBigUint64(offset + 16, true));
30 nameLen = view.getUint8(offset + 24);
31 offset += 25;
32 } else {
33 endOffset = view.getUint32(offset, true);
34 numProperties = view.getUint32(offset + 4, true);
35 propertyListLen = view.getUint32(offset + 8, true);
36 nameLen = view.getUint8(offset + 12);
37 offset += 13;
38 }
39
40 if (endOffset === 0) return null;
41
42 const name = new TextDecoder().decode(buffer.slice(offset, offset + nameLen));
43 offset += nameLen;
44
45 const properties = [];
46 const propsEnd = offset + propertyListLen;
47
48 while (offset < propsEnd) {
49 const typeCode = String.fromCharCode(buffer[offset]);
50 offset++;
51
52 switch (typeCode) {
53 case 'Y': properties.push(view.getInt16(offset, true)); offset += 2; break;
54 case 'C': properties.push(buffer[offset] !== 0); offset += 1; break;
55 case 'I': properties.push(view.getInt32(offset, true)); offset += 4; break;
56 case 'F': properties.push(view.getFloat32(offset, true)); offset += 4; break;
57 case 'D': properties.push(view.getFloat64(offset, true)); offset += 8; break;
58 case 'L': properties.push(view.getBigInt64(offset, true)); offset += 8; break;
59 case 'S':
60 case 'R':
61 const strLen = view.getUint32(offset, true); offset += 4;
62 if (typeCode === 'S') {
63 properties.push(new TextDecoder().decode(buffer.slice(offset, offset + strLen)));
64 } else {
65 properties.push(buffer.slice(offset, offset + strLen));
66 }
67 offset += strLen;
68 break;
69 case 'f': case 'd': case 'l': case 'i': case 'b':
70 const arrayLen = view.getUint32(offset, true);
71 const encoding = view.getUint32(offset + 4, true);
72 const compressedLen = view.getUint32(offset + 8, true);
73 offset += 12;
74
75 if (encoding === 0) {
76 const elemSize = typeCode === 'd' || typeCode === 'l' ? 8 : 4;
77 const arr = [];
78 for (let i = 0; i < arrayLen; i++) {
79 if (typeCode === 'd') arr.push(view.getFloat64(offset + i * 8, true));
80 else if (typeCode === 'f') arr.push(view.getFloat32(offset + i * 4, true));

Callers 1

Calls 8

getUint8Method · 0.80
getUint32Method · 0.80
getInt16Method · 0.80
getInt32Method · 0.80
getFloat32Method · 0.80
getFloat64Method · 0.80
pushMethod · 0.65
decodeMethod · 0.45

Tested by

no test coverage detected