@divinevoxel/vlox 0.0.72 → 0.0.74

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 (307) hide show
  1. package/Contexts/Base/Remote/InitDataSync.js +4 -0
  2. package/Contexts/Base/Remote/InitWorldDataSync.js +1 -1
  3. package/Contexts/Render/DivineVoxelEngineRender.d.ts +2 -1
  4. package/Contexts/World/DivineVoxelEngineWorld.d.ts +2 -1
  5. package/Init/StartConstructor.js +8 -4
  6. package/Init/StartWorld.d.ts +1 -1
  7. package/Math/index.d.ts +5 -1
  8. package/Mesher/Functions/CompactVoxelMesh.d.ts +2 -2
  9. package/Mesher/Functions/CompactVoxelMesh.js +1 -1
  10. package/Mesher/Functions/CompactVoxelSectionMesh.d.ts +4 -0
  11. package/Mesher/Functions/CompactVoxelSectionMesh.js +112 -0
  12. package/Mesher/Functions/MeshSection.d.ts +1 -1
  13. package/Mesher/Functions/MeshSection.js +27 -22
  14. package/Mesher/Functions/MeshTexture.d.ts +1 -1
  15. package/Mesher/Functions/MeshTexture.js +3 -4
  16. package/Mesher/Geomtry/CompactedSectionVoxelMesh.d.ts +23 -0
  17. package/Mesher/Geomtry/CompactedSectionVoxelMesh.js +144 -0
  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 +120 -199
  22. package/Mesher/Geomtry/VoxelMesh.d.ts +1 -1
  23. package/Mesher/Geomtry/VoxelMesh.js +4 -4
  24. package/Mesher/Geomtry/VoxelMeshBVHBuilder.d.ts +16 -0
  25. package/Mesher/Geomtry/VoxelMeshBVHBuilder.js +51 -0
  26. package/Mesher/Geomtry/VoxelMeshBVHStructCursor.d.ts +22 -0
  27. package/Mesher/Geomtry/VoxelMeshBVHStructCursor.js +78 -0
  28. package/Mesher/Geomtry/{Buffers.js → VoxelMeshBuffers.js} +2 -2
  29. package/Mesher/Geomtry/index.d.ts +0 -1
  30. package/Mesher/Geomtry/index.js +0 -1
  31. package/Mesher/InitMesher.js +1 -1
  32. package/Mesher/InitTask.js +9 -23
  33. package/Mesher/Models/Common/BoxGeometryNode.js +7 -7
  34. package/Mesher/Models/Common/Calc/CalcConstants.d.ts +1 -1
  35. package/Mesher/Models/Common/Calc/CalcConstants.js +1 -1
  36. package/Mesher/Models/Common/Calc/FaceDataCalc.d.ts +2 -2
  37. package/Mesher/Models/Common/Calc/FaceDataCalc.js +37 -30
  38. package/Mesher/Models/Common/QuadGeometryNode.js +2 -2
  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.js +18 -24
  42. package/Mesher/Models/Nodes/GeometryNode.d.ts +2 -2
  43. package/Mesher/Models/Nodes/Ruled/BoxVoxelGeometryNode.d.ts +1 -0
  44. package/Mesher/Models/Nodes/Ruled/BoxVoxelGeometryNode.js +40 -31
  45. package/Mesher/Models/Nodes/Ruled/QuadVoxelGeometryNode.js +2 -2
  46. package/Mesher/Models/Nodes/Ruleless/RulelessBoxVoxelGeometryNode.js +2 -2
  47. package/Mesher/Models/Nodes/Ruleless/RulelessQuadVoxelGeometryNode.js +2 -2
  48. package/Mesher/{Tools → Models/Protocols}/OutlinedVoxelTool.d.ts +1 -1
  49. package/Mesher/{Tools → Models/Protocols}/OutlinedVoxelTool.js +1 -1
  50. package/Mesher/Models/RenderedMaterials.d.ts +6 -0
  51. package/Mesher/{RenderedMaterials.js → Models/RenderedMaterials.js} +2 -2
  52. package/Mesher/Models/VoxelConstructor.d.ts +6 -6
  53. package/Mesher/Models/VoxelConstructor.js +8 -8
  54. package/Mesher/Models/VoxelGeometryBuilderCacheSpace.d.ts +3 -5
  55. package/Mesher/Models/VoxelGeometryBuilderCacheSpace.js +8 -32
  56. package/Mesher/{Tools/VoxelMesherDataTool.d.ts → Models/VoxelModelBuilder.d.ts} +4 -5
  57. package/Mesher/{Tools/VoxelMesherDataTool.js → Models/VoxelModelBuilder.js} +5 -8
  58. package/Mesher/Types/Mesher.types.d.ts +1 -0
  59. package/Models/Defaults/CubeVoxelGeometry.js +4 -0
  60. package/Models/Defaults/CubeVoxelModels.js +360 -383
  61. package/Models/Defaults/LiquidVoxelModel.js +5 -5
  62. package/Models/Defaults/PanelVoxelModels.js +442 -468
  63. package/Models/Defaults/StairVoxelModel.js +582 -597
  64. package/Models/Examples.js +490 -498
  65. package/Models/Rules/Classes/VoxelRulesModel.d.ts +1 -1
  66. package/Models/Rules/Classes/VoxelRulesModel.js +3 -3
  67. package/Models/Rules/Functions/BuildFinalInputs.d.ts +1 -1
  68. package/Models/Rules/Functions/BuildFinalInputs.js +21 -19
  69. package/Models/Rules/Functions/BuildGeomtryInputs.js +8 -5
  70. package/Models/Rules/Functions/BuildRules.js +2 -2
  71. package/Models/Rules/{VoxelModelManager.d.ts → VoxelModelRuleBuilderRegister.d.ts} +1 -1
  72. package/Models/Rules/VoxelModelRuleBuilderRegister.js +178 -0
  73. package/Models/VoxelModel.types.d.ts +17 -8
  74. package/Renderer/Classes/DVESectionMeshes.d.ts +2 -3
  75. package/Renderer/Classes/SectorMesh.d.ts +3 -4
  76. package/Renderer/Classes/SectorMesh.js +6 -11
  77. package/Renderer/InitTasks.js +1 -10
  78. package/Renderer/MeshManager.d.ts +1 -1
  79. package/Renderer/MeshManager.js +26 -25
  80. package/Renderer/MeshRegister.d.ts +5 -5
  81. package/Renderer/MeshRegister.js +4 -3
  82. package/Settings/EngineSettings.d.ts +2 -1
  83. package/Settings/EngineSettings.js +6 -5
  84. package/Settings/EngineSettings.types.d.ts +24 -39
  85. package/Settings/EngineSettings.types.js +22 -29
  86. package/Tasks/Logic/InitTasks.d.ts +1 -0
  87. package/Tasks/Logic/InitTasks.js +10 -0
  88. package/Tasks/Logic/VoxelLogicUpdate.d.ts +3 -0
  89. package/Tasks/Logic/VoxelLogicUpdate.js +71 -0
  90. package/Tasks/Propagation/Explosion/ExplosionManager.d.ts +2 -2
  91. package/Tasks/Propagation/Explosion/ExplosionManager.js +1 -2
  92. package/Tasks/Propagation/Flow/FlowManager.d.ts +4 -4
  93. package/Tasks/Propagation/Flow/FlowRemove.d.ts +2 -2
  94. package/Tasks/Propagation/Flow/FlowUpdate.d.ts +2 -2
  95. package/Tasks/Propagation/Flow/WorldFlow.d.ts +2 -2
  96. package/Tasks/Propagation/Illumanation/RGBUpdate.d.ts +3 -3
  97. package/Tasks/Propagation/Illumanation/SunUpdate.d.ts +3 -3
  98. package/Tasks/Propagation/Illumanation/WorldRGB.d.ts +2 -2
  99. package/Tasks/Propagation/Illumanation/WorldSun.d.ts +2 -2
  100. package/Tasks/Propagation/Illumanation/WorldSun.js +8 -15
  101. package/Tasks/Propagation/InitTasks.js +4 -4
  102. package/Tasks/Propagation/Power/PowerUpdate.d.ts +3 -0
  103. package/Tasks/Propagation/Power/PowerUpdate.js +80 -0
  104. package/Tasks/Tasks.types.d.ts +2 -2
  105. package/Tasks/TasksIds.d.ts +2 -1
  106. package/Tasks/TasksIds.js +1 -0
  107. package/Tasks/Update/Common.d.ts +3 -0
  108. package/Tasks/Update/Common.js +41 -0
  109. package/Tasks/Update/EreaseUpdate.d.ts +3 -0
  110. package/Tasks/Update/EreaseUpdate.js +66 -0
  111. package/Tasks/Update/InitTasks.d.ts +2 -2
  112. package/Tasks/Update/InitTasks.js +3 -1
  113. package/Tasks/Update/PaintUpdate.d.ts +3 -0
  114. package/Tasks/Update/PaintUpdate.js +89 -0
  115. package/Tasks/Update/VoxelUpdate.d.ts +2 -5
  116. package/Tasks/Update/VoxelUpdate.js +7 -143
  117. package/Tasks/{Update/UpdateTask.d.ts → VoxelUpdateTask.d.ts} +16 -6
  118. package/Tasks/{Update/UpdateTask.js → VoxelUpdateTask.js} +44 -5
  119. package/Tasks/WorldGeneration/WorldGenBrush.d.ts +3 -3
  120. package/Tasks/WorldGeneration/WorldGenBrush.js +3 -3
  121. package/Tasks/WorldGeneration/WorldGenRegister.d.ts +1 -1
  122. package/Templates/Cursor/TemplateCursor.d.ts +2 -2
  123. package/Templates/Cursor/TemplateCursor.js +1 -2
  124. package/Templates/Functions/CreateTemplate.d.ts +1 -1
  125. package/Templates/VoxelTemplates.types.d.ts +1 -1
  126. package/Textures/Classes/CompiledTexture.d.ts +18 -0
  127. package/Textures/Classes/CompiledTexture.js +50 -0
  128. package/Textures/Classes/CompiledTextureAnimation.d.ts +12 -0
  129. package/Textures/Classes/CompiledTextureAnimation.js +27 -0
  130. package/Textures/Classes/TextureAnimationTexture.d.ts +10 -0
  131. package/Textures/Classes/TextureAnimationTexture.js +32 -0
  132. package/Textures/Functions/BuildTextureData.d.ts +10 -0
  133. package/Textures/Functions/BuildTextureData.js +205 -0
  134. package/Textures/Texture.types.d.ts +50 -64
  135. package/Textures/TextureManager.d.ts +8 -19
  136. package/Textures/TextureManager.js +28 -166
  137. package/Tools/Brush/AdvancedBrushTool.js +1 -1
  138. package/Tools/Brush/Brush.d.ts +3 -3
  139. package/Tools/Brush/Brush.js +40 -8
  140. package/Tools/Tasks/TasksTool.d.ts +1 -0
  141. package/Tools/Tasks/TasksTool.js +2 -0
  142. package/Util/Binary/BinaryArrays.d.ts +6 -0
  143. package/Util/Binary/BinaryArrays.js +25 -0
  144. package/Util/Binary/BinaryBuffer.d.ts +35 -0
  145. package/Util/Binary/BinaryBuffer.js +136 -0
  146. package/Util/Binary/{BitArray.d.ts → BinaryFunctions.d.ts} +1 -2
  147. package/Util/Binary/BinaryFunctions.js +11 -0
  148. package/{Mesher/Tools/VoxelMeshBVHBuilder.d.ts → Util/Binary/BinaryTree.d.ts} +1 -33
  149. package/Util/Binary/BinaryTree.js +104 -0
  150. package/Voxels/Cursor/DataCursor.interface.d.ts +5 -0
  151. package/Voxels/Cursor/VoxelCursor.interface.d.ts +8 -3
  152. package/Voxels/Cursor/VoxelCursor.interface.js +54 -13
  153. package/Voxels/Cursor/VoxelLightData.js +1 -1
  154. package/Voxels/Data/VoxelPalettesRegister.d.ts +0 -5
  155. package/Voxels/Data/VoxelPalettesRegister.js +0 -9
  156. package/Voxels/Data/VoxelTag.types.d.ts +17 -2
  157. package/Voxels/Data/VoxelTag.types.js +6 -1
  158. package/Voxels/Data/VoxelTagsRegister.js +12 -7
  159. package/Voxels/Functions/BuildStateData.d.ts +6 -6
  160. package/Voxels/Functions/BuildStateData.js +37 -37
  161. package/Voxels/Functions/BuildTagAndPaletteData.js +6 -3
  162. package/Voxels/Indexes/VoxelIndex.d.ts +2 -2
  163. package/Voxels/Indexes/VoxelIndex.js +16 -18
  164. package/Voxels/InitVoxelData.js +24 -21
  165. package/Voxels/Logic/Classes/Default/Types/VoxelPoweredLogicType.d.ts +5 -0
  166. package/Voxels/Logic/Classes/Default/Types/VoxelPoweredLogicType.js +6 -0
  167. package/Voxels/Logic/Classes/VoxelLogic.d.ts +11 -0
  168. package/Voxels/Logic/Classes/VoxelLogic.js +49 -0
  169. package/Voxels/Logic/Classes/VoxelLogicType.d.ts +4 -0
  170. package/Voxels/Logic/Classes/VoxelLogicType.js +2 -0
  171. package/Voxels/Logic/VoxelLogic.types.d.ts +23 -0
  172. package/Voxels/Logic/VoxelLogic.types.js +1 -0
  173. package/Voxels/Logic/VoxelLogicRegister.d.ts +9 -0
  174. package/Voxels/Logic/VoxelLogicRegister.js +15 -0
  175. package/Voxels/State/Schema/StateSchema.d.ts +1 -1
  176. package/Voxels/State/SchemaRegister.js +10 -5
  177. package/Voxels/State/State.types.d.ts +1 -1
  178. package/Voxels/State/StateTreeReader.d.ts +1 -1
  179. package/Voxels/State/StateTreeReader.js +2 -3
  180. package/Voxels/Types/Voxel.types.d.ts +21 -0
  181. package/Voxels/Types/Voxel.types.js +6 -2
  182. package/Voxels/Types/VoxelModelCompiledData.types.d.ts +6 -4
  183. package/World/Archive/Archive.types.d.ts +65 -42
  184. package/World/Archive/Classes/ArchiveClasses.d.ts +66 -0
  185. package/World/Archive/Classes/ArchiveClasses.js +78 -0
  186. package/World/Archive/Classes/ImportedSection.d.ts +40 -0
  187. package/World/Archive/Classes/ImportedSection.js +307 -0
  188. package/World/Archive/Classes/ImportedSector.d.ts +23 -0
  189. package/World/Archive/Classes/ImportedSector.js +97 -0
  190. package/World/Archive/Functions/ArchiveArea.d.ts +1 -1
  191. package/World/Archive/Functions/ArchiveArea.js +49 -54
  192. package/World/Archive/Functions/ArchiveSector.js +373 -282
  193. package/World/Archive/Functions/CreateArchivedSection.d.ts +3 -0
  194. package/World/Archive/Functions/CreateArchivedSection.js +207 -0
  195. package/World/Archive/Functions/ImportSector.d.ts +2 -4
  196. package/World/Archive/Functions/ImportSector.js +50 -220
  197. package/World/Archive/Functions/RemoveDuplicates.d.ts +3 -0
  198. package/World/Archive/Functions/RemoveDuplicates.js +92 -0
  199. package/World/Archive/Functions/Shared.d.ts +6 -0
  200. package/World/Archive/Functions/Shared.js +50 -0
  201. package/World/Archive/InitTasks.js +37 -23
  202. package/World/Cursor/SectionCursor.d.ts +3 -3
  203. package/World/Cursor/SectionCursor.js +2 -3
  204. package/World/Cursor/SectorCursor.d.ts +3 -3
  205. package/World/Cursor/SectorCursor.js +1 -2
  206. package/World/Cursor/WorldCursor.d.ts +6 -5
  207. package/World/Cursor/WorldCursor.js +17 -15
  208. package/World/Cursor/WorldVoxelCursor.d.ts +0 -4
  209. package/World/Cursor/WorldVoxelCursor.js +24 -14
  210. package/World/Dimension/Dimension.d.ts +4 -1
  211. package/World/Dimension/Dimension.js +8 -1
  212. package/World/InitTasks.d.ts +1 -1
  213. package/World/Lock/WorldLock.d.ts +1 -1
  214. package/World/Section/Section.d.ts +27 -18
  215. package/World/Section/Section.js +125 -21
  216. package/World/Section/SectionState.d.ts +12 -0
  217. package/World/Section/SectionState.js +13 -0
  218. package/World/Sector/Sector.d.ts +20 -6
  219. package/World/Sector/Sector.js +100 -17
  220. package/World/Sector/SectorHeightMap.js +2 -2
  221. package/World/Sector/SectorState.d.ts +16 -7
  222. package/World/Sector/SectorState.js +29 -15
  223. package/World/Types/WorldData.types.d.ts +2 -7
  224. package/World/Types/WorldStorage.interface.js +1 -0
  225. package/World/WorldRegister.d.ts +13 -9
  226. package/World/WorldRegister.js +24 -9
  227. package/World/WorldSpaces.d.ts +4 -0
  228. package/World/WorldSpaces.js +25 -12
  229. package/{Tasks/IWG → WorldSimulation}/Internal/Classes/DimensionSegment.d.ts +2 -2
  230. package/{Tasks/IWG → WorldSimulation}/Internal/Classes/Generator.d.ts +10 -3
  231. package/{Tasks/IWG → WorldSimulation}/Internal/Classes/Generator.js +19 -3
  232. package/WorldSimulation/Internal/Classes/Queues/BuildQueue.d.ts +5 -0
  233. package/WorldSimulation/Internal/Classes/Queues/BuildQueue.js +6 -0
  234. package/WorldSimulation/Internal/Classes/Queues/LogiccQueue.d.ts +5 -0
  235. package/WorldSimulation/Internal/Classes/Queues/LogiccQueue.js +6 -0
  236. package/{Tasks/IWG → WorldSimulation}/Internal/Classes/SectorVisistedMap.js +1 -1
  237. package/WorldSimulation/Internal/Classes/TickQueue.d.ts +12 -0
  238. package/WorldSimulation/Internal/Classes/TickQueue.js +58 -0
  239. package/WorldSimulation/Internal/Classes/WorldSimulationTaskBase.d.ts +15 -0
  240. package/{Tasks/IWG/Internal/Classes/IWGTaskBase.js → WorldSimulation/Internal/Classes/WorldSimulationTaskBase.js} +8 -8
  241. package/{Tasks/IWG → WorldSimulation}/Internal/Functions/cullSectors.js +9 -9
  242. package/{Tasks/IWG → WorldSimulation}/Internal/Functions/getSectorState.d.ts +1 -1
  243. package/{Tasks/IWG → WorldSimulation}/Internal/Functions/getSectorState.js +4 -4
  244. package/WorldSimulation/Internal/Functions/runTickUpdate.d.ts +2 -0
  245. package/{Tasks/IWG/Internal/Functions/runBuildUpdate.js → WorldSimulation/Internal/Functions/runTickUpdate.js} +38 -9
  246. package/{Tasks/IWG → WorldSimulation}/Internal/Functions/runWorldUpdate.js +13 -13
  247. package/{Tasks/IWG → WorldSimulation}/Internal/TaskRegister.d.ts +2 -2
  248. package/{Tasks/IWG → WorldSimulation}/Internal/TaskRegister.js +1 -1
  249. package/WorldSimulation/Internal/WorldSimulationDimensions.d.ts +6 -0
  250. package/{Tasks/IWG/Internal/IWGDimensions.js → WorldSimulation/Internal/WorldSimulationDimensions.js} +1 -1
  251. package/WorldSimulation/Internal/WorldSimulationTasks.d.ts +30 -0
  252. package/{Tasks/IWG/Internal/IWGTasks.js → WorldSimulation/Internal/WorldSimulationTasks.js} +14 -24
  253. package/WorldSimulation/Internal/WorldSimulationTools.d.ts +8 -0
  254. package/{Tasks/IWG/Internal/IWGTools.js → WorldSimulation/Internal/WorldSimulationTools.js} +1 -1
  255. package/{Tasks/IWG → WorldSimulation}/Procedures/InitalLoad.d.ts +1 -1
  256. package/{Tasks/IWG → WorldSimulation}/Procedures/InitalLoad.js +11 -11
  257. package/{Tasks/IWG → WorldSimulation}/Procedures/SaveAllSectors.js +7 -5
  258. package/{Tasks/IWG/IWG.d.ts → WorldSimulation/WorldSimulation.d.ts} +6 -5
  259. package/{Tasks/IWG/IWG.js → WorldSimulation/WorldSimulation.js} +29 -23
  260. package/{Tasks/IWG → WorldSimulation}/index.d.ts +1 -1
  261. package/{Tasks/IWG → WorldSimulation}/index.js +1 -1
  262. package/package.json +1 -1
  263. package/Mesher/Functions/CompactMesh.d.ts +0 -2
  264. package/Mesher/Functions/CompactMesh.js +0 -42
  265. package/Mesher/Geomtry/GeometryNormals.d.ts +0 -10
  266. package/Mesher/Geomtry/GeometryNormals.js +0 -52
  267. package/Mesher/Geomtry/MeshData.types.d.ts +0 -13
  268. package/Mesher/Geomtry/MeshData.types.js +0 -6
  269. package/Mesher/Geomtry/Tools/MesherDataTools.d.ts +0 -7
  270. package/Mesher/Geomtry/Tools/MesherDataTools.js +0 -12
  271. package/Mesher/Geomtry/Tools/index.d.ts +0 -1
  272. package/Mesher/Geomtry/Tools/index.js +0 -1
  273. package/Mesher/RenderedMaterials.d.ts +0 -6
  274. package/Mesher/Tools/VoxelMeshBVHBuilder.js +0 -216
  275. package/Models/Rules/VoxelModelManager.js +0 -82
  276. package/Tasks/IWG/Internal/Classes/IWGTaskBase.d.ts +0 -15
  277. package/Tasks/IWG/Internal/Functions/runBuildUpdate.d.ts +0 -2
  278. package/Tasks/IWG/Internal/IWGDimensions.d.ts +0 -6
  279. package/Tasks/IWG/Internal/IWGTasks.d.ts +0 -34
  280. package/Tasks/IWG/Internal/IWGTools.d.ts +0 -8
  281. package/Textures/TextureAnimations.d.ts +0 -4
  282. package/Textures/TextureAnimations.js +0 -35
  283. package/Textures/TextureArray.d.ts +0 -47
  284. package/Textures/TextureArray.js +0 -202
  285. package/Textures/TextureBuilder.d.ts +0 -13
  286. package/Textures/TextureBuilder.js +0 -120
  287. package/Textures/TextureRegister.d.ts +0 -9
  288. package/Textures/TextureRegister.js +0 -28
  289. package/Tools/DataCursor.interface.d.ts +0 -5
  290. package/Tools/DataCursor.interface.js +0 -2
  291. package/Util/Binary/BitArray.js +0 -16
  292. package/World/Structs/WorldDataStructProperties.d.ts +0 -8
  293. package/World/Structs/WorldDataStructProperties.js +0 -9
  294. /package/Mesher/Geomtry/{Buffers.d.ts → VoxelMeshBuffers.d.ts} +0 -0
  295. /package/Mesher/{Tools → Geomtry}/VoxelMeshVertexStructCursor.d.ts +0 -0
  296. /package/Mesher/{Tools → Geomtry}/VoxelMeshVertexStructCursor.js +0 -0
  297. /package/Mesher/{VoxelShaderData.d.ts → Geomtry/VoxelShaderData.d.ts} +0 -0
  298. /package/Mesher/{VoxelShaderData.js → Geomtry/VoxelShaderData.js} +0 -0
  299. /package/{World/Storage/WorldStorage.interface.js → Voxels/Cursor/DataCursor.interface.js} +0 -0
  300. /package/World/{Storage → Types}/WorldStorage.interface.d.ts +0 -0
  301. /package/{Tasks/IWG → WorldSimulation}/Internal/Classes/DimensionSegment.js +0 -0
  302. /package/{Tasks/IWG → WorldSimulation}/Internal/Classes/SectorState.d.ts +0 -0
  303. /package/{Tasks/IWG → WorldSimulation}/Internal/Classes/SectorState.js +0 -0
  304. /package/{Tasks/IWG → WorldSimulation}/Internal/Classes/SectorVisistedMap.d.ts +0 -0
  305. /package/{Tasks/IWG → WorldSimulation}/Internal/Functions/cullSectors.d.ts +0 -0
  306. /package/{Tasks/IWG → WorldSimulation}/Internal/Functions/runWorldUpdate.d.ts +0 -0
  307. /package/{Tasks/IWG → WorldSimulation}/Procedures/SaveAllSectors.d.ts +0 -0
@@ -11,33 +11,40 @@ function runArchiveSector(location) {
11
11
  location: location,
12
12
  });
13
13
  const transfers = [];
14
- if (archived.palettes.light)
15
- transfers.push(archived.palettes.light.buffer);
16
- if (archived.palettes.state)
17
- transfers.push(archived.palettes.state.buffer);
18
- if (archived.palettes.secondaryState)
19
- transfers.push(archived.palettes.secondaryState.buffer);
14
+ // if (archived.palettes.light) transfers.push(archived.palettes.light.buffer);
15
+ // if (archived.palettes.state) transfers.push(archived.palettes.state.buffer);
16
+ if (archived.palettes.secondaryValue)
17
+ transfers.push(archived.palettes.secondaryValue.buffer);
20
18
  for (const section of archived.sections) {
21
- if (typeof section.buffers.id != "number")
19
+ if (typeof section == "string")
20
+ continue;
21
+ if (ArrayBuffer.isView(section.buffers.id?.buffer))
22
22
  transfers.push(section.buffers.id.buffer);
23
- if (typeof section.buffers.light != "number")
24
- transfers.push(section.buffers.light.buffer);
25
- if (typeof section.buffers.state != "number")
23
+ if (ArrayBuffer.isView(section.buffers.state?.buffer))
26
24
  transfers.push(section.buffers.state.buffer);
27
- if (typeof section.buffers.secondary != "number")
28
- transfers.push(section.buffers.secondary.buffer);
29
- if (typeof section.buffers.mod != "number")
25
+ if (ArrayBuffer.isView(section.buffers.mod?.buffer))
30
26
  transfers.push(section.buffers.mod.buffer);
27
+ if (ArrayBuffer.isView(section.buffers.state?.buffer))
28
+ transfers.push(section.buffers.state.buffer);
29
+ if (ArrayBuffer.isView(section.buffers.light?.sun?.buffer))
30
+ transfers.push((section.buffers.light?.sun).buffer);
31
+ if (ArrayBuffer.isView(section.buffers.light?.red?.buffer))
32
+ transfers.push((section.buffers.light?.red).buffer);
33
+ if (ArrayBuffer.isView(section.buffers.light?.green?.buffer))
34
+ transfers.push((section.buffers.light?.green).buffer);
35
+ if (ArrayBuffer.isView(section.buffers.light?.blue?.buffer))
36
+ transfers.push((section.buffers.light?.blue).buffer);
37
+ if (ArrayBuffer.isView(section.buffers.secondary?.buffer))
38
+ transfers.push(section.buffers.secondary.buffer);
39
+ if (!section.palettes)
40
+ continue;
31
41
  if (section.palettes.id)
32
42
  transfers.push(section.palettes.id.buffer);
33
- if (section.palettes.light)
34
- transfers.push(section.palettes.light.buffer);
35
- if (section.palettes.state)
36
- transfers.push(section.palettes.state.buffer);
37
- if (section.palettes.mod)
38
- transfers.push(section.palettes.mod.buffer);
39
- if (section.palettes.secondaryState)
40
- transfers.push(section.palettes.secondaryState.buffer);
43
+ // if (section.palettes.light) transfers.push(section.palettes.light.buffer);
44
+ // if (section.palettes.state) transfers.push(section.palettes.state.buffer);
45
+ // if (section.palettes.mod) transfers.push(section.palettes.mod.buffer);
46
+ if (section.palettes.secondaryValue)
47
+ transfers.push(section.palettes.secondaryValue.buffer);
41
48
  if (section.palettes.secondaryId)
42
49
  transfers.push(section.palettes.secondaryId.buffer);
43
50
  }
@@ -49,8 +56,15 @@ export default function InitTasks(props) {
49
56
  });
50
57
  Threads.registerTask("archive-sector-binary", async (location) => {
51
58
  const [archived] = runArchiveSector(location);
52
- const compressed = await compressBinaryObject(archived);
53
- return [compressed, [compressed]];
59
+ try {
60
+ const compressed = await compressBinaryObject(archived);
61
+ return [compressed, [compressed]];
62
+ }
63
+ catch (error) {
64
+ console.log(archived);
65
+ console.error(error);
66
+ }
67
+ return [null, []];
54
68
  });
55
69
  Threads.registerTask("import-sector", async (archived) => {
56
70
  const importedSector = ImportSector(archived, {});
@@ -1,9 +1,9 @@
1
1
  import { WorldVoxelCursor } from "./WorldVoxelCursor";
2
2
  import { Vector3Like } from "@amodx/math";
3
- import { DataCursorInterface } from "../../Tools/DataCursor.interface";
3
+ import { DataCursorInterface } from "../../Voxels/Cursor/DataCursor.interface";
4
4
  import { WorldSectionCursorInterface } from "./WorldSectionCursor.interface";
5
5
  import type { Section } from "../Section/index";
6
- export declare class SectionCursor extends DataCursorInterface implements WorldSectionCursorInterface {
6
+ export declare class SectionCursor implements DataCursorInterface, WorldSectionCursorInterface {
7
7
  _section: Section | null;
8
8
  private voxel;
9
9
  _voxelIndex: number;
@@ -11,7 +11,7 @@ export declare class SectionCursor extends DataCursorInterface implements WorldS
11
11
  _sectionPosition: Vector3Like;
12
12
  inBounds(x: number, y: number, z: number): boolean;
13
13
  setSection(section: Section): boolean;
14
- setSection(dimension: string, x: number, y: number, z: number): boolean;
14
+ setSection(dimension: number, x: number, y: number, z: number): boolean;
15
15
  getVoxelAtIndex(index: number): WorldVoxelCursor;
16
16
  getVoxel(x: number, y: number, z: number): WorldVoxelCursor | null;
17
17
  }
@@ -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 "../../Tools/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,7 +38,7 @@ 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];
@@ -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 "../../Tools/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;
@@ -12,7 +12,7 @@ export declare class SectorCursor extends DataCursorInterface implements WorldSe
12
12
  _voxelPosition: Vector3Like;
13
13
  _sectorPosition: Vector3Like;
14
14
  inBounds(x: number, y: number, z: number): boolean;
15
- setSector(dimension: string, x: number, y: number, z: number): boolean;
15
+ setSector(dimension: number, 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
18
  getVoxelAtIndex(index: number): void;
@@ -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 "../../Tools/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);
@@ -1,11 +1,12 @@
1
1
  import { Vector3Like } from "@amodx/math";
2
2
  import { SectorCursor } from "./SectorCursor";
3
- import { DataCursorInterface } from "../../Tools/DataCursor.interface";
4
- export declare class WorldCursor extends DataCursorInterface {
5
- sectorCursors: Map<number, Map<number, SectorCursor>>;
3
+ import { DataCursorInterface } from "../../Voxels/Cursor/DataCursor.interface";
4
+ export declare class WorldCursor implements DataCursorInterface {
5
+ sectorCursors: Record<number, Record<number, SectorCursor | null>>;
6
6
  origin: Vector3Like;
7
- dimension: string;
8
- setFocalPoint(dimension: string, x: number, y: number, z: number): void;
7
+ dimension: number;
8
+ _lastPosition: Vector3Like;
9
+ setFocalPoint(dimension: number, x: number, y: number, z: number): void;
9
10
  inBounds(x: number, y: number, z: number): boolean;
10
11
  getSector(x: number, y: number, z: number): SectorCursor | null;
11
12
  getVoxel(x: number, y: number, z: number): import("./WorldVoxelCursor").WorldVoxelCursor | null;
@@ -1,25 +1,29 @@
1
1
  import { Vector3Like } from "@amodx/math";
2
2
  import { SectorCursor } from "./SectorCursor";
3
3
  import { WorldSpaces } from "../WorldSpaces";
4
- import { DataCursorInterface } from "../../Tools/DataCursor.interface";
5
4
  let cursorCache = [];
6
5
  const tempPosition = Vector3Like.Create();
7
- export class WorldCursor extends DataCursorInterface {
8
- sectorCursors = new Map();
9
- origin = { x: 0, y: 0, z: 0 };
10
- dimension = "";
6
+ export class WorldCursor {
7
+ sectorCursors = {};
8
+ origin = Vector3Like.Create();
9
+ dimension = 0;
10
+ _lastPosition = Vector3Like.Create();
11
11
  setFocalPoint(dimension, x, y, z) {
12
12
  const sectorPos = WorldSpaces.sector.getPosition(x, y, z, tempPosition);
13
- for (const [cx, row] of this.sectorCursors) {
14
- for (const [cz, col] of row) {
15
- cursorCache.push(col);
13
+ for (const row in this.sectorCursors) {
14
+ for (const col in this.sectorCursors[row]) {
15
+ const cursor = this.sectorCursors[row][col];
16
+ if (!cursor)
17
+ continue;
18
+ cursorCache.push(cursor);
19
+ this.sectorCursors[row][col] = null;
16
20
  }
17
21
  }
18
- this.sectorCursors.clear();
19
22
  this.dimension = dimension;
20
23
  this.origin.x = sectorPos.x / WorldSpaces.sector.bounds.x;
21
24
  this.origin.y = sectorPos.y / WorldSpaces.sector.bounds.y;
22
25
  this.origin.z = sectorPos.z / WorldSpaces.sector.bounds.z;
26
+ this.getSector(x, y, z);
23
27
  }
24
28
  inBounds(x, y, z) {
25
29
  return WorldSpaces.world.inBounds(x, y, z);
@@ -30,19 +34,17 @@ export class WorldCursor extends DataCursorInterface {
30
34
  const sectorPos = WorldSpaces.sector.getPosition(x, y, z, tempPosition);
31
35
  const cx = sectorPos.x / WorldSpaces.sector.bounds.x - this.origin.x;
32
36
  const cz = sectorPos.z / WorldSpaces.sector.bounds.z - this.origin.z;
33
- let row = this.sectorCursors.get(cx);
34
- let cursor = row?.get(cz);
37
+ let cursor = this.sectorCursors[cx]?.[cz];
35
38
  if (!cursor) {
36
39
  cursor = cursorCache.length ? cursorCache.shift() : new SectorCursor();
37
40
  if (!cursor.setSector(this.dimension, sectorPos.x, sectorPos.y, sectorPos.z)) {
38
41
  cursorCache.push(cursor);
39
42
  return null;
40
43
  }
41
- if (!row) {
42
- row = new Map();
43
- this.sectorCursors.set(cx, row);
44
+ if (!this.sectorCursors[cx]) {
45
+ this.sectorCursors[cx] ??= {};
44
46
  }
45
- row.set(cz, cursor);
47
+ this.sectorCursors[cx][cz] = cursor;
46
48
  }
47
49
  return cursor;
48
50
  }
@@ -11,9 +11,5 @@ export declare class WorldVoxelCursor extends VoxelCursorInterface {
11
11
  secondary: Uint16Array;
12
12
  constructor(dataCursor: WorldSectionCursorInterface);
13
13
  loadIn(): void;
14
- /**
15
- *
16
- * @param mode 0 for add 1 for remove
17
- */
18
14
  updateVoxel(mode: 0 | 1 | 2): boolean;
19
15
  }
@@ -1,13 +1,13 @@
1
1
  import { VoxelCursorInterface } from "../../Voxels/Cursor/VoxelCursor.interface";
2
2
  export class WorldVoxelCursor extends VoxelCursorInterface {
3
3
  dataCursor;
4
- _section;
5
- ids;
6
- light;
7
- level;
8
- state;
9
- mod;
10
- secondary;
4
+ _section = null;
5
+ ids = new Uint16Array(1);
6
+ light = new Uint16Array(1);
7
+ level = new Uint8Array(1);
8
+ state = new Uint16Array(1);
9
+ mod = new Uint16Array(1);
10
+ secondary = new Uint16Array(1);
11
11
  constructor(dataCursor) {
12
12
  super();
13
13
  this.dataCursor = dataCursor;
@@ -25,25 +25,35 @@ export class WorldVoxelCursor extends VoxelCursorInterface {
25
25
  this._index = this.dataCursor._voxelIndex;
26
26
  this.process();
27
27
  }
28
- /**
29
- *
30
- * @param mode 0 for add 1 for remove
31
- */
32
28
  updateVoxel(mode) {
33
29
  const voxelPos = this.dataCursor._voxelPosition;
30
+ this.dataCursor._section?.sector.setStored(false);
31
+ this.dataCursor._section?.setBuried(this.dataCursor._voxelIndex, false);
34
32
  if (mode == 0) {
35
- this.dataCursor._section?.setBuried(this.dataCursor._voxelIndex, false);
33
+ if (this.doesVoxelAffectLogic()) {
34
+ this.dataCursor._section?.setLogicDirty(true);
35
+ this.dataCursor._section?.setLogicSliceDirty(voxelPos.y, true);
36
+ this.dataCursor._section?.setVoxelLogicDirty(this.dataCursor._voxelIndex, true);
37
+ }
36
38
  this.dataCursor._section?.setHasVoxel(voxelPos.y, true);
37
39
  return true;
38
40
  }
39
41
  if (mode == 1) {
40
- this.dataCursor._section?.setBuried(this.dataCursor._voxelIndex, false);
42
+ if (this.doesVoxelAffectLogic()) {
43
+ this.dataCursor._section?.setLogicDirty(true);
44
+ this.dataCursor._section?.setLogicSliceDirty(voxelPos.y, true);
45
+ this.dataCursor._section?.setVoxelLogicDirty(this.dataCursor._voxelIndex, true);
46
+ }
41
47
  this.dataCursor._section?.setHasVoxelDirty(voxelPos.y, true);
42
48
  this.dataCursor._section?.setHasVoxel(voxelPos.y, false);
43
49
  return true;
44
50
  }
45
51
  if (mode == 2) {
46
- this.dataCursor._section?.setBuried(this.dataCursor._voxelIndex, false);
52
+ if (this.doesVoxelAffectLogic()) {
53
+ this.dataCursor._section?.setLogicDirty(true);
54
+ this.dataCursor._section?.setLogicSliceDirty(voxelPos.y, true);
55
+ this.dataCursor._section?.setVoxelLogicDirty(this.dataCursor._voxelIndex, true);
56
+ }
47
57
  }
48
58
  return false;
49
59
  }
@@ -1,14 +1,17 @@
1
+ import { DimensionSyncData } from "../Types/WorldData.types";
1
2
  import { Sector } from "../Sector";
2
3
  export interface DimensionData {
3
4
  id: string;
5
+ index: number;
4
6
  sectors: Map<string, Sector>;
5
7
  }
6
8
  export interface Dimension extends DimensionData {
7
9
  }
8
10
  export declare class Dimension {
9
- static CreateNew(id: string): Dimension;
11
+ static CreateNew(index: number, id?: string): Dimension;
10
12
  constructor(data: DimensionData);
11
13
  set(sectorId: string, region: Sector): void;
12
14
  delete(sectorId: string): void;
13
15
  get(sectorId: string): Sector | undefined;
16
+ getData(): DimensionSyncData;
14
17
  }
@@ -1,7 +1,8 @@
1
1
  export class Dimension {
2
- static CreateNew(id) {
2
+ static CreateNew(index, id = "") {
3
3
  return new Dimension({
4
4
  id,
5
+ index,
5
6
  sectors: new Map(),
6
7
  });
7
8
  }
@@ -17,4 +18,10 @@ export class Dimension {
17
18
  get(sectorId) {
18
19
  return this.sectors.get(sectorId);
19
20
  }
21
+ getData() {
22
+ return {
23
+ id: this.id,
24
+ index: this.index,
25
+ };
26
+ }
20
27
  }
@@ -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,28 +1,19 @@
1
1
  import { Sector } from "../Sector/Sector.js";
2
- import { Vec3Array } from "@amodx/math";
3
- export interface VoxelDataArrays {
4
- /**The runtime numeric voxel ids */
5
- ids: Uint16Array;
6
- /**The light data for voxels stored as 4 nibbles. 0 -> sun light 1 -> red light 2 -> green light 3 -> blue light */
7
- light: Uint16Array;
8
- /**The levels of the voxel. Used mainly for waterflow now. */
9
- level: Uint8Array;
10
- /**The state of the voxel. Used mainly be the voxel model system to get the model shape. */
11
- state: Uint16Array;
12
- /**The mod state of the voxel. Used mainly by the voxel model system to change model inputs. */
13
- mod: Uint16Array;
14
- /**The secondary state of the voxel. Can be set to a voxel id to make things like water logged voxels.
15
- * But the main voxel itself must not use state or mod because the secondary voxel will use the same state and mod.
16
- */
17
- secondary: Uint16Array;
18
- }
2
+ import { Vec2Array, Vec3Array } from "@amodx/math";
3
+ import { VoxelDataArrays } from "Voxels/index.js";
19
4
  export interface SectionData extends VoxelDataArrays {
5
+ /**Array of bit flags for the sector*/
6
+ flagArray: Uint8Array;
20
7
  /**Y slice of the section to tell if there is voxels or not. Used for height maps. */
21
8
  voxelMap: Uint8Array;
22
9
  /**Y slice of the section to tell if the slice is dirty and voxelMap needs to be re-checked. */
23
10
  dirtyMap: Uint8Array;
11
+ /**Y slice of the section to tell if the slice is needs it voxel logic checked.*/
12
+ logicDirtyMap: Uint8Array;
24
13
  /**A bit array used to cache if a voxel is exposed or not. */
25
14
  buried: Uint8Array;
15
+ /**A bit array used to cache if a voxel needs its logic evaled or not*/
16
+ logicDirty: Uint8Array;
26
17
  }
27
18
  export interface Section extends SectionData {
28
19
  }
@@ -33,14 +24,32 @@ export declare class Section {
33
24
  static GetArrayStartIndex(index: number): number;
34
25
  static CreateNew(index: number, sectorBuffer: ArrayBufferLike): SectionData;
35
26
  static toObject(sector: Sector, index: number, data: SectionData): Section;
27
+ readonly position: Vec3Array;
36
28
  constructor(sector: Sector, index: number, data: SectionData);
37
29
  getPosition(): Readonly<Vec3Array>;
30
+ setBitFlag(index: number, value: boolean): void;
31
+ getBitFlag(index: number): boolean;
32
+ isDisplayDirty(): boolean;
33
+ setDisplayDirty(dirty: boolean): void;
34
+ isLogicDirty(): boolean;
35
+ setLogicDirty(dirty: boolean): void;
36
+ isLogicSliceDirty(y: number): boolean;
37
+ setLogicSliceDirty(y: number, dirty: boolean): void;
38
+ getVoxelLogicDirty(index: number): boolean;
39
+ setVoxelLogicDirty(index: number, value: boolean): void;
40
+ isInProgress(): boolean;
41
+ setInProgress(inProgress: boolean): void;
42
+ isLogicUpdateInProgress(): boolean;
43
+ setLogicUpdateInProgress(inProgress: boolean): void;
38
44
  getBuried(index: number): boolean;
39
45
  setBuried(index: number, value: boolean): void;
40
46
  setHasVoxel(y: number, hasVoxel: boolean): void;
41
47
  getHasVoxel(y: number): boolean;
42
48
  setHasVoxelDirty(y: number, dirty: boolean): void;
43
49
  getHasVoxelDirty(y: number): boolean;
44
- getMinMax(): number[];
50
+ getMinMax(): Vec2Array;
51
+ getLogicMinMax(): Vec2Array;
52
+ storeFlags(): Record<string, boolean>;
53
+ loadFlags(flags: Record<string, boolean>): void;
45
54
  toJSON(): SectionData;
46
55
  }
@@ -1,10 +1,9 @@
1
1
  import { WorldSpaces } from "../WorldSpaces.js";
2
2
  import { Sector } from "../Sector/Sector.js";
3
- import { getBitArrayIndex, setBitArrayIndex, } from "../../Util/Binary/BitArray.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";
6
+ const temp = [0, 0];
8
7
  export class Section {
9
8
  sector;
10
9
  index;
@@ -12,18 +11,20 @@ export class Section {
12
11
  const voxelSize = WorldSpaces.section.volumne;
13
12
  const height = WorldSpaces.section.bounds.y;
14
13
  return forceMultipleOf2(
15
- //-----
16
- //voxelMap
17
- height / 8 +
14
+ //----- state
15
+ //2 bytes for flags
16
+ 2 +
17
+ //voxelMap
18
+ height / 8 +
18
19
  //dirtyMap
19
20
  height / 8 +
20
- //-----
21
- //cache
21
+ //logicDirtyMap
22
+ height / 8 +
23
+ //bureid
22
24
  voxelSize / 8 +
23
- //exposed
24
- voxelSize * 2 +
25
- //-----
26
- //voxel data
25
+ //logic dirty
26
+ voxelSize / 8 +
27
+ //---- voxel data arrays
27
28
  //ids
28
29
  voxelSize * 2 +
29
30
  //light
@@ -42,14 +43,20 @@ export class Section {
42
43
  }
43
44
  static CreateNew(index, sectorBuffer) {
44
45
  const voxelSize = WorldSpaces.section.volumne;
45
- let bufferStart = this.GetArrayStartIndex(index);
46
46
  const height = WorldSpaces.section.bounds.y;
47
+ let bufferStart = this.GetArrayStartIndex(index);
48
+ const flagArray = new Uint8Array(sectorBuffer, bufferStart, 2);
49
+ bufferStart += 2;
47
50
  const voxelMap = new Uint8Array(sectorBuffer, bufferStart, height / 8);
48
51
  bufferStart += height / 8;
49
52
  const dirtyMap = new Uint8Array(sectorBuffer, bufferStart, height / 8);
50
53
  bufferStart += height / 8;
54
+ const logicDirtyMap = new Uint8Array(sectorBuffer, bufferStart, height / 8);
55
+ bufferStart += height / 8;
51
56
  const buried = new Uint8Array(sectorBuffer, bufferStart, voxelSize / 8);
52
57
  bufferStart += voxelSize / 8;
58
+ const logicDirty = new Uint8Array(sectorBuffer, bufferStart, voxelSize / 8);
59
+ bufferStart += voxelSize / 8;
53
60
  const ids = new Uint16Array(sectorBuffer, bufferStart, voxelSize);
54
61
  bufferStart += voxelSize * 2;
55
62
  const light = new Uint16Array(sectorBuffer, bufferStart, voxelSize);
@@ -63,8 +70,11 @@ export class Section {
63
70
  const level = new Uint8Array(sectorBuffer, bufferStart, voxelSize);
64
71
  bufferStart += voxelSize;
65
72
  return {
73
+ flagArray,
66
74
  voxelMap,
67
75
  dirtyMap,
76
+ logicDirtyMap,
77
+ logicDirty,
68
78
  buried,
69
79
  ids,
70
80
  light,
@@ -77,11 +87,22 @@ export class Section {
77
87
  static toObject(sector, index, data) {
78
88
  return new Section(sector, index, data);
79
89
  }
90
+ position;
80
91
  constructor(sector, index, data) {
81
92
  this.sector = sector;
82
93
  this.index = index;
94
+ this.position = WorldSpaces.section.getPositionFromIndexVec3Array(this.index);
95
+ this.position[0] =
96
+ this.position[0] * WorldSpaces.section.bounds.x + this.sector.position[0];
97
+ this.position[1] =
98
+ this.position[1] * WorldSpaces.section.bounds.y + this.sector.position[1];
99
+ this.position[2] =
100
+ this.position[2] * WorldSpaces.section.bounds.z + this.sector.position[2];
101
+ this.flagArray = data.flagArray;
83
102
  this.voxelMap = data.voxelMap;
84
103
  this.dirtyMap = data.dirtyMap;
104
+ this.logicDirty = data.logicDirty;
105
+ this.logicDirtyMap = data.logicDirtyMap;
85
106
  this.buried = data.buried;
86
107
  this.ids = data.ids;
87
108
  this.level = data.level;
@@ -91,11 +112,56 @@ export class Section {
91
112
  this.mod = data.mod;
92
113
  }
93
114
  getPosition() {
94
- position[0] = this.sector.position[0];
95
- position[1] =
96
- this.sector.position[1] + this.index * WorldSpaces.section.bounds.y;
97
- position[2] = this.sector.position[2];
98
- return position;
115
+ return this.position;
116
+ }
117
+ setBitFlag(index, value) {
118
+ setBitArrayIndex(this.flagArray, index, value ? 1 : 0);
119
+ }
120
+ getBitFlag(index) {
121
+ return getBitArrayIndex(this.flagArray, index) == 1;
122
+ }
123
+ isDisplayDirty() {
124
+ return this.getBitFlag(SectionStateDefaultFlags.displayDirty);
125
+ }
126
+ setDisplayDirty(dirty) {
127
+ this.setBitFlag(SectionStateDefaultFlags.displayDirty, dirty);
128
+ if (dirty) {
129
+ this.sector.setStored(false);
130
+ this.sector.setDisplayDirty(true);
131
+ }
132
+ }
133
+ isLogicDirty() {
134
+ return this.getBitFlag(SectionStateDefaultFlags.logicDirty);
135
+ }
136
+ setLogicDirty(dirty) {
137
+ this.setBitFlag(SectionStateDefaultFlags.logicDirty, dirty);
138
+ if (dirty) {
139
+ this.sector.setLogicDirty(true);
140
+ }
141
+ }
142
+ isLogicSliceDirty(y) {
143
+ return getBitArrayIndex(this.logicDirtyMap, y) == 1;
144
+ }
145
+ setLogicSliceDirty(y, dirty) {
146
+ setBitArrayIndex(this.logicDirtyMap, y, dirty ? 1 : 0);
147
+ }
148
+ getVoxelLogicDirty(index) {
149
+ return getBitArrayIndex(this.logicDirty, index) == 1;
150
+ }
151
+ setVoxelLogicDirty(index, value) {
152
+ return setBitArrayIndex(this.logicDirty, index, value ? 1 : 0);
153
+ }
154
+ isInProgress() {
155
+ return this.getBitFlag(SectionStateDefaultFlags.inProgress);
156
+ }
157
+ setInProgress(inProgress) {
158
+ this.setBitFlag(SectionStateDefaultFlags.inProgress, inProgress);
159
+ }
160
+ isLogicUpdateInProgress() {
161
+ return this.getBitFlag(SectionStateDefaultFlags.logicUpdateInProgress);
162
+ }
163
+ setLogicUpdateInProgress(inProgress) {
164
+ this.setBitFlag(SectionStateDefaultFlags.logicUpdateInProgress, inProgress);
99
165
  }
100
166
  getBuried(index) {
101
167
  return getBitArrayIndex(this.buried, index) == 1;
@@ -127,10 +193,48 @@ export class Section {
127
193
  max = i;
128
194
  }
129
195
  }
130
- return [min, max];
196
+ temp[0] = min;
197
+ temp[1] = max;
198
+ return temp;
199
+ }
200
+ getLogicMinMax() {
201
+ let min = Infinity;
202
+ let max = -Infinity;
203
+ let i = WorldSpaces.section.bounds.y;
204
+ while (i--) {
205
+ if (this.isLogicSliceDirty(i)) {
206
+ if (i < min)
207
+ min = i;
208
+ if (i > max)
209
+ max = i;
210
+ }
211
+ }
212
+ temp[0] = min;
213
+ temp[1] = max;
214
+ return temp;
215
+ }
216
+ storeFlags() {
217
+ const stored = {};
218
+ for (const key in SectionState.StoredFlags) {
219
+ stored[key] = this.getBitFlag(SectionState.StoredFlags[key]);
220
+ }
221
+ return stored;
222
+ }
223
+ loadFlags(flags) {
224
+ for (const flag in flags) {
225
+ const storedIndex = SectionState.StoredFlags[flag];
226
+ if (storedIndex === undefined) {
227
+ console.warn(`${flag} does not exist on stored flags for section`);
228
+ continue;
229
+ }
230
+ this.setBitFlag(storedIndex, flags[flag]);
231
+ }
131
232
  }
132
233
  toJSON() {
133
234
  return {
235
+ flagArray: this.flagArray,
236
+ logicDirtyMap: this.logicDirtyMap,
237
+ logicDirty: this.logicDirty,
134
238
  voxelMap: this.voxelMap,
135
239
  dirtyMap: this.dirtyMap,
136
240
  buried: this.buried,