@divinevoxel/vlox 0.0.71 → 0.0.72

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 (168) hide show
  1. package/Contexts/Base/Main/InitDataGenerator.js +0 -9
  2. package/Contexts/Base/Remote/DataSync.types.d.ts +0 -5
  3. package/Contexts/Base/Remote/InitDataSync.js +17 -31
  4. package/Init/StartConstructor.js +2 -4
  5. package/Init/StartWorld.js +0 -12
  6. package/Math/Indexing.d.ts +12 -3
  7. package/Math/Indexing.js +24 -15
  8. package/Mesher/Functions/CompactVoxelMesh.d.ts +1 -1
  9. package/Mesher/Functions/CompactVoxelMesh.js +3 -4
  10. package/Mesher/Functions/MeshSection.d.ts +1 -1
  11. package/Mesher/Functions/MeshSection.js +54 -60
  12. package/Mesher/Functions/MeshVoxel.js +20 -26
  13. package/Mesher/Geomtry/Buffers.d.ts +9 -8
  14. package/Mesher/Geomtry/Buffers.js +26 -58
  15. package/Mesher/Geomtry/Tools/MesherDataTools.d.ts +1 -1
  16. package/Mesher/Geomtry/Tools/MesherDataTools.js +1 -1
  17. package/Mesher/Geomtry/VoxelGeometryBuilder.js +107 -124
  18. package/Mesher/InitMesher.js +1 -10
  19. package/Mesher/InitTask.js +10 -4
  20. package/Mesher/Models/Common/BoundsFunctions.d.ts +1 -3
  21. package/Mesher/Models/Common/BoundsFunctions.js +0 -16
  22. package/Mesher/Models/Common/Calc/CalcConstants.js +14 -31
  23. package/Mesher/Models/Common/Calc/FaceDataCalc.d.ts +1 -7
  24. package/Mesher/Models/Common/Calc/FaceDataCalc.js +41 -50
  25. package/Mesher/Models/Nodes/Custom/Liquid/LiquidGeomtryNode.d.ts +1 -5
  26. package/Mesher/Models/Nodes/Custom/Liquid/LiquidGeomtryNode.js +30 -26
  27. package/Mesher/Models/Nodes/GeometryNode.d.ts +2 -4
  28. package/Mesher/Models/Nodes/GeometryNode.js +1 -2
  29. package/Mesher/Models/Nodes/Ruled/BoxVoxelGeometryNode.d.ts +2 -6
  30. package/Mesher/Models/Nodes/Ruled/BoxVoxelGeometryNode.js +37 -34
  31. package/Mesher/Models/Nodes/Ruled/QuadVoxelGeometryNode.d.ts +2 -6
  32. package/Mesher/Models/Nodes/Ruled/QuadVoxelGeometryNode.js +52 -51
  33. package/Mesher/Models/Nodes/Ruleless/RulelessBoxVoxelGeometryNode.d.ts +2 -6
  34. package/Mesher/Models/Nodes/Ruleless/RulelessBoxVoxelGeometryNode.js +18 -19
  35. package/Mesher/Models/Nodes/Ruleless/RulelessQuadVoxelGeometryNode.d.ts +2 -6
  36. package/Mesher/Models/Nodes/Ruleless/RulelessQuadVoxelGeometryNode.js +37 -40
  37. package/Mesher/Models/VoxelConstructor.d.ts +3 -4
  38. package/Mesher/Models/VoxelConstructor.js +23 -12
  39. package/Mesher/Models/{VoxelGeometryLookUp.d.ts → VoxelGeometryBuilderCacheSpace.d.ts} +8 -14
  40. package/Mesher/Models/{VoxelGeometryLookUp.js → VoxelGeometryBuilderCacheSpace.js} +49 -44
  41. package/Mesher/Models/VoxelModelConstructorRegister.js +3 -3
  42. package/Mesher/Tools/VoxelMeshBVHBuilder.d.ts +2 -9
  43. package/Mesher/Tools/VoxelMeshBVHBuilder.js +4 -16
  44. package/Mesher/Tools/VoxelMeshVertexStructCursor.d.ts +10 -0
  45. package/Mesher/Tools/VoxelMeshVertexStructCursor.js +10 -0
  46. package/Mesher/Tools/VoxelMesherDataTool.d.ts +8 -5
  47. package/Mesher/Tools/VoxelMesherDataTool.js +34 -13
  48. package/Models/Indexing/VoxelAOResultsIndex.d.ts +4 -4
  49. package/Models/Indexing/VoxelAOResultsIndex.js +15 -9
  50. package/Models/Indexing/VoxelFaceCullResultsIndex.d.ts +3 -3
  51. package/Models/Indexing/VoxelFaceCullResultsIndex.js +14 -9
  52. package/Models/Indexing/VoxelFaceTransparentResultsIndex.d.ts +1 -1
  53. package/Models/Indexing/VoxelFaceTransparentResultsIndex.js +1 -1
  54. package/Models/Rules/Functions/BuildRules.js +2 -2
  55. package/Tasks/IWG/Internal/Classes/Generator.js +1 -1
  56. package/Tasks/IWG/Internal/Functions/getSectorState.js +4 -7
  57. package/Tasks/IWG/Internal/Functions/runWorldUpdate.js +5 -6
  58. package/Tasks/IWG/Internal/IWGTasks.js +12 -21
  59. package/Tasks/Propagation/Flow/FlowManager.d.ts +0 -2
  60. package/Tasks/Propagation/Flow/FlowManager.js +86 -87
  61. package/Tasks/Propagation/Flow/WorldFlow.js +2 -3
  62. package/Tasks/Propagation/Illumanation/WorldRGB.js +1 -2
  63. package/Tasks/Update/InitTasks.d.ts +2 -1
  64. package/Tasks/Update/InitTasks.js +6 -6
  65. package/Tasks/Update/VoxelUpdate.js +15 -7
  66. package/Tasks/WorldGeneration/WorldGenBrush.js +1 -0
  67. package/Templates/Cursor/TemplateCursor.d.ts +1 -1
  68. package/Templates/Cursor/TemplateCursor.js +1 -1
  69. package/Templates/Functions/CreateTemplate.js +1 -1
  70. package/Templates/VoxelTemplate.js +6 -8
  71. package/Tools/Brush/Brush.d.ts +0 -2
  72. package/Tools/Brush/Brush.js +5 -6
  73. package/{Data/Cursor → Tools}/DataCursor.interface.d.ts +1 -1
  74. package/Util/Binary/BitArray.d.ts +4 -0
  75. package/Util/Binary/BitArray.js +16 -0
  76. package/Util/StringPalette.d.ts +1 -0
  77. package/Util/StringPalette.js +8 -0
  78. package/Voxels/Cursor/VoxelCursor.d.ts +6 -6
  79. package/Voxels/Cursor/VoxelCursor.interface.d.ts +10 -15
  80. package/Voxels/Cursor/VoxelCursor.interface.js +30 -50
  81. package/Voxels/Cursor/VoxelCursor.js +13 -12
  82. package/Voxels/Cursor/VoxelLightData.d.ts +3 -4
  83. package/Voxels/Cursor/VoxelLightData.js +8 -7
  84. package/Voxels/Data/VoxelPalettesRegister.d.ts +13 -0
  85. package/Voxels/Data/VoxelPalettesRegister.js +17 -0
  86. package/Voxels/Data/VoxelTag.types.d.ts +56 -0
  87. package/Voxels/Data/VoxelTag.types.js +23 -0
  88. package/Voxels/{State → Data}/VoxelTagStates.d.ts +2 -2
  89. package/Voxels/{State → Data}/VoxelTagStates.js +5 -5
  90. package/Voxels/Data/VoxelTagsRegister.d.ts +9 -0
  91. package/Voxels/Data/VoxelTagsRegister.js +32 -0
  92. package/Voxels/Functions/BuildStateData.js +3 -3
  93. package/Voxels/Functions/BuildTagAndPaletteData.d.ts +13 -0
  94. package/Voxels/Functions/BuildTagAndPaletteData.js +57 -0
  95. package/Voxels/Indexes/VoxelIndex.js +3 -3
  96. package/Voxels/InitVoxelData.js +20 -61
  97. package/Voxels/State/Schema/StateSchema.d.ts +1 -1
  98. package/Voxels/Types/Voxel.types.d.ts +2 -42
  99. package/Voxels/Types/Voxel.types.js +0 -15
  100. package/Voxels/Types/VoxelModelCompiledData.types.d.ts +11 -13
  101. package/Voxels/Types/VoxelSubstances.types.d.ts +2 -15
  102. package/Voxels/Types/VoxelSubstances.types.js +1 -9
  103. package/World/Archive/Functions/ArchiveArea.js +2 -6
  104. package/World/Archive/Functions/ArchiveSector.js +14 -28
  105. package/World/Archive/Functions/ImportSector.js +27 -34
  106. package/World/Cursor/SectionCursor.d.ts +2 -1
  107. package/World/Cursor/SectionCursor.js +8 -2
  108. package/World/Cursor/SectorCursor.d.ts +2 -1
  109. package/World/Cursor/SectorCursor.js +5 -2
  110. package/World/Cursor/WorldCursor.d.ts +1 -1
  111. package/World/Cursor/WorldCursor.js +6 -2
  112. package/World/Cursor/WorldVoxelCursor.d.ts +7 -7
  113. package/World/Cursor/WorldVoxelCursor.js +20 -24
  114. package/World/Section/Section.d.ts +20 -8
  115. package/World/Section/Section.js +65 -9
  116. package/World/Sector/Sector.d.ts +13 -6
  117. package/World/Sector/Sector.js +30 -9
  118. package/World/Sector/SectorHeightMap.js +1 -3
  119. package/World/Sector/SectorState.d.ts +13 -0
  120. package/World/Sector/SectorState.js +15 -0
  121. package/World/WorldSpaces.d.ts +2 -0
  122. package/World/WorldSpaces.js +7 -1
  123. package/package.json +1 -1
  124. package/Data/Register/MappedDataRegister.d.ts +0 -5
  125. package/Data/Register/MappedDataRegister.js +0 -9
  126. package/Data/Register/MappedRegisterBase.d.ts +0 -14
  127. package/Data/Register/MappedRegisterBase.js +0 -50
  128. package/Data/Structs/StructBuilder.d.ts +0 -34
  129. package/Data/Structs/StructBuilder.js +0 -157
  130. package/Data/Structs/StructBuilder.types.d.ts +0 -30
  131. package/Data/Structs/StructBuilder.types.js +0 -1
  132. package/Tools/Data/SubstanceDataTool.d.ts +0 -13
  133. package/Tools/Data/SubstanceDataTool.js +0 -51
  134. package/Voxels/Palettes/MaterialPalette.d.ts +0 -9
  135. package/Voxels/Palettes/MaterialPalette.js +0 -11
  136. package/Voxels/Palettes/SubstancePalette.d.ts +0 -9
  137. package/Voxels/Palettes/SubstancePalette.js +0 -11
  138. package/Voxels/Palettes/VoxelPalette.d.ts +0 -11
  139. package/Voxels/Palettes/VoxelPalette.js +0 -15
  140. package/Voxels/Segments/MaterialDataGenerator.d.ts +0 -6
  141. package/Voxels/Segments/MaterialDataGenerator.js +0 -12
  142. package/Voxels/Segments/SubstanceDataGenerator.d.ts +0 -6
  143. package/Voxels/Segments/SubstanceDataGenerator.js +0 -35
  144. package/Voxels/Segments/VoxelDataGenerator.d.ts +0 -10
  145. package/Voxels/Segments/VoxelDataGenerator.js +0 -56
  146. package/Voxels/Structs/Builder/SubstanceStructBuilder.d.ts +0 -2
  147. package/Voxels/Structs/Builder/SubstanceStructBuilder.js +0 -42
  148. package/Voxels/Structs/Builder/VoxelStructBuilder.d.ts +0 -2
  149. package/Voxels/Structs/Builder/VoxelStructBuilder.js +0 -68
  150. package/Voxels/Structs/SubstanceStruct.d.ts +0 -17
  151. package/Voxels/Structs/SubstanceStruct.js +0 -17
  152. package/Voxels/Structs/VoxelStruct.d.ts +0 -27
  153. package/Voxels/Structs/VoxelStruct.js +0 -29
  154. package/World/Section/SectionHeightMap.d.ts +0 -10
  155. package/World/Section/SectionHeightMap.js +0 -39
  156. package/World/Section/SectionStruct.d.ts +0 -8
  157. package/World/Section/SectionStruct.js +0 -29
  158. package/World/Section/SectionStructProperties.d.ts +0 -10
  159. package/World/Section/SectionStructProperties.js +0 -11
  160. package/World/Sector/SectorStruct.d.ts +0 -1
  161. package/World/Sector/SectorStruct.js +0 -46
  162. package/World/Sector/SectorStructIds.d.ts +0 -13
  163. package/World/Sector/SectorStructIds.js +0 -14
  164. /package/{Data/Cursor → Tools}/DataCursor.interface.js +0 -0
  165. /package/{Data/Functions → Util/Binary}/Palettes.d.ts +0 -0
  166. /package/{Data/Functions → Util/Binary}/Palettes.js +0 -0
  167. /package/Voxels/{VoxelLevelReader.d.ts → Cursor/VoxelLevelReader.d.ts} +0 -0
  168. /package/Voxels/{VoxelLevelReader.js → Cursor/VoxelLevelReader.js} +0 -0
@@ -1,19 +1,10 @@
1
- import { InitalizeSectionTags } from "../../../World/Section/SectionStruct.js";
2
- import { InitalizeSectorTags } from "../../../World/Sector/SectorStruct.js";
3
1
  import { EngineSettings } from "../../../Settings/EngineSettings";
4
- import { Section, Sector } from "../../../World";
5
2
  import { InitVoxelData } from "../../../Voxels/InitVoxelData";
6
3
  export default function InitDataGenerator(data) {
7
- InitalizeSectionTags();
8
- InitalizeSectorTags();
9
4
  const voxels = InitVoxelData(data);
10
5
  return {
11
6
  settings: EngineSettings.settings,
12
7
  threads: data.threads,
13
8
  voxels,
14
- worldData: {
15
- sectionStruct: Section.StateStruct.structData,
16
- sectorStruct: Sector.StateStruct.structData,
17
- },
18
9
  };
19
10
  }
@@ -1,5 +1,4 @@
1
1
  import { LocationData } from "Math/index.js";
2
- import { BinaryStructData } from "@amodx/binary";
3
2
  import { EngineSettingsData } from "../../../Settings/EngineSettings.types";
4
3
  import { CachedVoxelModelData } from "../../../Cache/Cache.types";
5
4
  import { CompiledVoxelData } from "../../../Voxels/Types/VoxelModelCompiledData.types";
@@ -10,9 +9,5 @@ export type DataSyncData = {
10
9
  threads: {
11
10
  nexus: boolean;
12
11
  };
13
- worldData: {
14
- sectionStruct: BinaryStructData;
15
- sectorStruct: BinaryStructData;
16
- };
17
12
  };
18
13
  export type WorldDataSync = [location: LocationData, buffer: SharedArrayBuffer];
@@ -1,42 +1,28 @@
1
1
  import { Threads } from "@amodx/threads/";
2
- import { VoxelPalette } from "../../../Voxels/Palettes/VoxelPalette";
3
- import { SubstancePalette } from "../../../Voxels/Palettes/SubstancePalette";
4
- import { MappedDataRegister } from "../../../Data/Register/MappedDataRegister";
5
- import { VoxelStruct } from "../../../Voxels/Structs/VoxelStruct";
6
2
  import { EngineSettings } from "../../../Settings/EngineSettings";
7
3
  //objects
8
- import { MaterialPalette } from "../../../Voxels/Palettes/MaterialPalette";
9
- import { Section, Sector } from "../../../World";
10
- import { SubstanceStruct } from "../../../Voxels/Structs/SubstanceStruct";
4
+ import { SchemaRegister } from "../../../Voxels/State/SchemaRegister";
5
+ import { VoxelTagStates } from "../../../Voxels/Data/VoxelTagStates";
6
+ import { VoxelPalettesRegister } from "../../../Voxels/Data/VoxelPalettesRegister";
7
+ import { VoxelTagsRegister } from "../../../Voxels/Data/VoxelTagsRegister";
11
8
  export default function InitDataSync(props) {
12
9
  Threads.registerTask("sync-data", (data) => {
13
10
  EngineSettings.syncSettings(data.settings);
14
- MaterialPalette.setPalette(data.voxels.materials.palette);
15
- //voxels
16
- VoxelPalette.loadIn(data.voxels.data.palette, data.voxels.data.nameToIdMap, data.voxels.data.idToNameMap);
17
- const voxelStringMaps = MappedDataRegister.stringMaps.getSegment("voxel");
18
- for (const key in data.voxels.data.stringMaps) {
19
- voxelStringMaps.add(key, data.voxels.data.stringMaps[key]);
11
+ VoxelPalettesRegister.voxels.load(data.voxels.data.palette);
12
+ VoxelTagsRegister.VoxelTags = data.voxels.data.tags;
13
+ VoxelPalettesRegister.voxelIdToNameMap = new Map(data.voxels.data.idToNameMap);
14
+ VoxelPalettesRegister.voxelNametoIdMap = new Map(data.voxels.data.nameToIdMap);
15
+ VoxelPalettesRegister.substance.load(data.voxels.substances.palette);
16
+ VoxelTagsRegister.SubstanceStags = data.voxels.substances.tags;
17
+ VoxelPalettesRegister.material.load(data.voxels.materials.palette);
18
+ const modelData = data.voxels.models;
19
+ for (const model of modelData.models) {
20
+ SchemaRegister.registerModel(model.id, model.schema);
20
21
  }
21
- const voxelObjectMaps = MappedDataRegister.objectMaps.getSegment("voxel");
22
- for (const key in data.voxels.data.objectMaps) {
23
- voxelObjectMaps.add(key, data.voxels.data.objectMaps[key]);
22
+ for (const voxel of modelData.voxels) {
23
+ SchemaRegister.registerVoxel(voxel.id, voxel.modelId, voxel.modSchema);
24
24
  }
25
- VoxelStruct.init(data.voxels.data.struct);
26
- VoxelStruct.sync(data.voxels.data.index);
27
- //substances
28
- SubstancePalette.setPalette(data.voxels.substances.palette);
29
- const substanceStringMaps = MappedDataRegister.stringMaps.getSegment("substance");
30
- for (const key in data.voxels.substances.stringMaps) {
31
- substanceStringMaps.add(key, data.voxels.substances.stringMaps[key]);
32
- }
33
- const substanceObjectMaps = MappedDataRegister.objectMaps.getSegment("substance");
34
- for (const key in data.voxels.substances.objectMaps) {
35
- substanceObjectMaps.add(key, data.voxels.substances.objectMaps[key]);
36
- }
37
- SubstanceStruct.init(data.voxels.substances.struct);
38
- Section.StateStruct.init(data.worldData.sectionStruct);
39
- Sector.StateStruct.init(data.worldData.sectorStruct);
25
+ VoxelTagStates.load(modelData.tagState);
40
26
  props.onSync(data);
41
27
  });
42
28
  }
@@ -1,7 +1,6 @@
1
1
  import InitDataSync from "../Contexts/Base/Remote/InitDataSync";
2
2
  import { DivineVoxelEngineConstructor } from "../Contexts/Constructor/DivineVoxelEngineConstructor";
3
3
  import { Threads } from "@amodx/threads";
4
- import { VoxelGeometryLookUp } from "../Mesher/Models/VoxelGeometryLookUp";
5
4
  import { Environment } from "../Util/Environment";
6
5
  import { WorldRegister } from "../World/WorldRegister";
7
6
  import InitUpdateTasks from "../Tasks/Update/InitTasks";
@@ -22,7 +21,6 @@ export async function StartContrusctor(data = {}) {
22
21
  }
23
22
  await Threads.init("constructor", self, parent);
24
23
  let ready = false;
25
- VoxelGeometryLookUp.init();
26
24
  InitDataSync({
27
25
  onSync(data) {
28
26
  InitMesher(data.voxels.materials.palette, data.voxels.models);
@@ -45,8 +43,8 @@ export async function StartContrusctor(data = {}) {
45
43
  InitPropagationTasks();
46
44
  InitMesherTasks(DVEC.threads.parent);
47
45
  InitUpdateTasks({
48
- onDone(tasks) {
49
- DVEC.threads.world.runTask("build-queue", [
46
+ onDone(tasks, origin) {
47
+ origin.runTask("build-queue", [
50
48
  tasks.origin[0],
51
49
  tasks.bounds.getSections(),
52
50
  ]);
@@ -3,8 +3,6 @@ import { DivineVoxelEngineWorld } from "../Contexts/World/DivineVoxelEngineWorld
3
3
  import { Threads } from "@amodx/threads/";
4
4
  import InitWorldTasks from "../World/InitTasks";
5
5
  import { Environment } from "../Util/Environment";
6
- import { VoxelTagStates } from "../Voxels/State/VoxelTagStates";
7
- import { SchemaRegister } from "../Voxels/State/SchemaRegister";
8
6
  export async function StartWorld(props = {}) {
9
7
  const DVEW = new DivineVoxelEngineWorld();
10
8
  DivineVoxelEngineWorld.environment = Environment.isNode()
@@ -22,16 +20,6 @@ export async function StartWorld(props = {}) {
22
20
  if (data.threads.nexus) {
23
21
  DVEW.threads.addThread(DVEW.threads.nexus);
24
22
  }
25
- if (data.modelData) {
26
- const modelData = data.modelData;
27
- for (const model of modelData.models) {
28
- SchemaRegister.registerModel(model.id, model.schema);
29
- }
30
- for (const voxel of modelData.voxels) {
31
- SchemaRegister.registerVoxel(voxel.id, voxel.modelId, voxel.modSchema);
32
- }
33
- VoxelTagStates.load(modelData.tagState);
34
- }
35
23
  ready = true;
36
24
  },
37
25
  });
@@ -1,12 +1,21 @@
1
1
  import { Vec3Array, Vector3Like } from "@amodx/math";
2
2
  export declare function CubeHashVec3Array(positionX: number, positionY: number, positionZ: number, xPower2: number, yPower2: number, zPower2: number, positionRef?: Vec3Array): Vec3Array;
3
3
  export declare function CubeHashVec3(positionX: number, positionY: number, positionZ: number, xPower2: number, yPower2: number, zPower2: number, positionRef?: Vector3Like): Vector3Like;
4
+ /**
5
+ * YXZ order
6
+ */
7
+ export declare function GetYXZOrderArrayPositionVec3Array(index: number, boundsX: number, boundsY: number, boundsZ: number, positionRef?: Vec3Array): Vec3Array;
8
+ export declare function GetYXZOrderArrayPositionVec3(index: number, boundsX: number, boundsY: number, boundsZ: number, positionRef?: Vector3Like): Vector3Like;
9
+ export declare function GetYXZOrderArrayIndex(positionX: number, positionY: number, positionZ: number, boundsX: number, boundsY: number, boundsZ: number): number;
10
+ /**
11
+ * XYZ order
12
+ */
4
13
  export declare function GetXYZOrderArrayPositionVec3Array(index: number, boundsX: number, boundsY: number, boundsZ: number, positionRef?: Vec3Array): Vec3Array;
5
14
  export declare function GetXYZOrderArrayPositionVec3(index: number, boundsX: number, boundsY: number, boundsZ: number, positionRef?: Vector3Like): Vector3Like;
6
15
  export declare function GetXYZOrderArrayIndex(positionX: number, positionY: number, positionZ: number, boundsX: number, boundsY: number, boundsZ: number): number;
7
16
  export declare function GetXZYOrderArrayPositionVec3Array(index: number, boundsX: number, boundsY: number, boundsZ: number, positionRef?: Vec3Array): Vec3Array;
17
+ /**
18
+ * XZY order
19
+ */
8
20
  export declare function GetXZYOrderArrayPositionVec3(index: number, boundsX: number, boundsY: number, boundsZ: number, positionRef?: Vector3Like): Vector3Like;
9
21
  export declare function GetXZYOrderArrayIndex(positionX: number, positionY: number, positionZ: number, boundsX: number, boundsY: number, boundsZ: number): number;
10
- export declare function GetYXZOrderArrayPositionVec3Array(index: number, boundsX: number, boundsY: number, boundsZ: number, positionRef?: Vec3Array): Vec3Array;
11
- export declare function GetYXZOrderArrayPositionVec3(index: number, boundsX: number, boundsY: number, boundsZ: number, positionRef?: Vector3Like): Vector3Like;
12
- export declare function GetYXZOrderArrayIndex(positionX: number, positionY: number, positionZ: number, boundsX: number, boundsY: number, boundsZ: number): number;
package/Math/Indexing.js CHANGED
@@ -11,6 +11,27 @@ export function CubeHashVec3(positionX, positionY, positionZ, xPower2, yPower2,
11
11
  positionRef.z = (positionZ >> zPower2) << zPower2;
12
12
  return positionRef;
13
13
  }
14
+ /**
15
+ * YXZ order
16
+ */
17
+ export function GetYXZOrderArrayPositionVec3Array(index, boundsX, boundsY, boundsZ, positionRef = [0, 0, 0]) {
18
+ positionRef[1] = Math.floor(index / (boundsX * boundsZ));
19
+ positionRef[0] = Math.floor((index % (boundsX * boundsZ)) / boundsZ);
20
+ positionRef[2] = index % boundsZ;
21
+ return positionRef;
22
+ }
23
+ export function GetYXZOrderArrayPositionVec3(index, boundsX, boundsY, boundsZ, positionRef = Vector3Like.Create()) {
24
+ positionRef.y = Math.floor(index / (boundsX * boundsZ));
25
+ positionRef.x = Math.floor((index % (boundsX * boundsZ)) / boundsZ);
26
+ positionRef.z = index % boundsZ;
27
+ return positionRef;
28
+ }
29
+ export function GetYXZOrderArrayIndex(positionX, positionY, positionZ, boundsX, boundsY, boundsZ) {
30
+ return Math.floor(positionZ + boundsZ * (positionX + boundsX * positionY));
31
+ }
32
+ /**
33
+ * XYZ order
34
+ */
14
35
  export function GetXYZOrderArrayPositionVec3Array(index, boundsX, boundsY, boundsZ, positionRef = [0, 0, 0]) {
15
36
  positionRef[2] = index / (boundsX * boundsY);
16
37
  positionRef[1] = (index % (boundsX * boundsY)) / boundsX;
@@ -32,6 +53,9 @@ export function GetXZYOrderArrayPositionVec3Array(index, boundsX, boundsY, bound
32
53
  positionRef[0] = index % boundsX;
33
54
  return positionRef;
34
55
  }
56
+ /**
57
+ * XZY order
58
+ */
35
59
  export function GetXZYOrderArrayPositionVec3(index, boundsX, boundsY, boundsZ, positionRef = Vector3Like.Create()) {
36
60
  positionRef.y = index / (boundsX * boundsY);
37
61
  positionRef.z = (index % (boundsX * boundsY)) / boundsX;
@@ -41,18 +65,3 @@ export function GetXZYOrderArrayPositionVec3(index, boundsX, boundsY, boundsZ, p
41
65
  export function GetXZYOrderArrayIndex(positionX, positionY, positionZ, boundsX, boundsY, boundsZ) {
42
66
  return positionX + positionY * boundsX + positionZ * boundsX * boundsZ;
43
67
  }
44
- export function GetYXZOrderArrayPositionVec3Array(index, boundsX, boundsY, boundsZ, positionRef = [0, 0, 0]) {
45
- positionRef[1] = index / (boundsX * boundsZ);
46
- positionRef[0] = (index % (boundsX * boundsZ)) / boundsZ;
47
- positionRef[2] = index % boundsZ;
48
- return positionRef;
49
- }
50
- export function GetYXZOrderArrayPositionVec3(index, boundsX, boundsY, boundsZ, positionRef = Vector3Like.Create()) {
51
- positionRef.y = index / (boundsX * boundsZ);
52
- positionRef.x = (index % (boundsX * boundsZ)) / boundsZ;
53
- positionRef.z = index % boundsZ;
54
- return positionRef;
55
- }
56
- export function GetYXZOrderArrayIndex(positionX, positionY, positionZ, boundsX, boundsY, boundsZ) {
57
- return positionZ + boundsZ * (positionX + boundsX * positionY);
58
- }
@@ -1,3 +1,3 @@
1
1
  import { CompactMeshData } from "../Types/Mesher.types";
2
2
  import { VoxelMesherDataTool } from "Mesher/Tools/VoxelMesherDataTool";
3
- export declare function CompactVoxelMesh(tools: VoxelMesherDataTool[]): [data: CompactMeshData, tranfers: ArrayBuffer[]];
3
+ export declare function CompactVoxelMesh(tools: VoxelMesherDataTool[], transfers?: any[]): CompactMeshData;
@@ -60,12 +60,11 @@ function MakeWebGPUMesh(tool: VoxelMesherDataTool): CompactMeshData {
60
60
  Vector3Like.ToArray(mesh.maxBounds),
61
61
  ];
62
62
  } */
63
- export function CompactVoxelMesh(tools) {
63
+ export function CompactVoxelMesh(tools, transfers = []) {
64
64
  const data = [0, []];
65
- const transfers = [];
66
65
  for (let i = 0; i < tools.length; i++) {
67
66
  const tool = tools[i];
68
- if (!tool.mesh.buffer.length)
67
+ if (!tool.mesh.vertexCount)
69
68
  continue;
70
69
  const totalVerticies = tool.mesh.vertexCount * VoxelMeshVertexStructCursor.VertexFloatSize;
71
70
  const vertexArray = new Float32Array(totalVerticies);
@@ -115,5 +114,5 @@ export function CompactVoxelMesh(tools) {
115
114
  ]);
116
115
  transfers.push(vertexArray.buffer, indiciesArray.buffer);
117
116
  }
118
- return [data, transfers];
117
+ return data;
119
118
  }
@@ -1,3 +1,3 @@
1
1
  import { LocationData } from "../../Math";
2
2
  import type { SetSectionMeshTask } from "../../Renderer/Renderer.types.js";
3
- export declare function MeshSection(location: LocationData): [task: SetSectionMeshTask, transfers: any[]] | null;
3
+ export declare function MeshSection(location: LocationData, transfers?: any[]): SetSectionMeshTask | null;
@@ -1,98 +1,92 @@
1
1
  //data
2
2
  import { WorldSpaces } from "../../World/WorldSpaces.js";
3
3
  //tools
4
- import { VoxelGeometryLookUp, } from "../Models/VoxelGeometryLookUp.js";
4
+ import { VoxelGeometryBuilderCacheSpace } from "../Models/VoxelGeometryBuilderCacheSpace.js";
5
5
  import { CompactVoxelMesh } from "./CompactVoxelMesh.js";
6
6
  import { WorldCursor } from "../../World/Cursor/WorldCursor.js";
7
7
  import { SectionCursor } from "../../World/Cursor/SectionCursor.js";
8
- import { RenderedMaterials } from "../RenderedMaterials";
9
8
  import { VoxelModelConstructorRegister } from "../Models/VoxelModelConstructorRegister.js";
10
- import { SectionHeightMap } from "../../World/Section/SectionHeightMap.js";
11
9
  import { WorldRegister } from "../../World/WorldRegister.js";
12
10
  import { VoxelMeshBVHBuilder } from "../Tools/VoxelMeshBVHBuilder";
13
11
  import { Vector3Like } from "@amodx/math";
12
+ import { RenderedMaterials } from "../../Mesher/RenderedMaterials";
14
13
  const sectionCursor = new SectionCursor();
15
14
  const worldCursor = new WorldCursor();
16
15
  let space;
17
16
  const bvhTool = new VoxelMeshBVHBuilder();
18
- function process(x, y, z) {
19
- const voxel = sectionCursor.getVoxel(x, y, z);
20
- if (!voxel)
21
- return false;
22
- if (!voxel.isRenderable())
23
- return false;
24
- if (voxel.hasSecondaryVoxel()) {
25
- voxel.setSecondary(true);
26
- meshVoxel(x, y, z, voxel);
27
- voxel.setSecondary(false);
28
- }
29
- meshVoxel(x, y, z, voxel);
30
- return true;
31
- }
32
17
  function meshVoxel(x, y, z, voxel) {
18
+ let added = false;
33
19
  const constructor = VoxelModelConstructorRegister.constructorsPaltte[voxel.getId()];
34
- if (!constructor) {
35
- throw new Error(`Could not find constructor ${voxel.getId()} | ${voxel.getName()} `);
36
- }
37
- const mesher = RenderedMaterials.meshers[voxel.getRenderedMaterial()];
38
- if (!mesher) {
39
- throw new Error(`Could not find material for ${voxel.getId()} | ${voxel.getName()} | ${constructor?.id} | ${voxel.getMaterial()} | ${voxel.getRenderedMaterialStringId()}`);
40
- }
41
- mesher.origin.x = sectionCursor._voxelPosition.x;
42
- mesher.origin.y = sectionCursor._voxelPosition.y;
43
- mesher.origin.z = sectionCursor._voxelPosition.z;
44
- mesher.position.x = x;
45
- mesher.position.y = y;
46
- mesher.position.z = z;
47
- mesher.voxel = voxel;
48
- mesher.nVoxel = worldCursor;
49
- mesher.startConstruction();
50
- constructor.process(mesher);
51
- mesher.endConstruction();
52
- mesher.reset();
20
+ const builder = constructor.builder;
21
+ builder.origin.x = sectionCursor._voxelPosition.x;
22
+ builder.origin.y = sectionCursor._voxelPosition.y;
23
+ builder.origin.z = sectionCursor._voxelPosition.z;
24
+ builder.position.x = x;
25
+ builder.position.y = y;
26
+ builder.position.z = z;
27
+ builder.voxel = voxel;
28
+ builder.nVoxel = worldCursor;
29
+ builder.startConstruction();
30
+ added = constructor.process();
31
+ builder.endConstruction();
32
+ return added;
53
33
  }
54
34
  const padding = Vector3Like.Create(5, 5, 5);
55
- export function MeshSection(location) {
35
+ export function MeshSection(location, transfers = []) {
56
36
  if (!space)
57
- space = VoxelGeometryLookUp.createSpace(WorldSpaces.section.bounds.x + padding.x, WorldSpaces.section.bounds.y + padding.y, WorldSpaces.section.bounds.z + padding.z);
37
+ space = new VoxelGeometryBuilderCacheSpace({
38
+ x: WorldSpaces.section.bounds.x + padding.x,
39
+ y: WorldSpaces.section.bounds.y + padding.y,
40
+ z: WorldSpaces.section.bounds.z + padding.z,
41
+ });
58
42
  const [dimension, cx, cy, cz] = location;
59
43
  const sector = WorldRegister.sectors.get(dimension, cx, cy, cz);
60
44
  if (!sector)
61
45
  return null;
62
46
  const section = sector.getSection(cy);
63
- SectionHeightMap.setSection(section);
64
47
  worldCursor.setFocalPoint(...location);
65
48
  sectionCursor.setSection(...location);
66
- let [minY, maxY] = SectionHeightMap.getMinMax();
67
- const maxX = WorldSpaces.section.bounds.x;
68
- const maxZ = WorldSpaces.section.bounds.z;
49
+ let [minY, maxY] = section.getMinMax();
69
50
  if (Math.abs(minY) == Infinity && Math.abs(maxY) == Infinity)
70
51
  return null;
71
52
  space.start(cx - (padding.x - 1), cy - (padding.y - 1), cz - (padding.z - 1));
72
- VoxelGeometryLookUp.start(space);
73
53
  bvhTool.reset();
74
54
  const effects = {};
75
55
  for (let i = 0; i < RenderedMaterials.meshers.length; i++) {
76
56
  const mesher = RenderedMaterials.meshers[i];
57
+ mesher.space = space;
77
58
  mesher.bvhTool = bvhTool;
78
59
  mesher.effects = effects;
79
60
  }
80
- for (let y = minY; y <= maxY; y++) {
81
- let foundVoxels = false;
82
- if (!SectionHeightMap.getVoxel(y) && !SectionHeightMap.getDirty(y))
83
- continue;
84
- for (let x = 0; x < maxX; x++) {
85
- for (let z = 0; z < maxZ; z++) {
86
- let found = process(x + cx, y + cy, z + cz);
87
- if (found)
88
- foundVoxels = true;
61
+ const volume = WorldSpaces.section.volumne;
62
+ const slice = WorldSpaces.section.bounds.x * WorldSpaces.section.bounds.z;
63
+ //const t = performance.now();
64
+ for (let i = 0; i < volume; i++) {
65
+ if (!(i % slice)) {
66
+ const y = i / slice;
67
+ if (!section.getHasVoxel(y) && !section.getHasVoxelDirty(y)) {
68
+ i += slice;
69
+ continue;
89
70
  }
90
71
  }
91
- SectionHeightMap.setVoxel(y, foundVoxels);
92
- SectionHeightMap.setDirty(y, false);
72
+ if (!section.ids[i] || section.getBuried(i))
73
+ continue;
74
+ const voxel = sectionCursor.getVoxelAtIndex(i);
75
+ const x = cx + sectionCursor._voxelPosition.x;
76
+ const y = cy + sectionCursor._voxelPosition.y;
77
+ const z = cz + sectionCursor._voxelPosition.z;
78
+ let addedVoxel = false;
79
+ if (meshVoxel(x, y, z, voxel))
80
+ addedVoxel = true;
81
+ if (voxel.hasSecondaryVoxel()) {
82
+ voxel.setSecondary(true);
83
+ if (meshVoxel(x, y, z, voxel))
84
+ addedVoxel = true;
85
+ voxel.setSecondary(false);
86
+ }
87
+ section.setBuried(i, !addedVoxel);
93
88
  }
94
- VoxelGeometryLookUp.stop();
95
- const transfers = [];
89
+ // console.log(performance.now() - t);
96
90
  const sectionEffects = [];
97
91
  const sections = [location, [], sectionEffects, 0];
98
92
  const meshed = [];
@@ -104,17 +98,17 @@ export function MeshSection(location) {
104
98
  sectionEffects.push([e, float]);
105
99
  }
106
100
  if (!mesher.mesh.vertexCount) {
107
- mesher.resetAll();
101
+ mesher.clear();
108
102
  mesher.bvhTool = null;
109
103
  continue;
110
104
  }
111
105
  meshed.push(mesher);
112
106
  }
113
- const [compactMesh, buffers] = CompactVoxelMesh(meshed);
107
+ const compactMesh = CompactVoxelMesh(meshed, transfers);
114
108
  sections[1] = compactMesh;
115
109
  for (let i = 0; i < meshed.length; i++) {
116
- meshed[i].resetAll();
110
+ meshed[i].clear();
117
111
  meshed[i].bvhTool = null;
118
112
  }
119
- return [sections, [...transfers, ...buffers]];
113
+ return sections;
120
114
  }
@@ -1,12 +1,11 @@
1
- import { RenderedMaterials } from "../RenderedMaterials";
2
- import { VoxelGeometryLookUp } from "../Models/VoxelGeometryLookUp.js";
1
+ import { VoxelGeometryBuilderCacheSpace } from "../Models/VoxelGeometryBuilderCacheSpace.js";
3
2
  import { TemplateCursor } from "../../Templates/Cursor/TemplateCursor.js";
4
3
  import { FullVoxelTemplate } from "../../Templates/FullVoxelTemplate.js";
5
4
  import { CompactVoxelMesh } from "../Functions/CompactVoxelMesh.js";
6
5
  import { VoxelModelConstructorRegister } from "../Models/VoxelModelConstructorRegister.js";
7
6
  const templateCursor = new TemplateCursor();
8
7
  templateCursor.setTemplate(new FullVoxelTemplate(FullVoxelTemplate.CreateNew([3, 3, 3], 0xf)));
9
- const space = VoxelGeometryLookUp.createSpace(3, 3, 3);
8
+ const space = new VoxelGeometryBuilderCacheSpace({ x: 3, y: 3, z: 3 });
10
9
  export function MeshVoxel(rawVoxelData) {
11
10
  const voxel = templateCursor.getVoxel(1, 1, 1);
12
11
  voxel.copyRaw(rawVoxelData);
@@ -17,28 +16,23 @@ export function MeshVoxel(rawVoxelData) {
17
16
  if (!constructor) {
18
17
  throw new Error(`Could not find constructor for voxel [id:${voxel.getStringId()} name:${voxel.getName()}] `);
19
18
  }
20
- const mesher = RenderedMaterials.meshersMap.get(voxel.getRenderedMaterialStringId());
21
- if (!mesher) {
22
- throw new Error(`Could not find material mesh for voxel [id:${voxel.getStringId()} name:${voxel.getName()}] `);
23
- }
24
- mesher.bvhTool = null;
25
- mesher.resetAll();
19
+ const builder = constructor.builder;
20
+ builder.space = space;
21
+ builder.bvhTool = null;
22
+ builder.clear();
26
23
  space.start(0, 0, 0);
27
- VoxelGeometryLookUp.start(space);
28
- mesher.effects = {};
29
- mesher.origin.x = -0.5;
30
- mesher.origin.y = -0.5;
31
- mesher.origin.z = -0.5;
32
- mesher.position.x = 1;
33
- mesher.position.y = 1;
34
- mesher.position.z = 1;
35
- mesher.voxel = voxel;
36
- mesher.nVoxel = templateCursor;
37
- constructor.process(mesher);
38
- mesher.reset();
39
- VoxelGeometryLookUp.stop();
40
- const compacted = CompactVoxelMesh([mesher]);
41
- mesher.reset();
42
- mesher.mesh.clear();
43
- return compacted;
24
+ builder.effects = {};
25
+ builder.origin.x = -0.5;
26
+ builder.origin.y = -0.5;
27
+ builder.origin.z = -0.5;
28
+ builder.position.x = 1;
29
+ builder.position.y = 1;
30
+ builder.position.z = 1;
31
+ builder.voxel = voxel;
32
+ builder.nVoxel = templateCursor;
33
+ constructor.process();
34
+ const transfers = [];
35
+ const compacted = CompactVoxelMesh([builder], transfers);
36
+ builder.clear();
37
+ return [compacted, transfers];
44
38
  }
@@ -1,19 +1,20 @@
1
- export interface VoxelVertexBuffer {
2
- [index: number]: number;
3
- }
4
1
  export declare class VoxelVertexBuffer {
5
2
  vertexFloatSize: number;
6
3
  sectorVertexSize: number;
7
4
  _buffers: Float32Array[];
5
+ sectorSize: number;
8
6
  constructor(vertexFloatSize: number, sectorVertexSize: number, startingSectorSize?: number);
9
- get length(): number;
10
- }
11
- export interface VoxelIndiceBuffer {
12
- [index: number]: number;
7
+ currentArray: Float32Array;
8
+ curentIndex: number;
9
+ _index: number;
10
+ setIndex(index: number): void;
13
11
  }
14
12
  export declare class VoxelIndiceBuffer {
15
13
  sectorSize: number;
16
14
  _buffers: Uint32Array[];
17
15
  constructor(sectorSize: number, startingSectorSize?: number);
18
- get length(): number;
16
+ currentArray: Uint32Array;
17
+ curentIndex: number;
18
+ _index: number;
19
+ setIndex(index: number): this;
19
20
  }
@@ -2,42 +2,27 @@ export class VoxelVertexBuffer {
2
2
  vertexFloatSize;
3
3
  sectorVertexSize;
4
4
  _buffers = [];
5
+ sectorSize = 0;
5
6
  constructor(vertexFloatSize, sectorVertexSize, startingSectorSize = 4) {
6
7
  this.vertexFloatSize = vertexFloatSize;
7
8
  this.sectorVertexSize = sectorVertexSize;
8
- const sectorSize = vertexFloatSize * sectorVertexSize;
9
+ this.sectorSize = vertexFloatSize * sectorVertexSize;
9
10
  for (let i = 0; i < startingSectorSize; i++) {
10
- this._buffers.push(new Float32Array(sectorSize));
11
+ this._buffers.push(new Float32Array(this.sectorSize));
11
12
  }
12
- const array = this;
13
- return new Proxy([], {
14
- get: (target, property) => {
15
- if (property == "length")
16
- return array.length;
17
- if (property == "_buffers")
18
- return array._buffers;
19
- const index = +property;
20
- const bufferIndex = Math.floor(index / sectorSize);
21
- if (!array._buffers[bufferIndex])
22
- this._buffers[bufferIndex] = new Float32Array(sectorSize);
23
- const arrayIndex = index - bufferIndex * sectorSize;
24
- return array._buffers[bufferIndex][arrayIndex];
25
- },
26
- set: (target, property, value) => {
27
- if (property == "length")
28
- return false;
29
- const index = +property;
30
- const bufferIndex = Math.floor(index / sectorSize);
31
- if (!array._buffers[bufferIndex])
32
- array._buffers[bufferIndex] = new Float32Array(sectorSize);
33
- const arrayIndex = index - bufferIndex * sectorSize;
34
- array._buffers[bufferIndex][arrayIndex] = value;
35
- return true;
36
- },
37
- });
38
13
  }
39
- get length() {
40
- return this._buffers.length * this.vertexFloatSize;
14
+ currentArray;
15
+ curentIndex = 0;
16
+ _index = 0;
17
+ setIndex(index) {
18
+ this._index = index;
19
+ const bufferIndex = Math.floor((index * this.vertexFloatSize) / this.sectorSize);
20
+ if (!this._buffers[bufferIndex])
21
+ this._buffers[bufferIndex] = new Float32Array(this.sectorSize);
22
+ this.curentIndex =
23
+ (index * this.vertexFloatSize - bufferIndex * this.sectorSize) /
24
+ this.vertexFloatSize;
25
+ this.currentArray = this._buffers[bufferIndex];
41
26
  }
42
27
  }
43
28
  export class VoxelIndiceBuffer {
@@ -48,34 +33,17 @@ export class VoxelIndiceBuffer {
48
33
  for (let i = 0; i < startingSectorSize; i++) {
49
34
  this._buffers.push(new Uint32Array(sectorSize));
50
35
  }
51
- const array = this;
52
- return new Proxy([], {
53
- get: (target, property) => {
54
- if (property == "length")
55
- return array.length;
56
- if (property == "_buffers")
57
- return array._buffers;
58
- const index = +property;
59
- const bufferIndex = Math.floor(index / sectorSize);
60
- if (!array._buffers[bufferIndex])
61
- this._buffers[bufferIndex] = new Uint32Array(sectorSize);
62
- const arrayIndex = index - bufferIndex * sectorSize;
63
- return array._buffers[bufferIndex][arrayIndex];
64
- },
65
- set: (target, property, value) => {
66
- if (property == "length")
67
- return false;
68
- const index = +property;
69
- const bufferIndex = Math.floor(index / sectorSize);
70
- if (!array._buffers[bufferIndex])
71
- array._buffers[bufferIndex] = new Uint32Array(sectorSize);
72
- const arrayIndex = index - bufferIndex * sectorSize;
73
- array._buffers[bufferIndex][arrayIndex] = value;
74
- return true;
75
- },
76
- });
77
36
  }
78
- get length() {
79
- return this._buffers.length * this.sectorSize;
37
+ currentArray;
38
+ curentIndex = 0;
39
+ _index = 0;
40
+ setIndex(index) {
41
+ this._index = index;
42
+ const bufferIndex = Math.floor(index / this.sectorSize);
43
+ if (!this._buffers[bufferIndex])
44
+ this._buffers[bufferIndex] = new Uint32Array(this.sectorSize);
45
+ this.curentIndex = index - bufferIndex * this.sectorSize;
46
+ this.currentArray = this._buffers[bufferIndex];
47
+ return this;
80
48
  }
81
49
  }
@@ -3,5 +3,5 @@ export declare class MesherDataTool {
3
3
  segments: Map<string, number[]>;
4
4
  mesh: VoxelMesh | null;
5
5
  startNewMesh(mesh?: VoxelMesh): void;
6
- resetAll(): this;
6
+ clear(): this;
7
7
  }