@divinevoxel/vlox 0.0.71 → 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 (271) 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/Contexts/Render/DivineVoxelEngineRender.d.ts +1 -1
  5. package/Contexts/World/DivineVoxelEngineWorld.d.ts +1 -1
  6. package/Init/StartConstructor.js +7 -7
  7. package/Init/StartWorld.d.ts +1 -1
  8. package/Init/StartWorld.js +0 -12
  9. package/Math/Indexing.d.ts +12 -3
  10. package/Math/Indexing.js +24 -15
  11. package/Mesher/Functions/CompactVoxelMesh.d.ts +2 -2
  12. package/Mesher/Functions/CompactVoxelMesh.js +4 -5
  13. package/Mesher/Functions/MeshSection.d.ts +1 -1
  14. package/Mesher/Functions/MeshSection.js +72 -66
  15. package/Mesher/Functions/MeshTexture.d.ts +1 -1
  16. package/Mesher/Functions/MeshTexture.js +3 -4
  17. package/Mesher/Functions/MeshVoxel.js +20 -26
  18. package/Mesher/Geomtry/Primitives/QuadVertexData.d.ts +12 -10
  19. package/Mesher/Geomtry/Primitives/QuadVertexData.js +49 -56
  20. package/Mesher/Geomtry/VoxelGeometryBuilder.d.ts +2 -2
  21. package/Mesher/Geomtry/VoxelGeometryBuilder.js +108 -125
  22. package/Mesher/Geomtry/VoxelMesh.d.ts +1 -1
  23. package/Mesher/Geomtry/VoxelMesh.js +2 -2
  24. package/Mesher/{Tools → Geomtry}/VoxelMeshBVHBuilder.d.ts +2 -9
  25. package/Mesher/{Tools → Geomtry}/VoxelMeshBVHBuilder.js +4 -16
  26. package/Mesher/Geomtry/{Buffers.d.ts → VoxelMeshBuffers.d.ts} +9 -8
  27. package/Mesher/Geomtry/VoxelMeshBuffers.js +49 -0
  28. package/Mesher/{Tools → Geomtry}/VoxelMeshVertexStructCursor.d.ts +10 -0
  29. package/Mesher/{Tools → Geomtry}/VoxelMeshVertexStructCursor.js +10 -0
  30. package/Mesher/Geomtry/index.d.ts +0 -1
  31. package/Mesher/Geomtry/index.js +0 -1
  32. package/Mesher/InitMesher.js +2 -11
  33. package/Mesher/InitTask.js +10 -22
  34. package/Mesher/Models/Common/BoundsFunctions.d.ts +1 -3
  35. package/Mesher/Models/Common/BoundsFunctions.js +0 -16
  36. package/Mesher/Models/Common/Calc/CalcConstants.js +14 -31
  37. package/Mesher/Models/Common/Calc/FaceDataCalc.d.ts +2 -8
  38. package/Mesher/Models/Common/Calc/FaceDataCalc.js +50 -52
  39. package/Mesher/Models/Nodes/Custom/Liquid/FlowGradient.d.ts +2 -2
  40. package/Mesher/Models/Nodes/Custom/Liquid/FlowGradient.js +1 -1
  41. package/Mesher/Models/Nodes/Custom/Liquid/LiquidGeomtryNode.d.ts +1 -5
  42. package/Mesher/Models/Nodes/Custom/Liquid/LiquidGeomtryNode.js +40 -42
  43. package/Mesher/Models/Nodes/GeometryNode.d.ts +3 -5
  44. package/Mesher/Models/Nodes/GeometryNode.js +1 -2
  45. package/Mesher/Models/Nodes/Ruled/BoxVoxelGeometryNode.d.ts +3 -6
  46. package/Mesher/Models/Nodes/Ruled/BoxVoxelGeometryNode.js +55 -40
  47. package/Mesher/Models/Nodes/Ruled/QuadVoxelGeometryNode.d.ts +2 -6
  48. package/Mesher/Models/Nodes/Ruled/QuadVoxelGeometryNode.js +52 -51
  49. package/Mesher/Models/Nodes/Ruleless/RulelessBoxVoxelGeometryNode.d.ts +2 -6
  50. package/Mesher/Models/Nodes/Ruleless/RulelessBoxVoxelGeometryNode.js +18 -19
  51. package/Mesher/Models/Nodes/Ruleless/RulelessQuadVoxelGeometryNode.d.ts +2 -6
  52. package/Mesher/Models/Nodes/Ruleless/RulelessQuadVoxelGeometryNode.js +37 -40
  53. package/Mesher/{Tools → Models/Protocols}/OutlinedVoxelTool.d.ts +1 -1
  54. package/Mesher/{Tools → Models/Protocols}/OutlinedVoxelTool.js +1 -1
  55. package/Mesher/Models/RenderedMaterials.d.ts +6 -0
  56. package/Mesher/{RenderedMaterials.js → Models/RenderedMaterials.js} +2 -2
  57. package/Mesher/Models/VoxelConstructor.d.ts +4 -5
  58. package/Mesher/Models/VoxelConstructor.js +23 -12
  59. package/Mesher/Models/{VoxelGeometryLookUp.d.ts → VoxelGeometryBuilderCacheSpace.d.ts} +6 -14
  60. package/Mesher/Models/{VoxelGeometryLookUp.js → VoxelGeometryBuilderCacheSpace.js} +26 -44
  61. package/Mesher/{Tools/VoxelMesherDataTool.d.ts → Models/VoxelModelBuilder.d.ts} +10 -8
  62. package/Mesher/{Tools/VoxelMesherDataTool.js → Models/VoxelModelBuilder.js} +44 -19
  63. package/Mesher/Models/VoxelModelConstructorRegister.js +3 -3
  64. package/Models/Defaults/CubeVoxelGeometry.js +4 -0
  65. package/Models/Defaults/CubeVoxelModels.js +344 -344
  66. package/Models/Defaults/LiquidVoxelModel.js +2 -2
  67. package/Models/Defaults/PanelVoxelModels.js +432 -432
  68. package/Models/Defaults/StairVoxelModel.js +576 -576
  69. package/Models/Examples.js +469 -456
  70. package/Models/Indexing/VoxelAOResultsIndex.d.ts +4 -4
  71. package/Models/Indexing/VoxelAOResultsIndex.js +15 -9
  72. package/Models/Indexing/VoxelFaceCullResultsIndex.d.ts +3 -3
  73. package/Models/Indexing/VoxelFaceCullResultsIndex.js +14 -9
  74. package/Models/Indexing/VoxelFaceTransparentResultsIndex.d.ts +1 -1
  75. package/Models/Indexing/VoxelFaceTransparentResultsIndex.js +1 -1
  76. package/Models/Rules/Functions/BuildFinalInputs.js +9 -7
  77. package/Models/Rules/Functions/BuildGeomtryInputs.js +8 -5
  78. package/Models/Rules/Functions/BuildRules.js +4 -4
  79. package/Models/Rules/{VoxelModelManager.d.ts → VoxelModelRuleBuilderRegister.d.ts} +1 -1
  80. package/Models/Rules/VoxelModelRuleBuilderRegister.js +178 -0
  81. package/Models/VoxelModel.types.d.ts +14 -5
  82. package/Renderer/Classes/SectorMesh.d.ts +3 -4
  83. package/Renderer/Classes/SectorMesh.js +6 -11
  84. package/Renderer/InitTasks.js +6 -7
  85. package/Renderer/MeshManager.js +2 -2
  86. package/Renderer/MeshRegister.js +2 -1
  87. package/Settings/EngineSettings.d.ts +1 -1
  88. package/Settings/EngineSettings.js +3 -5
  89. package/Settings/EngineSettings.types.d.ts +17 -18
  90. package/Settings/EngineSettings.types.js +16 -15
  91. package/Tasks/IWG/IWG.d.ts +2 -1
  92. package/Tasks/IWG/IWG.js +9 -3
  93. package/Tasks/IWG/Internal/Classes/BuildQueue.d.ts +11 -0
  94. package/Tasks/IWG/Internal/Classes/BuildQueue.js +49 -0
  95. package/Tasks/IWG/Internal/Classes/Generator.d.ts +6 -1
  96. package/Tasks/IWG/Internal/Classes/Generator.js +14 -2
  97. package/Tasks/IWG/Internal/Classes/IWGTaskBase.js +2 -2
  98. package/Tasks/IWG/Internal/Functions/getSectorState.js +4 -7
  99. package/Tasks/IWG/Internal/Functions/runBuildUpdate.js +21 -2
  100. package/Tasks/IWG/Internal/Functions/runWorldUpdate.js +5 -6
  101. package/Tasks/IWG/Internal/IWGTasks.d.ts +0 -4
  102. package/Tasks/IWG/Internal/IWGTasks.js +12 -31
  103. package/Tasks/IWG/Internal/IWGTools.d.ts +1 -1
  104. package/Tasks/IWG/Procedures/SaveAllSectors.js +2 -0
  105. package/Tasks/Propagation/Flow/FlowManager.d.ts +0 -2
  106. package/Tasks/Propagation/Flow/FlowManager.js +86 -87
  107. package/Tasks/Propagation/Flow/WorldFlow.js +2 -3
  108. package/Tasks/Propagation/Illumanation/WorldRGB.js +1 -2
  109. package/Tasks/Update/InitTasks.d.ts +2 -1
  110. package/Tasks/Update/InitTasks.js +6 -6
  111. package/Tasks/Update/UpdateTask.d.ts +3 -1
  112. package/Tasks/Update/UpdateTask.js +28 -2
  113. package/Tasks/Update/VoxelUpdate.js +21 -7
  114. package/Tasks/WorldGeneration/WorldGenBrush.js +2 -1
  115. package/Templates/Cursor/TemplateCursor.d.ts +2 -2
  116. package/Templates/Cursor/TemplateCursor.js +1 -2
  117. package/Templates/Functions/CreateTemplate.js +1 -1
  118. package/Templates/VoxelTemplate.js +6 -8
  119. package/Templates/VoxelTemplates.types.d.ts +1 -1
  120. package/Textures/Classes/CompiledTexture.d.ts +18 -0
  121. package/Textures/Classes/CompiledTexture.js +50 -0
  122. package/Textures/Classes/CompiledTextureAnimation.d.ts +12 -0
  123. package/Textures/Classes/CompiledTextureAnimation.js +27 -0
  124. package/Textures/Classes/TextureAnimationTexture.d.ts +10 -0
  125. package/Textures/Classes/TextureAnimationTexture.js +32 -0
  126. package/Textures/Functions/BuildTextureData.d.ts +10 -0
  127. package/Textures/Functions/BuildTextureData.js +205 -0
  128. package/Textures/Texture.types.d.ts +50 -64
  129. package/Textures/TextureManager.d.ts +8 -19
  130. package/Textures/TextureManager.js +28 -166
  131. package/Tools/Brush/Brush.d.ts +1 -3
  132. package/Tools/Brush/Brush.js +43 -12
  133. package/Util/Binary/BinaryArrays.d.ts +6 -0
  134. package/Util/Binary/BinaryArrays.js +25 -0
  135. package/Util/Binary/BinaryBuffer.d.ts +29 -0
  136. package/Util/Binary/BinaryBuffer.js +130 -0
  137. package/Util/Binary/BinaryFunctions.d.ts +3 -0
  138. package/Util/Binary/BinaryFunctions.js +11 -0
  139. package/Util/StringPalette.d.ts +1 -0
  140. package/Util/StringPalette.js +8 -0
  141. package/Voxels/Cursor/DataCursor.interface.d.ts +5 -0
  142. package/Voxels/Cursor/VoxelCursor.d.ts +6 -6
  143. package/Voxels/Cursor/VoxelCursor.interface.d.ts +11 -16
  144. package/Voxels/Cursor/VoxelCursor.interface.js +35 -58
  145. package/Voxels/Cursor/VoxelCursor.js +13 -12
  146. package/Voxels/Cursor/VoxelLightData.d.ts +3 -4
  147. package/Voxels/Cursor/VoxelLightData.js +8 -7
  148. package/Voxels/Data/VoxelPalettesRegister.d.ts +8 -0
  149. package/Voxels/Data/VoxelPalettesRegister.js +8 -0
  150. package/Voxels/Data/VoxelTag.types.d.ts +56 -0
  151. package/Voxels/Data/VoxelTag.types.js +23 -0
  152. package/Voxels/{State → Data}/VoxelTagStates.d.ts +2 -2
  153. package/Voxels/{State → Data}/VoxelTagStates.js +5 -5
  154. package/Voxels/Data/VoxelTagsRegister.d.ts +9 -0
  155. package/Voxels/Data/VoxelTagsRegister.js +32 -0
  156. package/Voxels/Functions/BuildStateData.js +12 -12
  157. package/Voxels/Functions/BuildTagAndPaletteData.d.ts +13 -0
  158. package/Voxels/Functions/BuildTagAndPaletteData.js +55 -0
  159. package/Voxels/Indexes/VoxelIndex.js +3 -3
  160. package/Voxels/InitVoxelData.js +31 -73
  161. package/Voxels/State/Schema/StateSchema.d.ts +1 -1
  162. package/Voxels/Types/Voxel.types.d.ts +20 -42
  163. package/Voxels/Types/Voxel.types.js +6 -17
  164. package/Voxels/Types/VoxelModelCompiledData.types.d.ts +11 -13
  165. package/Voxels/Types/VoxelSubstances.types.d.ts +2 -15
  166. package/Voxels/Types/VoxelSubstances.types.js +1 -9
  167. package/World/Archive/Archive.types.d.ts +38 -34
  168. package/World/Archive/Functions/ArchiveArea.js +18 -30
  169. package/World/Archive/Functions/ArchiveSector.js +484 -213
  170. package/World/Archive/Functions/ImportSector.d.ts +3 -3
  171. package/World/Archive/Functions/ImportSector.js +205 -151
  172. package/World/Archive/Functions/Shared.d.ts +6 -0
  173. package/World/Archive/Functions/Shared.js +75 -0
  174. package/World/Archive/InitTasks.js +30 -13
  175. package/World/Cursor/SectionCursor.d.ts +3 -2
  176. package/World/Cursor/SectionCursor.js +9 -4
  177. package/World/Cursor/SectorCursor.d.ts +3 -2
  178. package/World/Cursor/SectorCursor.js +5 -3
  179. package/World/Cursor/WorldCursor.d.ts +2 -2
  180. package/World/Cursor/WorldCursor.js +6 -3
  181. package/World/Cursor/WorldVoxelCursor.d.ts +7 -7
  182. package/World/Cursor/WorldVoxelCursor.js +21 -24
  183. package/World/InitTasks.d.ts +1 -1
  184. package/World/Lock/WorldLock.d.ts +1 -1
  185. package/World/Section/Section.d.ts +31 -23
  186. package/World/Section/Section.js +116 -18
  187. package/World/Section/SectionState.d.ts +10 -0
  188. package/World/Section/SectionState.js +11 -0
  189. package/World/Sector/Sector.d.ts +24 -9
  190. package/World/Sector/Sector.js +92 -21
  191. package/World/Sector/SectorHeightMap.js +3 -5
  192. package/World/Sector/SectorState.d.ts +21 -0
  193. package/World/Sector/SectorState.js +28 -0
  194. package/World/WorldRegister.d.ts +4 -0
  195. package/World/WorldRegister.js +15 -3
  196. package/World/WorldSpaces.d.ts +6 -0
  197. package/World/WorldSpaces.js +25 -6
  198. package/package.json +1 -1
  199. package/Data/Cursor/DataCursor.interface.d.ts +0 -5
  200. package/Data/Cursor/DataCursor.interface.js +0 -2
  201. package/Data/Register/MappedDataRegister.d.ts +0 -5
  202. package/Data/Register/MappedDataRegister.js +0 -9
  203. package/Data/Register/MappedRegisterBase.d.ts +0 -14
  204. package/Data/Register/MappedRegisterBase.js +0 -50
  205. package/Data/Structs/StructBuilder.d.ts +0 -34
  206. package/Data/Structs/StructBuilder.js +0 -157
  207. package/Data/Structs/StructBuilder.types.d.ts +0 -30
  208. package/Mesher/Functions/CompactMesh.d.ts +0 -2
  209. package/Mesher/Functions/CompactMesh.js +0 -42
  210. package/Mesher/Geomtry/Buffers.js +0 -81
  211. package/Mesher/Geomtry/GeometryNormals.d.ts +0 -10
  212. package/Mesher/Geomtry/GeometryNormals.js +0 -52
  213. package/Mesher/Geomtry/MeshData.types.d.ts +0 -13
  214. package/Mesher/Geomtry/MeshData.types.js +0 -6
  215. package/Mesher/Geomtry/Tools/MesherDataTools.d.ts +0 -7
  216. package/Mesher/Geomtry/Tools/MesherDataTools.js +0 -12
  217. package/Mesher/Geomtry/Tools/index.d.ts +0 -1
  218. package/Mesher/Geomtry/Tools/index.js +0 -1
  219. package/Mesher/RenderedMaterials.d.ts +0 -6
  220. package/Models/Rules/VoxelModelManager.js +0 -82
  221. package/Textures/TextureAnimations.d.ts +0 -4
  222. package/Textures/TextureAnimations.js +0 -35
  223. package/Textures/TextureArray.d.ts +0 -47
  224. package/Textures/TextureArray.js +0 -202
  225. package/Textures/TextureBuilder.d.ts +0 -13
  226. package/Textures/TextureBuilder.js +0 -120
  227. package/Textures/TextureRegister.d.ts +0 -9
  228. package/Textures/TextureRegister.js +0 -28
  229. package/Tools/Data/SubstanceDataTool.d.ts +0 -13
  230. package/Tools/Data/SubstanceDataTool.js +0 -51
  231. package/Voxels/Palettes/MaterialPalette.d.ts +0 -9
  232. package/Voxels/Palettes/MaterialPalette.js +0 -11
  233. package/Voxels/Palettes/SubstancePalette.d.ts +0 -9
  234. package/Voxels/Palettes/SubstancePalette.js +0 -11
  235. package/Voxels/Palettes/VoxelPalette.d.ts +0 -11
  236. package/Voxels/Palettes/VoxelPalette.js +0 -15
  237. package/Voxels/Segments/MaterialDataGenerator.d.ts +0 -6
  238. package/Voxels/Segments/MaterialDataGenerator.js +0 -12
  239. package/Voxels/Segments/SubstanceDataGenerator.d.ts +0 -6
  240. package/Voxels/Segments/SubstanceDataGenerator.js +0 -35
  241. package/Voxels/Segments/VoxelDataGenerator.d.ts +0 -10
  242. package/Voxels/Segments/VoxelDataGenerator.js +0 -56
  243. package/Voxels/Structs/Builder/SubstanceStructBuilder.d.ts +0 -2
  244. package/Voxels/Structs/Builder/SubstanceStructBuilder.js +0 -42
  245. package/Voxels/Structs/Builder/VoxelStructBuilder.d.ts +0 -2
  246. package/Voxels/Structs/Builder/VoxelStructBuilder.js +0 -68
  247. package/Voxels/Structs/SubstanceStruct.d.ts +0 -17
  248. package/Voxels/Structs/SubstanceStruct.js +0 -17
  249. package/Voxels/Structs/VoxelStruct.d.ts +0 -27
  250. package/Voxels/Structs/VoxelStruct.js +0 -29
  251. package/World/Section/SectionHeightMap.d.ts +0 -10
  252. package/World/Section/SectionHeightMap.js +0 -39
  253. package/World/Section/SectionStruct.d.ts +0 -8
  254. package/World/Section/SectionStruct.js +0 -29
  255. package/World/Section/SectionStructProperties.d.ts +0 -10
  256. package/World/Section/SectionStructProperties.js +0 -11
  257. package/World/Sector/SectorStruct.d.ts +0 -1
  258. package/World/Sector/SectorStruct.js +0 -46
  259. package/World/Sector/SectorStructIds.d.ts +0 -13
  260. package/World/Sector/SectorStructIds.js +0 -14
  261. package/World/Structs/WorldDataStructProperties.d.ts +0 -8
  262. package/World/Structs/WorldDataStructProperties.js +0 -9
  263. /package/Mesher/{VoxelShaderData.d.ts → Geomtry/VoxelShaderData.d.ts} +0 -0
  264. /package/Mesher/{VoxelShaderData.js → Geomtry/VoxelShaderData.js} +0 -0
  265. /package/{Data/Functions → Util/Binary}/Palettes.d.ts +0 -0
  266. /package/{Data/Functions → Util/Binary}/Palettes.js +0 -0
  267. /package/{Data/Structs/StructBuilder.types.js → Voxels/Cursor/DataCursor.interface.js} +0 -0
  268. /package/Voxels/{VoxelLevelReader.d.ts → Cursor/VoxelLevelReader.d.ts} +0 -0
  269. /package/Voxels/{VoxelLevelReader.js → Cursor/VoxelLevelReader.js} +0 -0
  270. /package/World/{Storage → Types}/WorldStorage.interface.d.ts +0 -0
  271. /package/World/{Storage → Types}/WorldStorage.interface.js +0 -0
@@ -2,8 +2,7 @@ import { WorldRegister } from "../WorldRegister";
2
2
  import { WorldVoxelCursor } from "./WorldVoxelCursor";
3
3
  import { WorldSpaces } from "../WorldSpaces";
4
4
  import { Vector3Like } from "@amodx/math";
5
- import { DataCursorInterface } from "../../Data/Cursor/DataCursor.interface";
6
- export class SectionCursor extends DataCursorInterface {
5
+ export class SectionCursor {
7
6
  _section;
8
7
  voxel = new WorldVoxelCursor(this);
9
8
  _voxelIndex = 0;
@@ -39,18 +38,24 @@ export class SectionCursor extends DataCursorInterface {
39
38
  const sector = WorldRegister.sectors.get(sectionOrDimension, x || 0, y || 0, z || 0);
40
39
  if (!sector)
41
40
  return false;
42
- this._section = sector.getSection(y || 0);
41
+ this._section = sector.getSection(x || 0, y || 0, z || 0);
43
42
  const sectionPos = this._section.getPosition();
44
43
  this._sectionPosition.x = sectionPos[0];
45
44
  this._sectionPosition.y = sectionPos[1];
46
45
  this._sectionPosition.z = sectionPos[2];
47
46
  return true;
48
47
  }
48
+ getVoxelAtIndex(index) {
49
+ this._voxelIndex = index;
50
+ WorldSpaces.voxel.getPositionFromIndex(index, this._voxelPosition);
51
+ this.voxel.loadIn();
52
+ return this.voxel;
53
+ }
49
54
  getVoxel(x, y, z) {
50
55
  if (!this._section)
51
56
  return null;
52
- this._voxelIndex = WorldSpaces.voxel.getIndex(x, y, z);
53
57
  WorldSpaces.voxel.getPosition(x, y, z, this._voxelPosition);
58
+ this._voxelIndex = WorldSpaces.voxel.getIndexFromPosition(this._voxelPosition.x, this._voxelPosition.y, this._voxelPosition.z);
54
59
  this.voxel.loadIn();
55
60
  return this.voxel;
56
61
  }
@@ -2,9 +2,9 @@ import type { Section } from "../Section/index";
2
2
  import type { Sector } from "../Sector/index";
3
3
  import { WorldVoxelCursor } from "./WorldVoxelCursor";
4
4
  import { Vector3Like } from "@amodx/math";
5
- import { DataCursorInterface } from "../../Data/Cursor/DataCursor.interface";
5
+ import { DataCursorInterface } from "../../Voxels/Cursor/DataCursor.interface";
6
6
  import { WorldSectionCursorInterface } from "./WorldSectionCursor.interface";
7
- export declare class SectorCursor extends DataCursorInterface implements WorldSectionCursorInterface {
7
+ export declare class SectorCursor implements DataCursorInterface, WorldSectionCursorInterface {
8
8
  _current: Sector | null;
9
9
  _section: Section | null;
10
10
  private voxel;
@@ -15,4 +15,5 @@ export declare class SectorCursor extends DataCursorInterface implements WorldSe
15
15
  setSector(dimension: string, x: number, y: number, z: number): boolean;
16
16
  getSection(x: number, y: number, z: number): Section | null;
17
17
  getVoxel(x: number, y: number, z: number): WorldVoxelCursor | null;
18
+ getVoxelAtIndex(index: number): void;
18
19
  }
@@ -2,8 +2,7 @@ import { WorldRegister } from "../WorldRegister";
2
2
  import { WorldVoxelCursor } from "./WorldVoxelCursor";
3
3
  import { WorldSpaces } from "../WorldSpaces";
4
4
  import { Vector3Like } from "@amodx/math";
5
- import { DataCursorInterface } from "../../Data/Cursor/DataCursor.interface";
6
- export class SectorCursor extends DataCursorInterface {
5
+ export class SectorCursor {
7
6
  _current = null;
8
7
  _section;
9
8
  voxel = new WorldVoxelCursor(this);
@@ -55,9 +54,12 @@ export class SectorCursor extends DataCursorInterface {
55
54
  return null;
56
55
  const section = this.getSection(x, y, z);
57
56
  this._section = section;
58
- this._voxelIndex = WorldSpaces.voxel.getIndex(x, y, z);
59
57
  WorldSpaces.voxel.getPosition(x, y, z, this._voxelPosition);
58
+ this._voxelIndex = WorldSpaces.voxel.getIndexFromPosition(this._voxelPosition.x, this._voxelPosition.y, this._voxelPosition.z);
60
59
  this.voxel.loadIn();
61
60
  return this.voxel;
62
61
  }
62
+ getVoxelAtIndex(index) {
63
+ this._voxelIndex = index;
64
+ }
63
65
  }
@@ -1,7 +1,7 @@
1
1
  import { Vector3Like } from "@amodx/math";
2
2
  import { SectorCursor } from "./SectorCursor";
3
- import { DataCursorInterface } from "../../Data/Cursor/DataCursor.interface";
4
- export declare class WorldCursor extends DataCursorInterface {
3
+ import { DataCursorInterface } from "../../Voxels/Cursor/DataCursor.interface";
4
+ export declare class WorldCursor implements DataCursorInterface {
5
5
  sectorCursors: Map<number, Map<number, SectorCursor>>;
6
6
  origin: Vector3Like;
7
7
  dimension: string;
@@ -1,10 +1,9 @@
1
1
  import { Vector3Like } from "@amodx/math";
2
2
  import { SectorCursor } from "./SectorCursor";
3
3
  import { WorldSpaces } from "../WorldSpaces";
4
- import { DataCursorInterface } from "../../Data/Cursor/DataCursor.interface";
5
4
  let cursorCache = [];
6
5
  const tempPosition = Vector3Like.Create();
7
- export class WorldCursor extends DataCursorInterface {
6
+ export class WorldCursor {
8
7
  sectorCursors = new Map();
9
8
  origin = { x: 0, y: 0, z: 0 };
10
9
  dimension = "";
@@ -25,6 +24,8 @@ export class WorldCursor extends DataCursorInterface {
25
24
  return WorldSpaces.world.inBounds(x, y, z);
26
25
  }
27
26
  getSector(x, y, z) {
27
+ if (!this.inBounds(x, y, z))
28
+ return null;
28
29
  const sectorPos = WorldSpaces.sector.getPosition(x, y, z, tempPosition);
29
30
  const cx = sectorPos.x / WorldSpaces.sector.bounds.x - this.origin.x;
30
31
  const cz = sectorPos.z / WorldSpaces.sector.bounds.z - this.origin.z;
@@ -32,8 +33,10 @@ export class WorldCursor extends DataCursorInterface {
32
33
  let cursor = row?.get(cz);
33
34
  if (!cursor) {
34
35
  cursor = cursorCache.length ? cursorCache.shift() : new SectorCursor();
35
- if (!cursor.setSector(this.dimension, sectorPos.x, sectorPos.y, sectorPos.z))
36
+ if (!cursor.setSector(this.dimension, sectorPos.x, sectorPos.y, sectorPos.z)) {
37
+ cursorCache.push(cursor);
36
38
  return null;
39
+ }
37
40
  if (!row) {
38
41
  row = new Map();
39
42
  this.sectorCursors.set(cx, row);
@@ -3,17 +3,17 @@ import { WorldSectionCursorInterface } from "./WorldSectionCursor.interface";
3
3
  export declare class WorldVoxelCursor extends VoxelCursorInterface {
4
4
  dataCursor: WorldSectionCursorInterface;
5
5
  private _section;
6
- get ids(): Uint16Array;
7
- get light(): Uint16Array;
8
- get level(): Uint8Array;
9
- get state(): Uint16Array;
10
- get secondary(): Uint16Array;
11
- get mod(): Uint16Array;
6
+ ids: Uint16Array;
7
+ light: Uint16Array;
8
+ level: Uint8Array;
9
+ state: Uint16Array;
10
+ mod: Uint16Array;
11
+ secondary: Uint16Array;
12
12
  constructor(dataCursor: WorldSectionCursorInterface);
13
13
  loadIn(): void;
14
14
  /**
15
15
  *
16
16
  * @param mode 0 for add 1 for remove
17
17
  */
18
- updateVoxel(mode: 0 | 1): boolean;
18
+ updateVoxel(mode: 0 | 1 | 2): boolean;
19
19
  }
@@ -1,27 +1,13 @@
1
- import { Section } from "../Section/index";
2
- import { SectionStructProperties } from "../Section/SectionStructProperties";
3
1
  import { VoxelCursorInterface } from "../../Voxels/Cursor/VoxelCursor.interface";
4
2
  export class WorldVoxelCursor extends VoxelCursorInterface {
5
3
  dataCursor;
6
4
  _section;
7
- get ids() {
8
- return this._section.ids;
9
- }
10
- get light() {
11
- return this._section.light;
12
- }
13
- get level() {
14
- return this._section.level;
15
- }
16
- get state() {
17
- return this._section.state;
18
- }
19
- get secondary() {
20
- return this._section.secondary;
21
- }
22
- get mod() {
23
- return this._section.mod;
24
- }
5
+ ids;
6
+ light;
7
+ level;
8
+ state;
9
+ mod;
10
+ secondary;
25
11
  constructor(dataCursor) {
26
12
  super();
27
13
  this.dataCursor = dataCursor;
@@ -30,6 +16,12 @@ export class WorldVoxelCursor extends VoxelCursorInterface {
30
16
  if (!this.dataCursor._section)
31
17
  return;
32
18
  this._section = this.dataCursor._section;
19
+ this.ids = this._section.ids;
20
+ this.light = this._section.light;
21
+ this.level = this._section.level;
22
+ this.state = this._section.state;
23
+ this.mod = this._section.mod;
24
+ this.secondary = this._section.secondary;
33
25
  this._index = this.dataCursor._voxelIndex;
34
26
  this.process();
35
27
  }
@@ -38,17 +30,22 @@ export class WorldVoxelCursor extends VoxelCursorInterface {
38
30
  * @param mode 0 for add 1 for remove
39
31
  */
40
32
  updateVoxel(mode) {
41
- Section.StateStruct.setData(this._section.sectionState);
42
33
  const voxelPos = this.dataCursor._voxelPosition;
34
+ this.dataCursor._section?.sector.setStored(false);
43
35
  if (mode == 0) {
44
- Section.StateStruct.setArrayPropertyValue(SectionStructProperties.heightMap, voxelPos.y, 1);
36
+ this.dataCursor._section?.setBuried(this.dataCursor._voxelIndex, false);
37
+ this.dataCursor._section?.setHasVoxel(voxelPos.y, true);
45
38
  return true;
46
39
  }
47
40
  if (mode == 1) {
48
- Section.StateStruct.setArrayPropertyValue(SectionStructProperties.dirtyMap, voxelPos.y, 1);
49
- Section.StateStruct.setArrayPropertyValue(SectionStructProperties.heightMap, voxelPos.y, 0);
41
+ this.dataCursor._section?.setBuried(this.dataCursor._voxelIndex, false);
42
+ this.dataCursor._section?.setHasVoxelDirty(voxelPos.y, true);
43
+ this.dataCursor._section?.setHasVoxel(voxelPos.y, false);
50
44
  return true;
51
45
  }
46
+ if (mode == 2) {
47
+ this.dataCursor._section?.setBuried(this.dataCursor._voxelIndex, false);
48
+ }
52
49
  return false;
53
50
  }
54
51
  }
@@ -1,5 +1,5 @@
1
1
  import { Thread } from "@amodx/threads/";
2
- import { WorldStorageInterface } from "./Storage/WorldStorage.interface.js";
2
+ import { WorldStorageInterface } from "./Types/WorldStorage.interface.js";
3
3
  export default function ({ threads, worldStorage, }: {
4
4
  threads: Thread[];
5
5
  worldStorage?: WorldStorageInterface;
@@ -1,6 +1,6 @@
1
1
  import type { WorldLockTasks } from "../../Tasks/Tasks.types";
2
2
  import type { LocationData } from "../../Math";
3
- import { WorldStorageInterface } from "../../World/Storage/WorldStorage.interface";
3
+ import { WorldStorageInterface } from "../Types/WorldStorage.interface";
4
4
  export declare class WorldLock {
5
5
  static locks: Map<string, WorldLockTasks>;
6
6
  static _loadMap: Map<string, boolean>;
@@ -1,34 +1,42 @@
1
- import { RemoteBinaryStruct } from "@amodx/binary/";
2
1
  import { Sector } from "../Sector/Sector.js";
3
2
  import { Vec3Array } from "@amodx/math";
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;
3
+ import { VoxelDataArrays } from "Voxels/index.js";
4
+ export interface SectionData extends VoxelDataArrays {
5
+ /**Array of bit flags for the sector*/
6
+ flagArray: Uint8Array;
7
+ /**Y slice of the section to tell if there is voxels or not. Used for height maps. */
8
+ voxelMap: Uint8Array;
9
+ /**Y slice of the section to tell if the slice is dirty and voxelMap needs to be re-checked. */
10
+ dirtyMap: Uint8Array;
11
+ /**A bit array used to cache if a voxel is exposed or not. */
12
+ buried: Uint8Array;
19
13
  }
20
- export interface Section extends VoxelDataArrays {
14
+ export interface Section extends SectionData {
21
15
  }
22
16
  export declare class Section {
23
17
  sector: Sector;
24
18
  index: number;
25
19
  static GetBufferSize(): number;
26
20
  static GetArrayStartIndex(index: number): number;
27
- static CreateNew(index: number, sectorBuffer: ArrayBufferLike): VoxelDataArrays;
28
- static toObject(sector: Sector, index: number, data: VoxelDataArrays): Section;
29
- static StateStruct: RemoteBinaryStruct;
30
- sectionState: DataView;
31
- constructor(sector: Sector, index: number, data: VoxelDataArrays);
21
+ static CreateNew(index: number, sectorBuffer: ArrayBufferLike): SectionData;
22
+ static toObject(sector: Sector, index: number, data: SectionData): Section;
23
+ readonly position: Vec3Array;
24
+ constructor(sector: Sector, index: number, data: SectionData);
32
25
  getPosition(): Readonly<Vec3Array>;
33
- serialize(): VoxelDataArrays;
26
+ setBitFlag(index: number, value: boolean): void;
27
+ getBitFlag(index: number): boolean;
28
+ isDirty(): boolean;
29
+ setDirty(dirty: boolean): void;
30
+ isInProgress(): boolean;
31
+ setInProgress(inProgress: boolean): void;
32
+ getBuried(index: number): boolean;
33
+ setBuried(index: number, value: boolean): void;
34
+ setHasVoxel(y: number, hasVoxel: boolean): void;
35
+ getHasVoxel(y: number): boolean;
36
+ setHasVoxelDirty(y: number, dirty: boolean): void;
37
+ getHasVoxelDirty(y: number): boolean;
38
+ getMinMax(): number[];
39
+ storeFlags(): Record<string, boolean>;
40
+ loadFlags(flags: Record<string, boolean>): void;
41
+ toJSON(): SectionData;
34
42
  }
@@ -1,16 +1,25 @@
1
- import { RemoteBinaryStruct } from "@amodx/binary/";
2
1
  import { WorldSpaces } from "../WorldSpaces.js";
3
2
  import { Sector } from "../Sector/Sector.js";
4
- function forceMultipleOf2(n) {
5
- return n % 2 === 0 ? n : n + 1;
6
- }
7
- const position = [0, 0, 0];
3
+ import { getBitArrayIndex, setBitArrayIndex, } from "../../Util/Binary/BinaryArrays.js";
4
+ import { SectionState, SectionStateDefaultFlags } from "./SectionState.js";
5
+ import { forceMultipleOf2 } from "../../Util/Binary/BinaryFunctions.js";
8
6
  export class Section {
9
7
  sector;
10
8
  index;
11
9
  static GetBufferSize() {
12
10
  const voxelSize = WorldSpaces.section.volumne;
13
- return forceMultipleOf2(forceMultipleOf2(Section.StateStruct.structSize) +
11
+ const height = WorldSpaces.section.bounds.y;
12
+ return forceMultipleOf2(
13
+ //----- state
14
+ //2 bytes for flags
15
+ 2 +
16
+ //voxelMap
17
+ height / 8 +
18
+ //dirtyMap
19
+ height / 8 +
20
+ //bureid
21
+ voxelSize / 8 +
22
+ //---- voxel data arrays
14
23
  //ids
15
24
  voxelSize * 2 +
16
25
  //light
@@ -25,13 +34,20 @@ export class Section {
25
34
  voxelSize * 2);
26
35
  }
27
36
  static GetArrayStartIndex(index) {
28
- return (index * Section.GetBufferSize() +
29
- Sector.GetHeaderSize() +
30
- forceMultipleOf2(Section.StateStruct.structSize));
37
+ return index * Section.GetBufferSize() + Sector.GetHeaderSize();
31
38
  }
32
39
  static CreateNew(index, sectorBuffer) {
33
40
  const voxelSize = WorldSpaces.section.volumne;
41
+ const height = WorldSpaces.section.bounds.y;
34
42
  let bufferStart = this.GetArrayStartIndex(index);
43
+ const flagArray = new Uint8Array(sectorBuffer, bufferStart, 2);
44
+ bufferStart += 2;
45
+ const voxelMap = new Uint8Array(sectorBuffer, bufferStart, height / 8);
46
+ bufferStart += height / 8;
47
+ const dirtyMap = new Uint8Array(sectorBuffer, bufferStart, height / 8);
48
+ bufferStart += height / 8;
49
+ const buried = new Uint8Array(sectorBuffer, bufferStart, voxelSize / 8);
50
+ bufferStart += voxelSize / 8;
35
51
  const ids = new Uint16Array(sectorBuffer, bufferStart, voxelSize);
36
52
  bufferStart += voxelSize * 2;
37
53
  const light = new Uint16Array(sectorBuffer, bufferStart, voxelSize);
@@ -45,6 +61,10 @@ export class Section {
45
61
  const level = new Uint8Array(sectorBuffer, bufferStart, voxelSize);
46
62
  bufferStart += voxelSize;
47
63
  return {
64
+ flagArray,
65
+ voxelMap,
66
+ dirtyMap,
67
+ buried,
48
68
  ids,
49
69
  light,
50
70
  level,
@@ -56,12 +76,21 @@ export class Section {
56
76
  static toObject(sector, index, data) {
57
77
  return new Section(sector, index, data);
58
78
  }
59
- static StateStruct = new RemoteBinaryStruct("section-tags");
60
- sectionState;
79
+ position;
61
80
  constructor(sector, index, data) {
62
81
  this.sector = sector;
63
82
  this.index = index;
64
- this.sectionState = new DataView(sector.buffer, index * Section.GetBufferSize() + Sector.GetHeaderSize(), Section.StateStruct.structSize);
83
+ this.position = WorldSpaces.section.getPositionFromIndexVec3Array(this.index);
84
+ this.position[0] =
85
+ this.position[0] * WorldSpaces.section.bounds.x + this.sector.position[0];
86
+ this.position[1] =
87
+ this.position[1] * WorldSpaces.section.bounds.y + this.sector.position[1];
88
+ this.position[2] =
89
+ this.position[2] * WorldSpaces.section.bounds.z + this.sector.position[2];
90
+ this.flagArray = data.flagArray;
91
+ this.voxelMap = data.voxelMap;
92
+ this.dirtyMap = data.dirtyMap;
93
+ this.buried = data.buried;
65
94
  this.ids = data.ids;
66
95
  this.level = data.level;
67
96
  this.light = data.light;
@@ -70,14 +99,83 @@ export class Section {
70
99
  this.mod = data.mod;
71
100
  }
72
101
  getPosition() {
73
- position[0] = this.sector.position[0];
74
- position[1] =
75
- this.sector.position[1] + this.index * WorldSpaces.section.bounds.y;
76
- position[2] = this.sector.position[2];
77
- return position;
102
+ return this.position;
103
+ }
104
+ setBitFlag(index, value) {
105
+ setBitArrayIndex(this.flagArray, index, value ? 1 : 0);
106
+ }
107
+ getBitFlag(index) {
108
+ return getBitArrayIndex(this.flagArray, index) == 1;
109
+ }
110
+ isDirty() {
111
+ return this.getBitFlag(SectionStateDefaultFlags.isDirty);
112
+ }
113
+ setDirty(dirty) {
114
+ this.setBitFlag(SectionStateDefaultFlags.isDirty, dirty);
115
+ if (dirty)
116
+ this.sector.setStored(false);
117
+ }
118
+ isInProgress() {
119
+ return this.getBitFlag(SectionStateDefaultFlags.inProgress);
120
+ }
121
+ setInProgress(inProgress) {
122
+ this.setBitFlag(SectionStateDefaultFlags.inProgress, inProgress);
123
+ }
124
+ getBuried(index) {
125
+ return getBitArrayIndex(this.buried, index) == 1;
126
+ }
127
+ setBuried(index, value) {
128
+ return setBitArrayIndex(this.buried, index, value ? 1 : 0);
129
+ }
130
+ setHasVoxel(y, hasVoxel) {
131
+ return setBitArrayIndex(this.voxelMap, y, hasVoxel ? 1 : 0);
132
+ }
133
+ getHasVoxel(y) {
134
+ return getBitArrayIndex(this.voxelMap, y) == 1;
135
+ }
136
+ setHasVoxelDirty(y, dirty) {
137
+ return setBitArrayIndex(this.dirtyMap, y, dirty ? 1 : 0);
138
+ }
139
+ getHasVoxelDirty(y) {
140
+ return getBitArrayIndex(this.dirtyMap, y) == 1;
141
+ }
142
+ getMinMax() {
143
+ let min = Infinity;
144
+ let max = -Infinity;
145
+ let i = WorldSpaces.section.bounds.y;
146
+ while (i--) {
147
+ if (this.getHasVoxel(i) || this.getHasVoxelDirty(i)) {
148
+ if (i < min)
149
+ min = i;
150
+ if (i > max)
151
+ max = i;
152
+ }
153
+ }
154
+ return [min, max];
155
+ }
156
+ storeFlags() {
157
+ const stored = {};
158
+ for (const key in SectionState.StoredFlags) {
159
+ stored[key] = this.getBitFlag(SectionState.StoredFlags[key]);
160
+ }
161
+ return stored;
162
+ }
163
+ loadFlags(flags) {
164
+ for (const flag in flags) {
165
+ const storedIndex = SectionState.StoredFlags[flag];
166
+ if (storedIndex === undefined) {
167
+ console.warn(`${flag} does not exist on stored flags for section`);
168
+ continue;
169
+ }
170
+ this.setBitFlag(storedIndex, flags[flag]);
171
+ }
78
172
  }
79
- serialize() {
173
+ toJSON() {
80
174
  return {
175
+ flagArray: this.flagArray,
176
+ voxelMap: this.voxelMap,
177
+ dirtyMap: this.dirtyMap,
178
+ buried: this.buried,
81
179
  ids: this.ids,
82
180
  light: this.light,
83
181
  level: this.level,
@@ -0,0 +1,10 @@
1
+ export declare enum SectionStateDefaultFlags {
2
+ isDirty = 0,
3
+ inProgress = 1
4
+ }
5
+ export declare class SectionState {
6
+ /**The default bit flags for sections */
7
+ static Flags: typeof SectionStateDefaultFlags;
8
+ /**A record of bit flags tht are preserved when the section is stored */
9
+ static StoredFlags: Record<string, number>;
10
+ }
@@ -0,0 +1,11 @@
1
+ export var SectionStateDefaultFlags;
2
+ (function (SectionStateDefaultFlags) {
3
+ SectionStateDefaultFlags[SectionStateDefaultFlags["isDirty"] = 0] = "isDirty";
4
+ SectionStateDefaultFlags[SectionStateDefaultFlags["inProgress"] = 1] = "inProgress";
5
+ })(SectionStateDefaultFlags || (SectionStateDefaultFlags = {}));
6
+ export class SectionState {
7
+ /**The default bit flags for sections */
8
+ static Flags = SectionStateDefaultFlags;
9
+ /**A record of bit flags tht are preserved when the section is stored */
10
+ static StoredFlags = {};
11
+ }
@@ -1,23 +1,38 @@
1
- import { RemoteBinaryStruct } from "@amodx/binary/";
2
- import { Section, VoxelDataArrays } from "../Section/Section.js";
1
+ import { Section, SectionData } from "../Section/Section.js";
3
2
  import { Vec3Array } from "@amodx/math";
3
+ import { SectorStateDefaultBitFlags } from "./SectorState.js";
4
4
  export interface SectorData {
5
- position: Vec3Array;
6
5
  buffer: ArrayBufferLike;
7
- sections: VoxelDataArrays[];
6
+ /**Array of timestamps for the sector */
7
+ timeStampArray: Uint32Array;
8
+ /**Array of bit flags for the sector*/
9
+ flagArray: Uint8Array;
10
+ sections: SectionData[];
8
11
  }
9
12
  export interface Sector extends SectorData {
10
13
  }
11
14
  export declare class Sector {
12
- static StateStruct: RemoteBinaryStruct;
15
+ position: Vec3Array;
16
+ static FlagIds: typeof SectorStateDefaultBitFlags;
17
+ static TimeStampIds: typeof import("./SectorState.js").SectorStateDefaultTimeStamps;
13
18
  static GetHeaderSize(): number;
14
19
  static GetBufferSize(): number;
15
20
  static CreateNew(): SectorData;
16
21
  sections: Section[];
17
22
  bufferView: Uint8Array;
18
- sectorState: DataView;
19
- position: Vec3Array;
20
- constructor(data: SectorData);
21
- getSection(y: number): Section;
23
+ constructor(data: SectorData, position: Vec3Array);
24
+ getSection(x: number, y: number, z: number): Section;
25
+ setBitFlag(index: number, value: boolean): void;
26
+ getBitFlag(index: number): boolean;
27
+ setStored(stored: boolean): void;
28
+ isStored(): boolean;
29
+ setTimeStamp(index: number, value: number): void;
30
+ getTimeStamp(index: number): number;
31
+ getRenerableSections(): Generator<Section>;
32
+ anySectionDirty(): boolean;
33
+ storeFlags(): Record<string, boolean>;
34
+ loadFlags(flags: Record<string, boolean>): void;
35
+ storeTimestamps(): Record<string, number>;
36
+ loadTimestamps(stored: Record<string, number>): void;
22
37
  toJSON(): SectorData;
23
38
  }