@divinevoxel/vlox 0.0.72 → 0.0.73

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 (174) hide show
  1. package/Contexts/Render/DivineVoxelEngineRender.d.ts +1 -1
  2. package/Contexts/World/DivineVoxelEngineWorld.d.ts +1 -1
  3. package/Init/StartConstructor.js +6 -4
  4. package/Init/StartWorld.d.ts +1 -1
  5. package/Mesher/Functions/CompactVoxelMesh.d.ts +2 -2
  6. package/Mesher/Functions/CompactVoxelMesh.js +1 -1
  7. package/Mesher/Functions/MeshSection.js +20 -8
  8. package/Mesher/Functions/MeshTexture.d.ts +1 -1
  9. package/Mesher/Functions/MeshTexture.js +3 -4
  10. package/Mesher/Geomtry/Primitives/QuadVertexData.d.ts +12 -10
  11. package/Mesher/Geomtry/Primitives/QuadVertexData.js +49 -56
  12. package/Mesher/Geomtry/VoxelGeometryBuilder.d.ts +2 -2
  13. package/Mesher/Geomtry/VoxelGeometryBuilder.js +2 -2
  14. package/Mesher/Geomtry/VoxelMesh.d.ts +1 -1
  15. package/Mesher/Geomtry/VoxelMesh.js +2 -2
  16. package/Mesher/Geomtry/index.d.ts +0 -1
  17. package/Mesher/Geomtry/index.js +0 -1
  18. package/Mesher/InitMesher.js +1 -1
  19. package/Mesher/InitTask.js +4 -22
  20. package/Mesher/Models/Common/Calc/FaceDataCalc.d.ts +2 -2
  21. package/Mesher/Models/Common/Calc/FaceDataCalc.js +37 -30
  22. package/Mesher/Models/Nodes/Custom/Liquid/FlowGradient.d.ts +2 -2
  23. package/Mesher/Models/Nodes/Custom/Liquid/FlowGradient.js +1 -1
  24. package/Mesher/Models/Nodes/Custom/Liquid/LiquidGeomtryNode.js +11 -17
  25. package/Mesher/Models/Nodes/GeometryNode.d.ts +2 -2
  26. package/Mesher/Models/Nodes/Ruled/BoxVoxelGeometryNode.d.ts +1 -0
  27. package/Mesher/Models/Nodes/Ruled/BoxVoxelGeometryNode.js +24 -12
  28. package/Mesher/{Tools → Models/Protocols}/OutlinedVoxelTool.d.ts +1 -1
  29. package/Mesher/{Tools → Models/Protocols}/OutlinedVoxelTool.js +1 -1
  30. package/Mesher/Models/RenderedMaterials.d.ts +6 -0
  31. package/Mesher/{RenderedMaterials.js → Models/RenderedMaterials.js} +2 -2
  32. package/Mesher/Models/VoxelConstructor.d.ts +3 -3
  33. package/Mesher/Models/VoxelGeometryBuilderCacheSpace.d.ts +1 -3
  34. package/Mesher/Models/VoxelGeometryBuilderCacheSpace.js +0 -23
  35. package/Mesher/{Tools/VoxelMesherDataTool.d.ts → Models/VoxelModelBuilder.d.ts} +4 -5
  36. package/Mesher/{Tools/VoxelMesherDataTool.js → Models/VoxelModelBuilder.js} +11 -7
  37. package/Models/Defaults/CubeVoxelGeometry.js +4 -0
  38. package/Models/Defaults/CubeVoxelModels.js +344 -344
  39. package/Models/Defaults/LiquidVoxelModel.js +2 -2
  40. package/Models/Defaults/PanelVoxelModels.js +432 -432
  41. package/Models/Defaults/StairVoxelModel.js +576 -576
  42. package/Models/Examples.js +469 -456
  43. package/Models/Rules/Functions/BuildFinalInputs.js +9 -7
  44. package/Models/Rules/Functions/BuildGeomtryInputs.js +8 -5
  45. package/Models/Rules/Functions/BuildRules.js +2 -2
  46. package/Models/Rules/{VoxelModelManager.d.ts → VoxelModelRuleBuilderRegister.d.ts} +1 -1
  47. package/Models/Rules/VoxelModelRuleBuilderRegister.js +178 -0
  48. package/Models/VoxelModel.types.d.ts +14 -5
  49. package/Renderer/Classes/SectorMesh.d.ts +3 -4
  50. package/Renderer/Classes/SectorMesh.js +6 -11
  51. package/Renderer/InitTasks.js +6 -7
  52. package/Renderer/MeshManager.js +2 -2
  53. package/Renderer/MeshRegister.js +2 -1
  54. package/Settings/EngineSettings.d.ts +1 -1
  55. package/Settings/EngineSettings.js +3 -5
  56. package/Settings/EngineSettings.types.d.ts +17 -18
  57. package/Settings/EngineSettings.types.js +16 -15
  58. package/Tasks/IWG/IWG.d.ts +2 -1
  59. package/Tasks/IWG/IWG.js +9 -3
  60. package/Tasks/IWG/Internal/Classes/BuildQueue.d.ts +11 -0
  61. package/Tasks/IWG/Internal/Classes/BuildQueue.js +49 -0
  62. package/Tasks/IWG/Internal/Classes/Generator.d.ts +6 -1
  63. package/Tasks/IWG/Internal/Classes/Generator.js +13 -1
  64. package/Tasks/IWG/Internal/Classes/IWGTaskBase.js +2 -2
  65. package/Tasks/IWG/Internal/Functions/runBuildUpdate.js +21 -2
  66. package/Tasks/IWG/Internal/IWGTasks.d.ts +0 -4
  67. package/Tasks/IWG/Internal/IWGTasks.js +0 -10
  68. package/Tasks/IWG/Internal/IWGTools.d.ts +1 -1
  69. package/Tasks/IWG/Procedures/SaveAllSectors.js +2 -0
  70. package/Tasks/Update/UpdateTask.d.ts +3 -1
  71. package/Tasks/Update/UpdateTask.js +28 -2
  72. package/Tasks/Update/VoxelUpdate.js +6 -0
  73. package/Tasks/WorldGeneration/WorldGenBrush.js +1 -1
  74. package/Templates/Cursor/TemplateCursor.d.ts +2 -2
  75. package/Templates/Cursor/TemplateCursor.js +1 -2
  76. package/Templates/VoxelTemplates.types.d.ts +1 -1
  77. package/Textures/Classes/CompiledTexture.d.ts +18 -0
  78. package/Textures/Classes/CompiledTexture.js +50 -0
  79. package/Textures/Classes/CompiledTextureAnimation.d.ts +12 -0
  80. package/Textures/Classes/CompiledTextureAnimation.js +27 -0
  81. package/Textures/Classes/TextureAnimationTexture.d.ts +10 -0
  82. package/Textures/Classes/TextureAnimationTexture.js +32 -0
  83. package/Textures/Functions/BuildTextureData.d.ts +10 -0
  84. package/Textures/Functions/BuildTextureData.js +205 -0
  85. package/Textures/Texture.types.d.ts +50 -64
  86. package/Textures/TextureManager.d.ts +8 -19
  87. package/Textures/TextureManager.js +28 -166
  88. package/Tools/Brush/Brush.d.ts +1 -1
  89. package/Tools/Brush/Brush.js +39 -7
  90. package/Util/Binary/BinaryArrays.d.ts +6 -0
  91. package/Util/Binary/BinaryArrays.js +25 -0
  92. package/Util/Binary/BinaryBuffer.d.ts +29 -0
  93. package/Util/Binary/BinaryBuffer.js +130 -0
  94. package/Util/Binary/{BitArray.d.ts → BinaryFunctions.d.ts} +1 -2
  95. package/Util/Binary/BinaryFunctions.js +11 -0
  96. package/Voxels/Cursor/DataCursor.interface.d.ts +5 -0
  97. package/Voxels/Cursor/VoxelCursor.interface.d.ts +1 -1
  98. package/Voxels/Cursor/VoxelCursor.interface.js +8 -11
  99. package/Voxels/Data/VoxelPalettesRegister.d.ts +0 -5
  100. package/Voxels/Data/VoxelPalettesRegister.js +0 -9
  101. package/Voxels/Data/VoxelTagsRegister.js +7 -7
  102. package/Voxels/Functions/BuildStateData.js +9 -9
  103. package/Voxels/Functions/BuildTagAndPaletteData.js +2 -4
  104. package/Voxels/InitVoxelData.js +12 -13
  105. package/Voxels/State/Schema/StateSchema.d.ts +1 -1
  106. package/Voxels/Types/Voxel.types.d.ts +18 -0
  107. package/Voxels/Types/Voxel.types.js +6 -2
  108. package/World/Archive/Archive.types.d.ts +38 -34
  109. package/World/Archive/Functions/ArchiveArea.js +16 -24
  110. package/World/Archive/Functions/ArchiveSector.js +477 -192
  111. package/World/Archive/Functions/ImportSector.d.ts +3 -3
  112. package/World/Archive/Functions/ImportSector.js +202 -141
  113. package/World/Archive/Functions/Shared.d.ts +6 -0
  114. package/World/Archive/Functions/Shared.js +75 -0
  115. package/World/Archive/InitTasks.js +30 -13
  116. package/World/Cursor/SectionCursor.d.ts +2 -2
  117. package/World/Cursor/SectionCursor.js +2 -3
  118. package/World/Cursor/SectorCursor.d.ts +2 -2
  119. package/World/Cursor/SectorCursor.js +1 -2
  120. package/World/Cursor/WorldCursor.d.ts +2 -2
  121. package/World/Cursor/WorldCursor.js +1 -2
  122. package/World/Cursor/WorldVoxelCursor.js +1 -0
  123. package/World/InitTasks.d.ts +1 -1
  124. package/World/Lock/WorldLock.d.ts +1 -1
  125. package/World/Section/Section.d.ts +12 -16
  126. package/World/Section/Section.js +62 -20
  127. package/World/Section/SectionState.d.ts +10 -0
  128. package/World/Section/SectionState.js +11 -0
  129. package/World/Sector/Sector.d.ts +14 -6
  130. package/World/Sector/Sector.js +67 -17
  131. package/World/Sector/SectorHeightMap.js +2 -2
  132. package/World/Sector/SectorState.d.ts +14 -6
  133. package/World/Sector/SectorState.js +28 -15
  134. package/World/Types/WorldStorage.interface.js +1 -0
  135. package/World/WorldRegister.d.ts +4 -0
  136. package/World/WorldRegister.js +15 -3
  137. package/World/WorldSpaces.d.ts +4 -0
  138. package/World/WorldSpaces.js +19 -6
  139. package/package.json +1 -1
  140. package/Mesher/Functions/CompactMesh.d.ts +0 -2
  141. package/Mesher/Functions/CompactMesh.js +0 -42
  142. package/Mesher/Geomtry/GeometryNormals.d.ts +0 -10
  143. package/Mesher/Geomtry/GeometryNormals.js +0 -52
  144. package/Mesher/Geomtry/MeshData.types.d.ts +0 -13
  145. package/Mesher/Geomtry/MeshData.types.js +0 -6
  146. package/Mesher/Geomtry/Tools/MesherDataTools.d.ts +0 -7
  147. package/Mesher/Geomtry/Tools/MesherDataTools.js +0 -12
  148. package/Mesher/Geomtry/Tools/index.d.ts +0 -1
  149. package/Mesher/Geomtry/Tools/index.js +0 -1
  150. package/Mesher/RenderedMaterials.d.ts +0 -6
  151. package/Models/Rules/VoxelModelManager.js +0 -82
  152. package/Textures/TextureAnimations.d.ts +0 -4
  153. package/Textures/TextureAnimations.js +0 -35
  154. package/Textures/TextureArray.d.ts +0 -47
  155. package/Textures/TextureArray.js +0 -202
  156. package/Textures/TextureBuilder.d.ts +0 -13
  157. package/Textures/TextureBuilder.js +0 -120
  158. package/Textures/TextureRegister.d.ts +0 -9
  159. package/Textures/TextureRegister.js +0 -28
  160. package/Tools/DataCursor.interface.d.ts +0 -5
  161. package/Tools/DataCursor.interface.js +0 -2
  162. package/Util/Binary/BitArray.js +0 -16
  163. package/World/Structs/WorldDataStructProperties.d.ts +0 -8
  164. package/World/Structs/WorldDataStructProperties.js +0 -9
  165. /package/Mesher/{Tools → Geomtry}/VoxelMeshBVHBuilder.d.ts +0 -0
  166. /package/Mesher/{Tools → Geomtry}/VoxelMeshBVHBuilder.js +0 -0
  167. /package/Mesher/Geomtry/{Buffers.d.ts → VoxelMeshBuffers.d.ts} +0 -0
  168. /package/Mesher/Geomtry/{Buffers.js → VoxelMeshBuffers.js} +0 -0
  169. /package/Mesher/{Tools → Geomtry}/VoxelMeshVertexStructCursor.d.ts +0 -0
  170. /package/Mesher/{Tools → Geomtry}/VoxelMeshVertexStructCursor.js +0 -0
  171. /package/Mesher/{VoxelShaderData.d.ts → Geomtry/VoxelShaderData.d.ts} +0 -0
  172. /package/Mesher/{VoxelShaderData.js → Geomtry/VoxelShaderData.js} +0 -0
  173. /package/{World/Storage/WorldStorage.interface.js → Voxels/Cursor/DataCursor.interface.js} +0 -0
  174. /package/World/{Storage → Types}/WorldStorage.interface.d.ts +0 -0
@@ -0,0 +1,25 @@
1
+ import { getBitValue, setBitValue } from "./BinaryFunctions";
2
+ export function getBitArrayIndex(data, arrayIndex) {
3
+ const arrayByteIndex = Math.floor(arrayIndex / 8);
4
+ const bitPosition = arrayIndex % 8;
5
+ return getBitValue(data[arrayByteIndex], bitPosition, 1);
6
+ }
7
+ export function setBitArrayIndex(data, arrayIndex, value) {
8
+ const arrayByteIndex = Math.floor(arrayIndex / 8);
9
+ const bitPosition = arrayIndex % 8;
10
+ data[arrayByteIndex] = setBitValue(data[arrayByteIndex], bitPosition, value & 1, 1);
11
+ }
12
+ export function getNibbleArrayIndex(data, arrayIndex) {
13
+ return getBitValue(data[(arrayIndex / 2) >> 0], arrayIndex % 2 === 0 ? 4 : 0, 4);
14
+ }
15
+ export function setNibbleArrayIndex(data, arrayIndex, value) {
16
+ const arrayByteIndex = (arrayIndex / 2) >> 0;
17
+ data[arrayByteIndex] = setBitValue(data[arrayByteIndex], arrayIndex % 2 === 0 ? 4 : 0, value, 4);
18
+ }
19
+ export function getHalfNibbleArrayIndex(data, arrayIndex) {
20
+ return getBitValue(data[(arrayIndex / 4) >> 0], (arrayIndex % 4) * 2, 2);
21
+ }
22
+ export function setHalfNibbleArrayIndex(data, arrayIndex, value) {
23
+ const arrayByteIndex = (arrayIndex / 4) >> 0;
24
+ data[arrayByteIndex] = setBitValue(data[arrayByteIndex], (arrayIndex % 4) * 2, value, 2);
25
+ }
@@ -0,0 +1,29 @@
1
+ export type BinaryBufferTypes =
2
+ /**If the buffer compressed to a single value the type will be a vlaue */
3
+ "value" | "1-bit" | "2-bit" | "4-bit" | "8-bit" | "16-bit";
4
+ export interface BinaryBufferData {
5
+ type?: BinaryBufferTypes;
6
+ buffer: number | Uint8Array | Uint16Array;
7
+ }
8
+ export interface BinaryBuffer extends BinaryBufferData {
9
+ }
10
+ export declare class BinaryBuffer {
11
+ static BytePaletteMax: number;
12
+ static NibblePaletteMax: number;
13
+ static HalfNibblePaletteMax: number;
14
+ static BitPaletteMax: number;
15
+ static DetermineSubByteArray: (paletteSize: number) => BinaryBufferTypes | null;
16
+ static CreateBufferForType(type: BinaryBufferTypes, length: number): Uint16Array | Uint8Array;
17
+ static GetConvertedBufferSize(source: Uint8Array | Uint16Array, type: BinaryBufferTypes): number;
18
+ static GetIndexLength(source: Uint8Array | Uint16Array, type: BinaryBufferTypes): number;
19
+ static ReadBufferAtIndex(source: Uint8Array | Uint16Array, type: BinaryBufferTypes, index: number): number;
20
+ static SetBufferAtIndex(source: Uint8Array | Uint16Array, type: BinaryBufferTypes, index: number, value: number): number | void;
21
+ static Convert(source: Uint8Array | Uint16Array, sourceType: BinaryBufferTypes, destinationType: BinaryBufferTypes): Uint16Array | Uint8Array;
22
+ static Create(data: Partial<BinaryBufferData>): BinaryBufferData;
23
+ constructor(data: BinaryBufferData);
24
+ getValue(index: number): number;
25
+ toJSON(): {
26
+ type?: BinaryBufferTypes | undefined;
27
+ buffer: number | Uint16Array | Uint8Array;
28
+ };
29
+ }
@@ -0,0 +1,130 @@
1
+ import { getBitArrayIndex, getHalfNibbleArrayIndex, getNibbleArrayIndex, setBitArrayIndex, setHalfNibbleArrayIndex, setNibbleArrayIndex, } from "./BinaryArrays";
2
+ const excludeStore = ["16-bit", "8-bit", "value"];
3
+ export class BinaryBuffer {
4
+ static BytePaletteMax = 256;
5
+ static NibblePaletteMax = 16;
6
+ static HalfNibblePaletteMax = 4;
7
+ static BitPaletteMax = 2;
8
+ static DetermineSubByteArray = (paletteSize) => {
9
+ if (paletteSize == BinaryBuffer.BitPaletteMax)
10
+ return "1-bit";
11
+ if (paletteSize > BinaryBuffer.BitPaletteMax &&
12
+ paletteSize <= BinaryBuffer.HalfNibblePaletteMax)
13
+ return "2-bit";
14
+ if (paletteSize > BinaryBuffer.HalfNibblePaletteMax &&
15
+ paletteSize <= BinaryBuffer.NibblePaletteMax)
16
+ return "4-bit";
17
+ if (paletteSize > BinaryBuffer.NibblePaletteMax &&
18
+ paletteSize <= BinaryBuffer.BytePaletteMax)
19
+ return "8-bit";
20
+ return null;
21
+ };
22
+ static CreateBufferForType(type, length) {
23
+ if (type == "16-bit")
24
+ return new Uint16Array(length);
25
+ if (type == "8-bit")
26
+ return new Uint8Array(length);
27
+ if (type == "1-bit")
28
+ return new Uint8Array(length);
29
+ if (type == "2-bit")
30
+ return new Uint8Array(length);
31
+ if (type == "4-bit")
32
+ return new Uint8Array(length);
33
+ return new Uint8Array(length);
34
+ }
35
+ static GetConvertedBufferSize(source, type) {
36
+ if (type == "16-bit" || type == "8-bit")
37
+ return source.length;
38
+ if (type == "1-bit")
39
+ return source.length / 8;
40
+ if (type == "4-bit")
41
+ return source.length / 2;
42
+ if (type == "2-bit")
43
+ return source.length / 4;
44
+ if (type == "value")
45
+ return 1;
46
+ return source.length;
47
+ }
48
+ static GetIndexLength(source, type) {
49
+ if (type == "16-bit" || type == "8-bit")
50
+ return source.length;
51
+ if (type == "1-bit")
52
+ return source.length * 8;
53
+ if (type == "4-bit")
54
+ return source.length * 2;
55
+ if (type == "2-bit")
56
+ return source.length * 4;
57
+ if (type == "value")
58
+ return 1;
59
+ return source.length;
60
+ }
61
+ static ReadBufferAtIndex(source, type, index) {
62
+ if (type == "16-bit" || type == "8-bit")
63
+ return source[index];
64
+ if (type == "1-bit")
65
+ return getBitArrayIndex(source, index);
66
+ if (type == "4-bit")
67
+ return getNibbleArrayIndex(source, index);
68
+ if (type == "2-bit")
69
+ return getHalfNibbleArrayIndex(source, index);
70
+ return source[index];
71
+ }
72
+ static SetBufferAtIndex(source, type, index, value) {
73
+ if (type == "16-bit" || type == "8-bit") {
74
+ return (source[index] = value);
75
+ }
76
+ if (type == "1-bit")
77
+ return setBitArrayIndex(source, index, value);
78
+ if (type == "4-bit")
79
+ return setNibbleArrayIndex(source, index, value);
80
+ if (type == "2-bit")
81
+ return setHalfNibbleArrayIndex(source, index, value);
82
+ return source[index];
83
+ }
84
+ static Convert(source, sourceType, destinationType) {
85
+ if (sourceType == destinationType ||
86
+ (sourceType == "16-bit" && destinationType == "8-bit") ||
87
+ (sourceType == "8-bit" && destinationType == "16-bit")) {
88
+ const destination = this.CreateBufferForType(destinationType, this.GetConvertedBufferSize(source, destinationType));
89
+ destination.set(source);
90
+ return destination;
91
+ }
92
+ const length = this.GetIndexLength(source, sourceType);
93
+ const destination = this.CreateBufferForType(destinationType, this.GetConvertedBufferSize(source, destinationType));
94
+ for (let i = 0; i < length; i++) {
95
+ this.SetBufferAtIndex(destination, destinationType, i, this.ReadBufferAtIndex(source, sourceType, i));
96
+ }
97
+ return destination;
98
+ }
99
+ static Create(data) {
100
+ return {
101
+ buffer: 0,
102
+ ...data,
103
+ };
104
+ }
105
+ constructor(data) {
106
+ this.buffer = data.buffer;
107
+ if (data.type) {
108
+ this.type = data.type;
109
+ }
110
+ else {
111
+ if (typeof data.buffer === "number")
112
+ this.type = "value";
113
+ if (data.buffer instanceof Uint16Array)
114
+ this.type = "16-bit";
115
+ if (data.buffer instanceof Uint8Array)
116
+ this.type = "8-bit";
117
+ }
118
+ }
119
+ getValue(index) {
120
+ if (typeof this.buffer == "number")
121
+ return this.buffer;
122
+ return BinaryBuffer.ReadBufferAtIndex(this.buffer, this.type, index);
123
+ }
124
+ toJSON() {
125
+ return {
126
+ buffer: this.buffer,
127
+ ...(excludeStore.includes(this.type) ? {} : { type: this.type }),
128
+ };
129
+ }
130
+ }
@@ -1,4 +1,3 @@
1
1
  export declare function getBitValue(data: number, bitIndex: number, bitSize: number): number;
2
2
  export declare function setBitValue(data: number, bitIndex: number, value: number, bitSize: number): number;
3
- export declare function getBitArrayIndex(data: Uint8Array, arrayIndex: number): number;
4
- export declare function setBitArrayIndex(data: Uint8Array, arrayIndex: number, value: number): void;
3
+ export declare function forceMultipleOf2(n: number): number;
@@ -0,0 +1,11 @@
1
+ export function getBitValue(data, bitIndex, bitSize) {
2
+ const mask = (1 << bitSize) - 1;
3
+ return (data >>> bitIndex) & mask;
4
+ }
5
+ export function setBitValue(data, bitIndex, value, bitSize) {
6
+ const mask = (1 << bitSize) - 1;
7
+ return (data & ~(mask << bitIndex)) | ((value & mask) << bitIndex);
8
+ }
9
+ export function forceMultipleOf2(n) {
10
+ return n % 2 === 0 ? n : n + 1;
11
+ }
@@ -0,0 +1,5 @@
1
+ import { VoxelCursorInterface } from "./VoxelCursor.interface";
2
+ export interface DataCursorInterface {
3
+ getVoxel(x: number, y: number, z: number): VoxelCursorInterface | null;
4
+ inBounds(x: number, y: number, z: number): boolean;
5
+ }
@@ -59,7 +59,7 @@ export declare abstract class VoxelCursorInterface {
59
59
  setId(id: number): this;
60
60
  setStringId(id: string): this;
61
61
  getStringId(): string;
62
- setName(name: string): void;
62
+ setName(name: string): this;
63
63
  getName(): string;
64
64
  isSameVoxel(voxel: VoxelCursorInterface): boolean;
65
65
  copy(cursor: VoxelCursorInterface): this;
@@ -54,7 +54,7 @@ export class VoxelCursorInterface {
54
54
  return this._substanceTags;
55
55
  }
56
56
  isOpaque() {
57
- return this._tags[VoxelTagIds.isTransparent];
57
+ return !this._tags[VoxelTagIds.isTransparent];
58
58
  }
59
59
  getMod() {
60
60
  return this.mod[this._index];
@@ -105,17 +105,14 @@ export class VoxelCursorInterface {
105
105
  getLight() {
106
106
  if (this._loadedId == 0)
107
107
  return this.light[this._index];
108
- const lightValue = this._tags[VoxelTagIds.lightValue];
109
108
  if (this.isOpaque()) {
110
- if (this.isLightSource() && lightValue) {
111
- return lightValue;
112
- }
113
- else {
114
- return -1;
109
+ if (this.isLightSource()) {
110
+ return this._tags[VoxelTagIds.lightValue];
115
111
  }
112
+ return -1;
116
113
  }
117
- if (this.isLightSource() && lightValue) {
118
- return this._lightData.mixLight(this.light[this._index], lightValue);
114
+ if (this.isLightSource()) {
115
+ return this._lightData.mixLight(this.light[this._index], this._tags[VoxelTagIds.lightValue]);
119
116
  }
120
117
  return this.light[this._index];
121
118
  }
@@ -178,10 +175,10 @@ export class VoxelCursorInterface {
178
175
  return VoxelPalettesRegister.voxels.getStringId(this.id);
179
176
  }
180
177
  setName(name) {
181
- this.setStringId(VoxelPalettesRegister.voxelName.getId(name));
178
+ return this.setStringId(VoxelPalettesRegister.voxelNametoIdMap.get(name));
182
179
  }
183
180
  getName() {
184
- return this.getStringId();
181
+ return VoxelPalettesRegister.voxelIdToNameMap.get(this.getStringId());
185
182
  }
186
183
  isSameVoxel(voxel) {
187
184
  return this.getId() == voxel.getId();
@@ -5,9 +5,4 @@ export declare class VoxelPalettesRegister {
5
5
  static voxels: StringPalette;
6
6
  static voxelNametoIdMap: Map<string, string>;
7
7
  static voxelIdToNameMap: Map<string, string>;
8
- static loadInVoxel(voxelPalette: string[], nameToIdMap: Record<string, string>, idToNameMap: Record<string, string>): void;
9
- static voxelName: {
10
- getId: (name: string) => string;
11
- getName: (id: string) => string;
12
- };
13
8
  }
@@ -5,13 +5,4 @@ export class VoxelPalettesRegister {
5
5
  static voxels = new StringPalette();
6
6
  static voxelNametoIdMap = new Map();
7
7
  static voxelIdToNameMap = new Map();
8
- static loadInVoxel(voxelPalette, nameToIdMap, idToNameMap) {
9
- this.voxels = new StringPalette(voxelPalette);
10
- this.voxelNametoIdMap = new Map(Object.entries(nameToIdMap));
11
- this.voxelIdToNameMap = new Map(Object.entries(idToNameMap));
12
- }
13
- static voxelName = {
14
- getId: (name) => this.voxelNametoIdMap.get(name),
15
- getName: (id) => this.voxelIdToNameMap.get(id),
16
- };
17
8
  }
@@ -1,4 +1,4 @@
1
- import { VoxelSubstanceTagIdds, VoxelTagIds, } from "./VoxelTag.types";
1
+ import { VoxelSubstanceTagIdds as VoxelSubstanceTagIds, VoxelTagIds, } from "./VoxelTag.types";
2
2
  export class VoxelTagsRegister {
3
3
  static IncludedVoxelTags = [
4
4
  VoxelTagIds.substance,
@@ -14,12 +14,12 @@ export class VoxelTagsRegister {
14
14
  VoxelTagIds.canHaveSecondary,
15
15
  ];
16
16
  static IncludedSubstnacesTags = [
17
- VoxelSubstanceTagIdds.parent,
18
- VoxelSubstanceTagIdds.isSolid,
19
- VoxelSubstanceTagIdds.isTransparent,
20
- VoxelSubstanceTagIdds.isLiquid,
21
- VoxelSubstanceTagIdds.flowRate,
22
- VoxelSubstanceTagIdds.isWindAffected,
17
+ VoxelSubstanceTagIds.parent,
18
+ VoxelSubstanceTagIds.isSolid,
19
+ VoxelSubstanceTagIds.isTransparent,
20
+ VoxelSubstanceTagIds.isLiquid,
21
+ VoxelSubstanceTagIds.flowRate,
22
+ VoxelSubstanceTagIds.isWindAffected,
23
23
  ];
24
24
  static VoxelTagDefaults = {
25
25
  [VoxelTagIds.renderedMaterial]: "dve_solid",
@@ -1,6 +1,6 @@
1
1
  import { StateCompareOperationsMap, StateLogicOperationsMap, } from "../State/State.types";
2
2
  import { StringPalette } from "../../Util/StringPalette";
3
- import { VoxelModelManager } from "../../Models/Rules/VoxelModelManager";
3
+ import { VoxelModelRuleBuilderRegister } from "../../Models/Rules/VoxelModelRuleBuilderRegister";
4
4
  import { VoxelTagStates } from "../Data/VoxelTagStates";
5
5
  import { VoxelPalettesRegister } from "../Data/VoxelPalettesRegister";
6
6
  import { StateSchema } from "../State/Schema/StateSchema";
@@ -182,7 +182,7 @@ export function BuildStateData(model, geoPalette) {
182
182
  if (geometryLinkPalette.isRegistered(node.id))
183
183
  continue;
184
184
  const linkId = geometryLinkPalette.register(node.id);
185
- geometryLinkStateMap[linkId] = geoPalette.getNumberId(VoxelModelManager.getGeometryLinkId(node));
185
+ geometryLinkStateMap[linkId] = geoPalette.getNumberId(VoxelModelRuleBuilderRegister.getGeometryLinkId(node));
186
186
  }
187
187
  }
188
188
  //add geomtry from condiotnal shape states
@@ -192,7 +192,7 @@ export function BuildStateData(model, geoPalette) {
192
192
  if (geometryLinkPalette.isRegistered(node.id))
193
193
  continue;
194
194
  const linkId = geometryLinkPalette.register(node.id);
195
- geometryLinkStateMap[linkId] = geoPalette.getNumberId(VoxelModelManager.getGeometryLinkId(node));
195
+ geometryLinkStateMap[linkId] = geoPalette.getNumberId(VoxelModelRuleBuilderRegister.getGeometryLinkId(node));
196
196
  }
197
197
  }
198
198
  const shapeStateRelativeGeometryMap = [];
@@ -206,15 +206,15 @@ export function BuildStateData(model, geoPalette) {
206
206
  const shapeStateRecord = {};
207
207
  for (const key in data.shapeStatesNodes) {
208
208
  shapeStateGeoLinkPalette.push(data.shapeStatesNodes[key].map((_) => geometryLinkPalette.getNumberId(_.id)));
209
- shapeStateGeometryPalette.push(data.shapeStatesNodes[key].map((_) => geoPalette.getNumberId(VoxelModelManager.getGeometryLinkId(_))));
209
+ shapeStateGeometryPalette.push(data.shapeStatesNodes[key].map((_) => geoPalette.getNumberId(VoxelModelRuleBuilderRegister.getGeometryLinkId(_))));
210
210
  shapeStateRecord[key] = shapeStateGeometryPalette.length - 1;
211
211
  shapeStateRelativeGeometryMap[shapeStateRecord[key]] ??= [];
212
212
  const nodeData = data.shapeStatesNodes[key];
213
213
  for (const node of nodeData) {
214
- shapeStateRelativeGeometryMap[shapeStateRecord[key]][geoPalette.getNumberId(VoxelModelManager.getGeometryLinkId(node))] = relativeGeoId;
214
+ shapeStateRelativeGeometryMap[shapeStateRecord[key]][geoPalette.getNumberId(VoxelModelRuleBuilderRegister.getGeometryLinkId(node))] = relativeGeoId;
215
215
  relativeGeometryByteIndexMap[relativeGeoId] = relativeByteCount;
216
216
  relativeGeoId++;
217
- relativeByteCount += Math.ceil(VoxelModelManager.getGeomtryFromLink(node).faceCount / 8);
217
+ relativeByteCount += Math.ceil(VoxelModelRuleBuilderRegister.getGeomtryFromLink(node).faceCount / 8);
218
218
  }
219
219
  addPathToTree(shapeStateTree, key
220
220
  .split(",")
@@ -229,17 +229,17 @@ export function BuildStateData(model, geoPalette) {
229
229
  const compareOperations = Object.keys(StateCompareOperationsMap);
230
230
  for (const key in data.shapeStatesConditonalNodes) {
231
231
  condiotnalShapeStateNodePalette.push(data.shapeStatesConditonalNodes[key].map((_) => geometryLinkPalette.getNumberId(_.id)));
232
- condiotnalShapeStateGeometryPalette.push(data.shapeStatesConditonalNodes[key].map((_) => geoPalette.getNumberId(VoxelModelManager.getGeometryLinkId(_))));
232
+ condiotnalShapeStateGeometryPalette.push(data.shapeStatesConditonalNodes[key].map((_) => geoPalette.getNumberId(VoxelModelRuleBuilderRegister.getGeometryLinkId(_))));
233
233
  condiotnalShapeStateNodeRecord[key] =
234
234
  condiotnalShapeStateGeometryPalette.length - 1;
235
235
  condiotnalShapeStateRelativeGeometryMap[condiotnalShapeStateNodeRecord[key]] ??= [];
236
236
  const nodeData = data.shapeStatesConditonalNodes[key];
237
237
  for (const node of nodeData) {
238
- condiotnalShapeStateRelativeGeometryMap[condiotnalShapeStateNodeRecord[key]][geoPalette.getNumberId(VoxelModelManager.getGeometryLinkId(node))] =
238
+ condiotnalShapeStateRelativeGeometryMap[condiotnalShapeStateNodeRecord[key]][geoPalette.getNumberId(VoxelModelRuleBuilderRegister.getGeometryLinkId(node))] =
239
239
  relativeGeoId;
240
240
  relativeGeometryByteIndexMap[relativeGeoId] = relativeByteCount;
241
241
  relativeGeoId++;
242
- relativeByteCount += Math.ceil(VoxelModelManager.getGeomtryFromLink(node).faceCount / 8);
242
+ relativeByteCount += Math.ceil(VoxelModelRuleBuilderRegister.getGeomtryFromLink(node).faceCount / 8);
243
243
  }
244
244
  const statement = [];
245
245
  const nodes = key.split(" ");
@@ -4,10 +4,8 @@ export function BuildTagAndPaletteData(props) {
4
4
  for (const voxel of props.voxels) {
5
5
  const tags = {};
6
6
  const voxelId = VoxelPalettesRegister.voxels.register(voxel.id);
7
- if (voxel.name) {
8
- VoxelPalettesRegister.voxelIdToNameMap.set(voxel.id, voxel.name || "");
9
- VoxelPalettesRegister.voxelNametoIdMap.set(voxel.name || "", voxel.id);
10
- }
7
+ VoxelPalettesRegister.voxelIdToNameMap.set(voxel.id, voxel.name || "");
8
+ VoxelPalettesRegister.voxelNametoIdMap.set(voxel.name || voxel.id, voxel.id);
11
9
  for (const tag of VoxelTagsRegister.IncludedVoxelTags) {
12
10
  if (voxel.properties[tag] === undefined) {
13
11
  tags[tag] = VoxelTagsRegister.VoxelTagDefaults[tag] || false;
@@ -4,7 +4,7 @@ import { orientedCube, pillarCube, simpleCube, simpleHalfCube, } from "../Models
4
4
  import { diagonalFlatPanelEastWest, diagonalFlatPanelWestEast, thinPanelDown, thinPanelSouth, thinPanelWest, } from "../Models/Defaults/PanelVoxelGeometry";
5
5
  import { stair } from "../Models/Defaults/StairVoxelModel";
6
6
  import { liquidGeometry, liquidModel, } from "../Models/Defaults/LiquidVoxelModel";
7
- import { VoxelModelManager } from "../Models/Rules/VoxelModelManager";
7
+ import { VoxelModelRuleBuilderRegister } from "../Models/Rules/VoxelModelRuleBuilderRegister";
8
8
  import { BuildRules } from "../Models/Rules/Functions/BuildRules";
9
9
  import { BuildStateData } from "./Functions/BuildStateData";
10
10
  import { BuildFinalInputs } from "../Models/Rules/Functions/BuildFinalInputs";
@@ -30,10 +30,10 @@ function GetModelData(data) {
30
30
  VoxelTagStates.load(syncData.tagState);
31
31
  return syncData;
32
32
  }
33
- VoxelModelManager.registerGeometry(cube, halfDownCube, halfSouthCube, halfWestCube, quaterCubeSouthNorth, quaterCubeUpDown, quaterCubeWestEast, eighthCube, thinPanelDown, thinPanelSouth, thinPanelWest, diagonalFlatPanelEastWest, diagonalFlatPanelWestEast, fencePost, fenceEastWest, fenceNorthsouth, chainGeometry, carpetGeometry, candlesGeometry1, candlesGeometry2, candlesGeometry3, candlesGeometry4, liquidGeometry, ...leverGeometry, ...(data.geometry || []));
34
- VoxelModelManager.registerModels(simpleCube, orientedCube, simpleHalfCube, pillarCube, simpleThinPannel, stair, simpleCrossedPannel, chainModel, carpetModel, candlesModel, leverModel, fence, liquidModel, ...(data.models || []));
33
+ VoxelModelRuleBuilderRegister.registerGeometry(cube, halfDownCube, halfSouthCube, halfWestCube, quaterCubeSouthNorth, quaterCubeUpDown, quaterCubeWestEast, eighthCube, thinPanelDown, thinPanelSouth, thinPanelWest, diagonalFlatPanelEastWest, diagonalFlatPanelWestEast, fencePost, fenceEastWest, fenceNorthsouth, chainGeometry, carpetGeometry, candlesGeometry1, candlesGeometry2, candlesGeometry3, candlesGeometry4, liquidGeometry, ...leverGeometry, ...(data.geometry || []));
34
+ VoxelModelRuleBuilderRegister.registerModels(simpleCube, orientedCube, simpleHalfCube, pillarCube, simpleThinPannel, stair, simpleCrossedPannel, chainModel, carpetModel, candlesModel, leverModel, fence, liquidModel, ...(data.models || []));
35
35
  const syncData = {
36
- geometryPalette: VoxelModelManager.geometryPalette._palette,
36
+ geometryPalette: VoxelModelRuleBuilderRegister.geometryPalette._palette,
37
37
  geometry: [],
38
38
  models: [],
39
39
  voxels: [],
@@ -43,13 +43,13 @@ function GetModelData(data) {
43
43
  const voxelData = voxel.properties["dve_model_data"];
44
44
  if (!voxelData)
45
45
  continue;
46
- VoxelModelManager.registerVoxel(voxel.id, voxelData);
47
- const model = VoxelModelManager.models.get(voxelData.id);
46
+ VoxelModelRuleBuilderRegister.registerVoxel(voxel.id, voxelData);
47
+ const model = VoxelModelRuleBuilderRegister.models.get(voxelData.id);
48
48
  if (!model)
49
49
  throw new Error(`Voxel model with id ${voxelData.id} does not exist.`);
50
50
  model.voxels.set(voxel.id, voxelData);
51
51
  }
52
- for (const [mainKey, mainGeo] of VoxelModelManager.geometry) {
52
+ for (const [mainKey, mainGeo] of VoxelModelRuleBuilderRegister.geometry) {
53
53
  if (mainGeo.data.ogData.doNotBuildRules) {
54
54
  syncData.geometry.push({
55
55
  id: mainKey,
@@ -58,15 +58,15 @@ function GetModelData(data) {
58
58
  });
59
59
  continue;
60
60
  }
61
- const output = BuildRules(mainGeo, VoxelModelManager.geometryPalette);
61
+ const output = BuildRules(mainGeo, VoxelModelRuleBuilderRegister.geometryPalette);
62
62
  syncData.geometry.push({
63
63
  id: mainKey,
64
64
  nodes: mainGeo.data.nodes,
65
65
  ...output,
66
66
  });
67
67
  }
68
- for (const [mainKey, model] of VoxelModelManager.models) {
69
- const stateData = BuildStateData(model, VoxelModelManager.geometryPalette);
68
+ for (const [mainKey, model] of VoxelModelRuleBuilderRegister.models) {
69
+ const stateData = BuildStateData(model, VoxelModelRuleBuilderRegister.geometryPalette);
70
70
  model.stateData = stateData;
71
71
  SchemaRegister.registerModel(mainKey, stateData.schema);
72
72
  syncData.models.push({
@@ -90,7 +90,7 @@ function GetModelData(data) {
90
90
  /* for (const [mainKey, geometry] of VoxelModelManager.geometry) {
91
91
  BuildGeomtryInputs(geometry);
92
92
  } */
93
- for (const [mainKey, model] of VoxelModelManager.models) {
93
+ for (const [mainKey, model] of VoxelModelRuleBuilderRegister.models) {
94
94
  const { shapeStateVoxelInputs, conditionalShapeStateVoxelInputs, transparentVoxelFaceIndexes, } = BuildFinalInputs(model);
95
95
  for (const v in shapeStateVoxelInputs) {
96
96
  const stateData = model.voxelModData.get(v);
@@ -115,8 +115,7 @@ function GetModelData(data) {
115
115
  }
116
116
  export function InitVoxelData(data) {
117
117
  const lightData = new VoxelLightData();
118
- const voxelIndex = new VoxelIndex(data.voxels);
119
- console.warn(voxelIndex, voxelIndex.dataMap);
118
+ new VoxelIndex(data.voxels);
120
119
  const materials = [
121
120
  { id: "dve_solid", properties: {} },
122
121
  { id: "dve_flora", properties: {} },
@@ -1,7 +1,7 @@
1
1
  import { ShapeStateRelationsNode } from "./ShapeStateRelationsNode";
2
2
  import { BinarySchemaNode } from "./BinarySchemaNode";
3
3
  import { VoxelModelStateSchemaData } from "../State.types";
4
- import { DataCursorInterface } from "../../../Tools/DataCursor.interface";
4
+ import { DataCursorInterface } from "../../Cursor/DataCursor.interface";
5
5
  import { Vector3Like } from "@amodx/math";
6
6
  import { VoxelCursorInterface } from "../../Cursor/VoxelCursor.interface";
7
7
  export declare class StateSchema {
@@ -1,6 +1,22 @@
1
1
  import { TextureId } from "../../Textures/index";
2
2
  import { VoxelModelConstructorData } from "../../Models/VoxelModel.types";
3
3
  import { VoxelTags } from "../Data/VoxelTag.types";
4
+ export interface VoxelDataArrays {
5
+ /**The runtime numeric voxel ids */
6
+ ids: Uint16Array;
7
+ /**The light data for voxels stored as 4 nibbles. 0 -> sun light 1 -> red light 2 -> green light 3 -> blue light */
8
+ light: Uint16Array;
9
+ /**The levels of the voxel. Used mainly for waterflow now. */
10
+ level: Uint8Array;
11
+ /**The state of the voxel. Used mainly be the voxel model system to get the model shape. */
12
+ state: Uint16Array;
13
+ /**The mod state of the voxel. Used mainly by the voxel model system to change model inputs. */
14
+ mod: Uint16Array;
15
+ /**The secondary state of the voxel. Can be set to a voxel id to make things like water logged voxels.
16
+ * But the main voxel itself must not use state or mod because the secondary voxel will use the same state and mod.
17
+ */
18
+ secondary: Uint16Array;
19
+ }
4
20
  export type VoxelNamedStateData = {
5
21
  id: string;
6
22
  name?: string;
@@ -20,11 +36,13 @@ export type VoxelNamedStateData = {
20
36
  };
21
37
  export declare class PaintVoxelData {
22
38
  id: string;
39
+ name: string;
23
40
  mod: number;
24
41
  state: number;
25
42
  level: number;
26
43
  levelState: number;
27
44
  secondaryVoxelId: string;
45
+ secondaryVoxeName: string;
28
46
  static Create(data: Partial<PaintVoxelData>): PaintVoxelData;
29
47
  private constructor();
30
48
  }
@@ -1,19 +1,23 @@
1
1
  export class PaintVoxelData {
2
2
  id;
3
+ name;
3
4
  mod;
4
5
  state;
5
6
  level;
6
7
  levelState;
7
8
  secondaryVoxelId;
9
+ secondaryVoxeName;
8
10
  static Create(data) {
9
- return new PaintVoxelData(data.id, data.mod, data.state, data.level, data.levelState, data.secondaryVoxelId);
11
+ return new PaintVoxelData(data.id, data.name, data.mod, data.state, data.level, data.levelState, data.secondaryVoxelId, data.secondaryVoxeName);
10
12
  }
11
- constructor(id = "dve_air", mod = 0, state = 0, level = 0, levelState = 0, secondaryVoxelId = "dve_air") {
13
+ constructor(id = "dve_air", name = "", mod = 0, state = 0, level = 0, levelState = 0, secondaryVoxelId = "dve_air", secondaryVoxeName = "") {
12
14
  this.id = id;
15
+ this.name = name;
13
16
  this.mod = mod;
14
17
  this.state = state;
15
18
  this.level = level;
16
19
  this.levelState = levelState;
17
20
  this.secondaryVoxelId = secondaryVoxelId;
21
+ this.secondaryVoxeName = secondaryVoxeName;
18
22
  }
19
23
  }