@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.
- package/Contexts/Base/Main/InitDataGenerator.js +0 -9
- package/Contexts/Base/Remote/DataSync.types.d.ts +0 -5
- package/Contexts/Base/Remote/InitDataSync.js +17 -31
- package/Contexts/Render/DivineVoxelEngineRender.d.ts +1 -1
- package/Contexts/World/DivineVoxelEngineWorld.d.ts +1 -1
- package/Init/StartConstructor.js +7 -7
- package/Init/StartWorld.d.ts +1 -1
- package/Init/StartWorld.js +0 -12
- package/Math/Indexing.d.ts +12 -3
- package/Math/Indexing.js +24 -15
- package/Mesher/Functions/CompactVoxelMesh.d.ts +2 -2
- package/Mesher/Functions/CompactVoxelMesh.js +4 -5
- package/Mesher/Functions/MeshSection.d.ts +1 -1
- package/Mesher/Functions/MeshSection.js +72 -66
- package/Mesher/Functions/MeshTexture.d.ts +1 -1
- package/Mesher/Functions/MeshTexture.js +3 -4
- package/Mesher/Functions/MeshVoxel.js +20 -26
- package/Mesher/Geomtry/Primitives/QuadVertexData.d.ts +12 -10
- package/Mesher/Geomtry/Primitives/QuadVertexData.js +49 -56
- package/Mesher/Geomtry/VoxelGeometryBuilder.d.ts +2 -2
- package/Mesher/Geomtry/VoxelGeometryBuilder.js +108 -125
- package/Mesher/Geomtry/VoxelMesh.d.ts +1 -1
- package/Mesher/Geomtry/VoxelMesh.js +2 -2
- package/Mesher/{Tools → Geomtry}/VoxelMeshBVHBuilder.d.ts +2 -9
- package/Mesher/{Tools → Geomtry}/VoxelMeshBVHBuilder.js +4 -16
- package/Mesher/Geomtry/{Buffers.d.ts → VoxelMeshBuffers.d.ts} +9 -8
- package/Mesher/Geomtry/VoxelMeshBuffers.js +49 -0
- package/Mesher/{Tools → Geomtry}/VoxelMeshVertexStructCursor.d.ts +10 -0
- package/Mesher/{Tools → Geomtry}/VoxelMeshVertexStructCursor.js +10 -0
- package/Mesher/Geomtry/index.d.ts +0 -1
- package/Mesher/Geomtry/index.js +0 -1
- package/Mesher/InitMesher.js +2 -11
- package/Mesher/InitTask.js +10 -22
- package/Mesher/Models/Common/BoundsFunctions.d.ts +1 -3
- package/Mesher/Models/Common/BoundsFunctions.js +0 -16
- package/Mesher/Models/Common/Calc/CalcConstants.js +14 -31
- package/Mesher/Models/Common/Calc/FaceDataCalc.d.ts +2 -8
- package/Mesher/Models/Common/Calc/FaceDataCalc.js +50 -52
- package/Mesher/Models/Nodes/Custom/Liquid/FlowGradient.d.ts +2 -2
- package/Mesher/Models/Nodes/Custom/Liquid/FlowGradient.js +1 -1
- package/Mesher/Models/Nodes/Custom/Liquid/LiquidGeomtryNode.d.ts +1 -5
- package/Mesher/Models/Nodes/Custom/Liquid/LiquidGeomtryNode.js +40 -42
- package/Mesher/Models/Nodes/GeometryNode.d.ts +3 -5
- package/Mesher/Models/Nodes/GeometryNode.js +1 -2
- package/Mesher/Models/Nodes/Ruled/BoxVoxelGeometryNode.d.ts +3 -6
- package/Mesher/Models/Nodes/Ruled/BoxVoxelGeometryNode.js +55 -40
- package/Mesher/Models/Nodes/Ruled/QuadVoxelGeometryNode.d.ts +2 -6
- package/Mesher/Models/Nodes/Ruled/QuadVoxelGeometryNode.js +52 -51
- package/Mesher/Models/Nodes/Ruleless/RulelessBoxVoxelGeometryNode.d.ts +2 -6
- package/Mesher/Models/Nodes/Ruleless/RulelessBoxVoxelGeometryNode.js +18 -19
- package/Mesher/Models/Nodes/Ruleless/RulelessQuadVoxelGeometryNode.d.ts +2 -6
- package/Mesher/Models/Nodes/Ruleless/RulelessQuadVoxelGeometryNode.js +37 -40
- package/Mesher/{Tools → Models/Protocols}/OutlinedVoxelTool.d.ts +1 -1
- package/Mesher/{Tools → Models/Protocols}/OutlinedVoxelTool.js +1 -1
- package/Mesher/Models/RenderedMaterials.d.ts +6 -0
- package/Mesher/{RenderedMaterials.js → Models/RenderedMaterials.js} +2 -2
- package/Mesher/Models/VoxelConstructor.d.ts +4 -5
- package/Mesher/Models/VoxelConstructor.js +23 -12
- package/Mesher/Models/{VoxelGeometryLookUp.d.ts → VoxelGeometryBuilderCacheSpace.d.ts} +6 -14
- package/Mesher/Models/{VoxelGeometryLookUp.js → VoxelGeometryBuilderCacheSpace.js} +26 -44
- package/Mesher/{Tools/VoxelMesherDataTool.d.ts → Models/VoxelModelBuilder.d.ts} +10 -8
- package/Mesher/{Tools/VoxelMesherDataTool.js → Models/VoxelModelBuilder.js} +44 -19
- package/Mesher/Models/VoxelModelConstructorRegister.js +3 -3
- package/Models/Defaults/CubeVoxelGeometry.js +4 -0
- package/Models/Defaults/CubeVoxelModels.js +344 -344
- package/Models/Defaults/LiquidVoxelModel.js +2 -2
- package/Models/Defaults/PanelVoxelModels.js +432 -432
- package/Models/Defaults/StairVoxelModel.js +576 -576
- package/Models/Examples.js +469 -456
- package/Models/Indexing/VoxelAOResultsIndex.d.ts +4 -4
- package/Models/Indexing/VoxelAOResultsIndex.js +15 -9
- package/Models/Indexing/VoxelFaceCullResultsIndex.d.ts +3 -3
- package/Models/Indexing/VoxelFaceCullResultsIndex.js +14 -9
- package/Models/Indexing/VoxelFaceTransparentResultsIndex.d.ts +1 -1
- package/Models/Indexing/VoxelFaceTransparentResultsIndex.js +1 -1
- package/Models/Rules/Functions/BuildFinalInputs.js +9 -7
- package/Models/Rules/Functions/BuildGeomtryInputs.js +8 -5
- package/Models/Rules/Functions/BuildRules.js +4 -4
- package/Models/Rules/{VoxelModelManager.d.ts → VoxelModelRuleBuilderRegister.d.ts} +1 -1
- package/Models/Rules/VoxelModelRuleBuilderRegister.js +178 -0
- package/Models/VoxelModel.types.d.ts +14 -5
- package/Renderer/Classes/SectorMesh.d.ts +3 -4
- package/Renderer/Classes/SectorMesh.js +6 -11
- package/Renderer/InitTasks.js +6 -7
- package/Renderer/MeshManager.js +2 -2
- package/Renderer/MeshRegister.js +2 -1
- package/Settings/EngineSettings.d.ts +1 -1
- package/Settings/EngineSettings.js +3 -5
- package/Settings/EngineSettings.types.d.ts +17 -18
- package/Settings/EngineSettings.types.js +16 -15
- package/Tasks/IWG/IWG.d.ts +2 -1
- package/Tasks/IWG/IWG.js +9 -3
- package/Tasks/IWG/Internal/Classes/BuildQueue.d.ts +11 -0
- package/Tasks/IWG/Internal/Classes/BuildQueue.js +49 -0
- package/Tasks/IWG/Internal/Classes/Generator.d.ts +6 -1
- package/Tasks/IWG/Internal/Classes/Generator.js +14 -2
- package/Tasks/IWG/Internal/Classes/IWGTaskBase.js +2 -2
- package/Tasks/IWG/Internal/Functions/getSectorState.js +4 -7
- package/Tasks/IWG/Internal/Functions/runBuildUpdate.js +21 -2
- package/Tasks/IWG/Internal/Functions/runWorldUpdate.js +5 -6
- package/Tasks/IWG/Internal/IWGTasks.d.ts +0 -4
- package/Tasks/IWG/Internal/IWGTasks.js +12 -31
- package/Tasks/IWG/Internal/IWGTools.d.ts +1 -1
- package/Tasks/IWG/Procedures/SaveAllSectors.js +2 -0
- package/Tasks/Propagation/Flow/FlowManager.d.ts +0 -2
- package/Tasks/Propagation/Flow/FlowManager.js +86 -87
- package/Tasks/Propagation/Flow/WorldFlow.js +2 -3
- package/Tasks/Propagation/Illumanation/WorldRGB.js +1 -2
- package/Tasks/Update/InitTasks.d.ts +2 -1
- package/Tasks/Update/InitTasks.js +6 -6
- package/Tasks/Update/UpdateTask.d.ts +3 -1
- package/Tasks/Update/UpdateTask.js +28 -2
- package/Tasks/Update/VoxelUpdate.js +21 -7
- package/Tasks/WorldGeneration/WorldGenBrush.js +2 -1
- package/Templates/Cursor/TemplateCursor.d.ts +2 -2
- package/Templates/Cursor/TemplateCursor.js +1 -2
- package/Templates/Functions/CreateTemplate.js +1 -1
- package/Templates/VoxelTemplate.js +6 -8
- package/Templates/VoxelTemplates.types.d.ts +1 -1
- package/Textures/Classes/CompiledTexture.d.ts +18 -0
- package/Textures/Classes/CompiledTexture.js +50 -0
- package/Textures/Classes/CompiledTextureAnimation.d.ts +12 -0
- package/Textures/Classes/CompiledTextureAnimation.js +27 -0
- package/Textures/Classes/TextureAnimationTexture.d.ts +10 -0
- package/Textures/Classes/TextureAnimationTexture.js +32 -0
- package/Textures/Functions/BuildTextureData.d.ts +10 -0
- package/Textures/Functions/BuildTextureData.js +205 -0
- package/Textures/Texture.types.d.ts +50 -64
- package/Textures/TextureManager.d.ts +8 -19
- package/Textures/TextureManager.js +28 -166
- package/Tools/Brush/Brush.d.ts +1 -3
- package/Tools/Brush/Brush.js +43 -12
- package/Util/Binary/BinaryArrays.d.ts +6 -0
- package/Util/Binary/BinaryArrays.js +25 -0
- package/Util/Binary/BinaryBuffer.d.ts +29 -0
- package/Util/Binary/BinaryBuffer.js +130 -0
- package/Util/Binary/BinaryFunctions.d.ts +3 -0
- package/Util/Binary/BinaryFunctions.js +11 -0
- package/Util/StringPalette.d.ts +1 -0
- package/Util/StringPalette.js +8 -0
- package/Voxels/Cursor/DataCursor.interface.d.ts +5 -0
- package/Voxels/Cursor/VoxelCursor.d.ts +6 -6
- package/Voxels/Cursor/VoxelCursor.interface.d.ts +11 -16
- package/Voxels/Cursor/VoxelCursor.interface.js +35 -58
- package/Voxels/Cursor/VoxelCursor.js +13 -12
- package/Voxels/Cursor/VoxelLightData.d.ts +3 -4
- package/Voxels/Cursor/VoxelLightData.js +8 -7
- package/Voxels/Data/VoxelPalettesRegister.d.ts +8 -0
- package/Voxels/Data/VoxelPalettesRegister.js +8 -0
- package/Voxels/Data/VoxelTag.types.d.ts +56 -0
- package/Voxels/Data/VoxelTag.types.js +23 -0
- package/Voxels/{State → Data}/VoxelTagStates.d.ts +2 -2
- package/Voxels/{State → Data}/VoxelTagStates.js +5 -5
- package/Voxels/Data/VoxelTagsRegister.d.ts +9 -0
- package/Voxels/Data/VoxelTagsRegister.js +32 -0
- package/Voxels/Functions/BuildStateData.js +12 -12
- package/Voxels/Functions/BuildTagAndPaletteData.d.ts +13 -0
- package/Voxels/Functions/BuildTagAndPaletteData.js +55 -0
- package/Voxels/Indexes/VoxelIndex.js +3 -3
- package/Voxels/InitVoxelData.js +31 -73
- package/Voxels/State/Schema/StateSchema.d.ts +1 -1
- package/Voxels/Types/Voxel.types.d.ts +20 -42
- package/Voxels/Types/Voxel.types.js +6 -17
- package/Voxels/Types/VoxelModelCompiledData.types.d.ts +11 -13
- package/Voxels/Types/VoxelSubstances.types.d.ts +2 -15
- package/Voxels/Types/VoxelSubstances.types.js +1 -9
- package/World/Archive/Archive.types.d.ts +38 -34
- package/World/Archive/Functions/ArchiveArea.js +18 -30
- package/World/Archive/Functions/ArchiveSector.js +484 -213
- package/World/Archive/Functions/ImportSector.d.ts +3 -3
- package/World/Archive/Functions/ImportSector.js +205 -151
- package/World/Archive/Functions/Shared.d.ts +6 -0
- package/World/Archive/Functions/Shared.js +75 -0
- package/World/Archive/InitTasks.js +30 -13
- package/World/Cursor/SectionCursor.d.ts +3 -2
- package/World/Cursor/SectionCursor.js +9 -4
- package/World/Cursor/SectorCursor.d.ts +3 -2
- package/World/Cursor/SectorCursor.js +5 -3
- package/World/Cursor/WorldCursor.d.ts +2 -2
- package/World/Cursor/WorldCursor.js +6 -3
- package/World/Cursor/WorldVoxelCursor.d.ts +7 -7
- package/World/Cursor/WorldVoxelCursor.js +21 -24
- package/World/InitTasks.d.ts +1 -1
- package/World/Lock/WorldLock.d.ts +1 -1
- package/World/Section/Section.d.ts +31 -23
- package/World/Section/Section.js +116 -18
- package/World/Section/SectionState.d.ts +10 -0
- package/World/Section/SectionState.js +11 -0
- package/World/Sector/Sector.d.ts +24 -9
- package/World/Sector/Sector.js +92 -21
- package/World/Sector/SectorHeightMap.js +3 -5
- package/World/Sector/SectorState.d.ts +21 -0
- package/World/Sector/SectorState.js +28 -0
- package/World/WorldRegister.d.ts +4 -0
- package/World/WorldRegister.js +15 -3
- package/World/WorldSpaces.d.ts +6 -0
- package/World/WorldSpaces.js +25 -6
- package/package.json +1 -1
- package/Data/Cursor/DataCursor.interface.d.ts +0 -5
- package/Data/Cursor/DataCursor.interface.js +0 -2
- package/Data/Register/MappedDataRegister.d.ts +0 -5
- package/Data/Register/MappedDataRegister.js +0 -9
- package/Data/Register/MappedRegisterBase.d.ts +0 -14
- package/Data/Register/MappedRegisterBase.js +0 -50
- package/Data/Structs/StructBuilder.d.ts +0 -34
- package/Data/Structs/StructBuilder.js +0 -157
- package/Data/Structs/StructBuilder.types.d.ts +0 -30
- package/Mesher/Functions/CompactMesh.d.ts +0 -2
- package/Mesher/Functions/CompactMesh.js +0 -42
- package/Mesher/Geomtry/Buffers.js +0 -81
- package/Mesher/Geomtry/GeometryNormals.d.ts +0 -10
- package/Mesher/Geomtry/GeometryNormals.js +0 -52
- package/Mesher/Geomtry/MeshData.types.d.ts +0 -13
- package/Mesher/Geomtry/MeshData.types.js +0 -6
- package/Mesher/Geomtry/Tools/MesherDataTools.d.ts +0 -7
- package/Mesher/Geomtry/Tools/MesherDataTools.js +0 -12
- package/Mesher/Geomtry/Tools/index.d.ts +0 -1
- package/Mesher/Geomtry/Tools/index.js +0 -1
- package/Mesher/RenderedMaterials.d.ts +0 -6
- package/Models/Rules/VoxelModelManager.js +0 -82
- package/Textures/TextureAnimations.d.ts +0 -4
- package/Textures/TextureAnimations.js +0 -35
- package/Textures/TextureArray.d.ts +0 -47
- package/Textures/TextureArray.js +0 -202
- package/Textures/TextureBuilder.d.ts +0 -13
- package/Textures/TextureBuilder.js +0 -120
- package/Textures/TextureRegister.d.ts +0 -9
- package/Textures/TextureRegister.js +0 -28
- package/Tools/Data/SubstanceDataTool.d.ts +0 -13
- package/Tools/Data/SubstanceDataTool.js +0 -51
- package/Voxels/Palettes/MaterialPalette.d.ts +0 -9
- package/Voxels/Palettes/MaterialPalette.js +0 -11
- package/Voxels/Palettes/SubstancePalette.d.ts +0 -9
- package/Voxels/Palettes/SubstancePalette.js +0 -11
- package/Voxels/Palettes/VoxelPalette.d.ts +0 -11
- package/Voxels/Palettes/VoxelPalette.js +0 -15
- package/Voxels/Segments/MaterialDataGenerator.d.ts +0 -6
- package/Voxels/Segments/MaterialDataGenerator.js +0 -12
- package/Voxels/Segments/SubstanceDataGenerator.d.ts +0 -6
- package/Voxels/Segments/SubstanceDataGenerator.js +0 -35
- package/Voxels/Segments/VoxelDataGenerator.d.ts +0 -10
- package/Voxels/Segments/VoxelDataGenerator.js +0 -56
- package/Voxels/Structs/Builder/SubstanceStructBuilder.d.ts +0 -2
- package/Voxels/Structs/Builder/SubstanceStructBuilder.js +0 -42
- package/Voxels/Structs/Builder/VoxelStructBuilder.d.ts +0 -2
- package/Voxels/Structs/Builder/VoxelStructBuilder.js +0 -68
- package/Voxels/Structs/SubstanceStruct.d.ts +0 -17
- package/Voxels/Structs/SubstanceStruct.js +0 -17
- package/Voxels/Structs/VoxelStruct.d.ts +0 -27
- package/Voxels/Structs/VoxelStruct.js +0 -29
- package/World/Section/SectionHeightMap.d.ts +0 -10
- package/World/Section/SectionHeightMap.js +0 -39
- package/World/Section/SectionStruct.d.ts +0 -8
- package/World/Section/SectionStruct.js +0 -29
- package/World/Section/SectionStructProperties.d.ts +0 -10
- package/World/Section/SectionStructProperties.js +0 -11
- package/World/Sector/SectorStruct.d.ts +0 -1
- package/World/Sector/SectorStruct.js +0 -46
- package/World/Sector/SectorStructIds.d.ts +0 -13
- package/World/Sector/SectorStructIds.js +0 -14
- package/World/Structs/WorldDataStructProperties.d.ts +0 -8
- package/World/Structs/WorldDataStructProperties.js +0 -9
- /package/Mesher/{VoxelShaderData.d.ts → Geomtry/VoxelShaderData.d.ts} +0 -0
- /package/Mesher/{VoxelShaderData.js → Geomtry/VoxelShaderData.js} +0 -0
- /package/{Data/Functions → Util/Binary}/Palettes.d.ts +0 -0
- /package/{Data/Functions → Util/Binary}/Palettes.js +0 -0
- /package/{Data/Structs/StructBuilder.types.js → Voxels/Cursor/DataCursor.interface.js} +0 -0
- /package/Voxels/{VoxelLevelReader.d.ts → Cursor/VoxelLevelReader.d.ts} +0 -0
- /package/Voxels/{VoxelLevelReader.js → Cursor/VoxelLevelReader.js} +0 -0
- /package/World/{Storage → Types}/WorldStorage.interface.d.ts +0 -0
- /package/World/{Storage → Types}/WorldStorage.interface.js +0 -0
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
export type VoxelAOResultsIndexData = {
|
|
2
|
-
buffer:
|
|
2
|
+
buffer: ArrayBufferLike;
|
|
3
3
|
vertexByteCount: number;
|
|
4
4
|
};
|
|
5
5
|
export declare class VoxelAOResultsIndex {
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
view: Uint8Array;
|
|
7
|
+
readonly vertexByteCount: number;
|
|
8
8
|
constructor(data: VoxelAOResultsIndexData);
|
|
9
|
-
getByteIndex(otherId: number, directionIndex: number): number;
|
|
10
9
|
getValue(otherId: number, directionIndex: number, vertexIndex: number): number;
|
|
11
10
|
setValue(otherId: number, directionIndex: number, vertexIndex: number, value?: number): void;
|
|
11
|
+
getData(): VoxelAOResultsIndexData;
|
|
12
12
|
}
|
|
@@ -1,20 +1,26 @@
|
|
|
1
1
|
import { BinaryArrays } from "@amodx/binary/Util/BinaryArrays";
|
|
2
2
|
import { VoxelRelativeCubeIndex } from "./VoxelRelativeCubeIndex";
|
|
3
|
+
const flatIndexSize = VoxelRelativeCubeIndex.flatIndex.size;
|
|
4
|
+
function getByteIndex(otherId, directionIndex, vertexByteCount) {
|
|
5
|
+
return (otherId * vertexByteCount * flatIndexSize + directionIndex * vertexByteCount);
|
|
6
|
+
}
|
|
3
7
|
export class VoxelAOResultsIndex {
|
|
4
|
-
data;
|
|
5
8
|
view;
|
|
9
|
+
vertexByteCount;
|
|
6
10
|
constructor(data) {
|
|
7
|
-
this.
|
|
8
|
-
this.view = new
|
|
9
|
-
}
|
|
10
|
-
getByteIndex(otherId, directionIndex) {
|
|
11
|
-
return (otherId * this.data.vertexByteCount * VoxelRelativeCubeIndex.flatIndex.size +
|
|
12
|
-
directionIndex * this.data.vertexByteCount);
|
|
11
|
+
this.vertexByteCount = data.vertexByteCount;
|
|
12
|
+
this.view = new Uint8Array(data.buffer);
|
|
13
13
|
}
|
|
14
14
|
getValue(otherId, directionIndex, vertexIndex) {
|
|
15
|
-
return BinaryArrays.getBitArrayIndex(this.view,
|
|
15
|
+
return BinaryArrays.getBitArrayIndex(this.view, getByteIndex(otherId, directionIndex, this.vertexByteCount), vertexIndex);
|
|
16
16
|
}
|
|
17
17
|
setValue(otherId, directionIndex, vertexIndex, value = 1) {
|
|
18
|
-
BinaryArrays.setBitArrayIndex(this.view,
|
|
18
|
+
BinaryArrays.setBitArrayIndex(this.view, getByteIndex(otherId, directionIndex, this.vertexByteCount), vertexIndex, value);
|
|
19
|
+
}
|
|
20
|
+
getData() {
|
|
21
|
+
return {
|
|
22
|
+
buffer: this.view.buffer,
|
|
23
|
+
vertexByteCount: this.vertexByteCount,
|
|
24
|
+
};
|
|
19
25
|
}
|
|
20
26
|
}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
export type VoxelFaceCullResultsIndexData = {
|
|
2
|
-
buffer:
|
|
2
|
+
buffer: ArrayBufferLike;
|
|
3
3
|
faceByteCount: number;
|
|
4
4
|
};
|
|
5
5
|
export declare class VoxelFaceCullResultsIndex {
|
|
6
|
-
data: VoxelFaceCullResultsIndexData;
|
|
7
6
|
view: Uint16Array;
|
|
7
|
+
readonly faceByteCount: number;
|
|
8
8
|
constructor(data: VoxelFaceCullResultsIndexData);
|
|
9
|
-
getByteIndex(otherId: number, directionIndex: number): number;
|
|
10
9
|
getValue(otherId: number, directionIndex: number, faceIndex: number): number;
|
|
11
10
|
setValue(otherId: number, directionIndex: number, faceIndex: number, value?: number): number;
|
|
11
|
+
getData(): VoxelFaceCullResultsIndexData;
|
|
12
12
|
}
|
|
@@ -1,21 +1,26 @@
|
|
|
1
1
|
import { VoxelRelativeCubeIndex } from "./VoxelRelativeCubeIndex";
|
|
2
|
+
const flatIndexSize = VoxelRelativeCubeIndex.flatIndex.size;
|
|
3
|
+
function getByteIndex(otherId, directionIndex, faceByteCount) {
|
|
4
|
+
return (otherId * faceByteCount * flatIndexSize + directionIndex * faceByteCount);
|
|
5
|
+
}
|
|
2
6
|
export class VoxelFaceCullResultsIndex {
|
|
3
|
-
data;
|
|
4
7
|
view;
|
|
8
|
+
faceByteCount;
|
|
5
9
|
constructor(data) {
|
|
6
|
-
this.data = data;
|
|
7
10
|
this.view = new Uint16Array(data.buffer);
|
|
8
|
-
|
|
9
|
-
getByteIndex(otherId, directionIndex) {
|
|
10
|
-
return (otherId * this.data.faceByteCount * VoxelRelativeCubeIndex.flatIndex.size +
|
|
11
|
-
directionIndex * this.data.faceByteCount);
|
|
11
|
+
this.faceByteCount = data.faceByteCount;
|
|
12
12
|
}
|
|
13
13
|
getValue(otherId, directionIndex, faceIndex) {
|
|
14
|
-
const v = this.view[
|
|
14
|
+
const v = this.view[getByteIndex(otherId, directionIndex, this.faceByteCount) + faceIndex];
|
|
15
15
|
return v == 65535 ? -1 : v;
|
|
16
16
|
}
|
|
17
17
|
setValue(otherId, directionIndex, faceIndex, value = -1) {
|
|
18
|
-
return (this.view[
|
|
19
|
-
|
|
18
|
+
return (this.view[getByteIndex(otherId, directionIndex, this.faceByteCount) + faceIndex] = value);
|
|
19
|
+
}
|
|
20
|
+
getData() {
|
|
21
|
+
return {
|
|
22
|
+
buffer: this.view.buffer,
|
|
23
|
+
faceByteCount: this.faceByteCount,
|
|
24
|
+
};
|
|
20
25
|
}
|
|
21
26
|
}
|
|
@@ -4,7 +4,7 @@ export type VoxelFaceTransparentResultsIndexData = {
|
|
|
4
4
|
};
|
|
5
5
|
export declare class VoxelFaceTransparentResultsIndex {
|
|
6
6
|
data: VoxelFaceTransparentResultsIndexData;
|
|
7
|
-
view:
|
|
7
|
+
view: Uint8Array;
|
|
8
8
|
constructor(data: VoxelFaceTransparentResultsIndexData);
|
|
9
9
|
getValue(modState: number, faceByteIndex: number, faceIndex: number): number;
|
|
10
10
|
setValue(modState: number, faceByteIndex: number, faceIndex: number, value?: number): void;
|
|
@@ -4,7 +4,7 @@ export class VoxelFaceTransparentResultsIndex {
|
|
|
4
4
|
view;
|
|
5
5
|
constructor(data) {
|
|
6
6
|
this.data = data;
|
|
7
|
-
this.view = new
|
|
7
|
+
this.view = new Uint8Array(data.buffer);
|
|
8
8
|
}
|
|
9
9
|
getValue(modState, faceByteIndex, faceIndex) {
|
|
10
10
|
return BinaryArrays.getBitArrayIndex(this.view, this.data.resultsSize * modState + faceByteIndex, faceIndex);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { VoxelFaceTransparentResultsIndex } from "../../Indexing/VoxelFaceTransparentResultsIndex";
|
|
2
|
-
import {
|
|
2
|
+
import { VoxelModelRuleBuilderRegister } from "../VoxelModelRuleBuilderRegister";
|
|
3
3
|
const isArgString = (data) => {
|
|
4
4
|
if (typeof data !== "string")
|
|
5
5
|
return;
|
|
@@ -24,21 +24,22 @@ export function BuildFinalInputs(model) {
|
|
|
24
24
|
const geoNodes = [];
|
|
25
25
|
const shapeStateNodes = model.data.shapeStatesNodes[state];
|
|
26
26
|
for (const node of shapeStateNodes) {
|
|
27
|
-
const geo =
|
|
27
|
+
const geo = VoxelModelRuleBuilderRegister.getGeomtryFromLink(node);
|
|
28
28
|
if (!geo)
|
|
29
29
|
throw new Error(`Geometry does not exist`);
|
|
30
30
|
geo.inputs.resetDefaults();
|
|
31
31
|
for (const geoArg in node.inputs) {
|
|
32
32
|
const constructorArg = node.inputs[geoArg];
|
|
33
33
|
if (isArgString(constructorArg)) {
|
|
34
|
-
geo.inputs[geoArg] =
|
|
34
|
+
geo.inputs[geoArg] =
|
|
35
|
+
modVoxelInput[constructorArg.replace("@", "")];
|
|
35
36
|
continue;
|
|
36
37
|
}
|
|
37
38
|
geo.inputs[geoArg] = constructorArg;
|
|
38
39
|
}
|
|
39
40
|
geoNodes[model.stateData.geometryLinkPalette[node.id]] =
|
|
40
41
|
geo.inputs.cloneArgs();
|
|
41
|
-
const byteIndex = model.stateData.relativeGeometryByteIndexMap[model.stateData.shapeStateRelativeGeometryMap[model.stateData.shapeStateRecord[state]][
|
|
42
|
+
const byteIndex = model.stateData.relativeGeometryByteIndexMap[model.stateData.shapeStateRelativeGeometryMap[model.stateData.shapeStateRecord[state]][VoxelModelRuleBuilderRegister.geometryPalette.getNumberId(VoxelModelRuleBuilderRegister.getGeometryLinkId(node))]];
|
|
42
43
|
if (geo.data.ogData.doNotBuildRules !== true) {
|
|
43
44
|
for (let i = 0; i < geo.inputs.faceTransparentIndex.length; i++) {
|
|
44
45
|
transparentIndex.setValue(modIndex, byteIndex, i, geo.inputs.faceTransparentIndex[i] ? 1 : 0);
|
|
@@ -56,20 +57,21 @@ export function BuildFinalInputs(model) {
|
|
|
56
57
|
const shapeStateNodes = model.data.shapeStatesConditonalNodes[state];
|
|
57
58
|
for (let i = 0; i < shapeStateNodes.length; i++) {
|
|
58
59
|
const node = shapeStateNodes[i];
|
|
59
|
-
const geo =
|
|
60
|
+
const geo = VoxelModelRuleBuilderRegister.getGeomtryFromLink(node);
|
|
60
61
|
if (!geo)
|
|
61
62
|
throw new Error(`Geometry does not exist`);
|
|
62
63
|
// geo.inputs.resetDefaults();
|
|
63
64
|
for (const geoArg in node.inputs) {
|
|
64
65
|
const constructorArg = node.inputs[geoArg];
|
|
65
66
|
if (isArgString(constructorArg)) {
|
|
66
|
-
geo.inputs[geoArg] =
|
|
67
|
+
geo.inputs[geoArg] =
|
|
68
|
+
modVoxelInput[constructorArg.replace("@", "")];
|
|
67
69
|
continue;
|
|
68
70
|
}
|
|
69
71
|
geo.inputs[geoArg] = constructorArg;
|
|
70
72
|
}
|
|
71
73
|
geoNodes[i] = geo.inputs.cloneArgs();
|
|
72
|
-
const byteIndex = model.stateData.relativeGeometryByteIndexMap[model.stateData.condiotnalShapeStateRelativeGeometryMap[model.stateData.condiotnalShapeStateRecord[state]][
|
|
74
|
+
const byteIndex = model.stateData.relativeGeometryByteIndexMap[model.stateData.condiotnalShapeStateRelativeGeometryMap[model.stateData.condiotnalShapeStateRecord[state]][VoxelModelRuleBuilderRegister.geometryPalette.getNumberId(VoxelModelRuleBuilderRegister.getGeometryLinkId(node))]];
|
|
73
75
|
if (geo.data.ogData.doNotBuildRules !== true) {
|
|
74
76
|
for (let i = 0; i < geo.inputs.faceTransparentIndex.length; i++) {
|
|
75
77
|
transparentIndex.setValue(modIndex, byteIndex, i, geo.inputs.faceTransparentIndex[i] ? 1 : 0);
|
|
@@ -63,6 +63,7 @@ const mapQuadUvs = (uvs, rotation = 0, transform) => {
|
|
|
63
63
|
export function BuildGeomtryInputs(geomtry) {
|
|
64
64
|
const inputObservers = new Map();
|
|
65
65
|
const onInput = (id, subscribe) => {
|
|
66
|
+
id = id.replace("@", "");
|
|
66
67
|
let obs = inputObservers.get(id);
|
|
67
68
|
if (!obs) {
|
|
68
69
|
obs = [];
|
|
@@ -109,6 +110,7 @@ export function BuildGeomtryInputs(geomtry) {
|
|
|
109
110
|
value));
|
|
110
111
|
}
|
|
111
112
|
if (isArgString(faceData.transparent)) {
|
|
113
|
+
faceTransparentIndex[relativeFaceCount + face] = false;
|
|
112
114
|
onInput(String(faceData.transparent), (value) => {
|
|
113
115
|
args[argsIndex][face][BoxVoxelGometryInputs.ArgIndexes.Transparent] = value;
|
|
114
116
|
faceTransparentIndex[relativeFaceCount + face] = Boolean(value);
|
|
@@ -228,15 +230,16 @@ export function BuildGeomtryInputs(geomtry) {
|
|
|
228
230
|
},
|
|
229
231
|
};
|
|
230
232
|
for (const arg in geomtry.data.ogData.arguments) {
|
|
231
|
-
|
|
232
|
-
if (!inputObservers.has(argKey))
|
|
233
|
+
if (!inputObservers.has(arg))
|
|
233
234
|
continue;
|
|
234
|
-
const obs = inputObservers.get(
|
|
235
|
+
const obs = inputObservers.get(arg);
|
|
235
236
|
const data = geomtry.data.ogData.arguments[arg];
|
|
236
|
-
Object.defineProperty(finalGeoInputs,
|
|
237
|
+
Object.defineProperty(finalGeoInputs, arg, {
|
|
237
238
|
set(value) {
|
|
238
239
|
if (data.type == "texture") {
|
|
239
|
-
|
|
240
|
+
const textureId = value;
|
|
241
|
+
value =
|
|
242
|
+
TextureManager.getTexture("dve_voxel")?.getTextureIndex(textureId);
|
|
240
243
|
}
|
|
241
244
|
for (const func of obs) {
|
|
242
245
|
func(value);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { VoxelRelativeCubeIndex } from "../../Indexing/VoxelRelativeCubeIndex";
|
|
2
2
|
import { Vector3Like } from "@amodx/math";
|
|
3
3
|
import { VoxelAOResultsIndex } from "../../Indexing/VoxelAOResultsIndex";
|
|
4
|
-
import {
|
|
4
|
+
import { VoxelModelRuleBuilderRegister } from "../VoxelModelRuleBuilderRegister";
|
|
5
5
|
import { VoxelFaceCullResultsIndex } from "../../Indexing/VoxelFaceCullResultsIndex";
|
|
6
6
|
class OcculsionBox {
|
|
7
7
|
p1;
|
|
@@ -132,7 +132,7 @@ export function BuildRules(main, geoPalette) {
|
|
|
132
132
|
faceByteCount: main.faceCount,
|
|
133
133
|
});
|
|
134
134
|
for (let otherNumberId = 0; otherNumberId < geoPalette.size; otherNumberId++) {
|
|
135
|
-
let other =
|
|
135
|
+
let other = VoxelModelRuleBuilderRegister.geometry.get(geoPalette._palette[otherNumberId]);
|
|
136
136
|
if (other.data.ogData.doNotBuildRules !== undefined)
|
|
137
137
|
continue;
|
|
138
138
|
if (other.id == main.id)
|
|
@@ -179,8 +179,8 @@ export function BuildRules(main, geoPalette) {
|
|
|
179
179
|
}
|
|
180
180
|
}
|
|
181
181
|
return {
|
|
182
|
-
aoIndex: aoIndex.
|
|
183
|
-
cullIndex: cullIndex.
|
|
182
|
+
aoIndex: aoIndex.getData(),
|
|
183
|
+
cullIndex: cullIndex.getData(),
|
|
184
184
|
faceCullMap,
|
|
185
185
|
vertexHitMap,
|
|
186
186
|
};
|
|
@@ -2,7 +2,7 @@ import { StringPalette } from "../../Util/StringPalette";
|
|
|
2
2
|
import { VoxelGeometryData, VoxelGeometryLinkData, VoxelModelConstructorData, VoxelModelData } from "../VoxelModel.types";
|
|
3
3
|
import { VoxelRuleGeometry } from "./Classes/VoxelRulesGeometry";
|
|
4
4
|
import { VoxelRulesModoel } from "./Classes/VoxelRulesModel";
|
|
5
|
-
export declare class
|
|
5
|
+
export declare class VoxelModelRuleBuilderRegister {
|
|
6
6
|
static geometryPalette: StringPalette;
|
|
7
7
|
static getGeometryLinkId: (node: VoxelGeometryLinkData) => string;
|
|
8
8
|
static voxels: Map<string, {
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import { VoxelFaceNameArray } from "../../Math";
|
|
2
|
+
import { StringPalette } from "../../Util/StringPalette";
|
|
3
|
+
import { VoxelRuleGeometry } from "./Classes/VoxelRulesGeometry";
|
|
4
|
+
import { VoxelRulesModoel } from "./Classes/VoxelRulesModel";
|
|
5
|
+
const addGeo = (model, stateId, nodes) => {
|
|
6
|
+
const registred = [];
|
|
7
|
+
for (const geoLinkNode of nodes) {
|
|
8
|
+
const geo = VoxelModelRuleBuilderRegister.geometry.get(geoLinkNode.geometryId);
|
|
9
|
+
if (!geo)
|
|
10
|
+
throw new Error(`Geometry ${geoLinkNode.geometryId} is not registered.`);
|
|
11
|
+
const newId = getGeometryLinkId(geoLinkNode);
|
|
12
|
+
if (VoxelModelRuleBuilderRegister.geometry.has(newId))
|
|
13
|
+
continue;
|
|
14
|
+
registred.push([stateId, newId]);
|
|
15
|
+
if (!VoxelModelRuleBuilderRegister.geometryPalette.isRegistered(newId))
|
|
16
|
+
VoxelModelRuleBuilderRegister.geometryPalette.register(newId);
|
|
17
|
+
const newData = structuredClone(geo.data);
|
|
18
|
+
for (const node of newData.nodes) {
|
|
19
|
+
node.tranform = {
|
|
20
|
+
...(geoLinkNode.position ? { position: geoLinkNode.position } : {}),
|
|
21
|
+
...(geoLinkNode.scale ? { scale: geoLinkNode.scale } : {}),
|
|
22
|
+
...(geoLinkNode.rotation ? { rotation: geoLinkNode.rotation } : {}),
|
|
23
|
+
...(geoLinkNode.rotationPivot
|
|
24
|
+
? { rotationPivot: geoLinkNode.rotationPivot }
|
|
25
|
+
: {}),
|
|
26
|
+
...(geoLinkNode.flip ? { flip: geoLinkNode.flip } : {}),
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
VoxelModelRuleBuilderRegister.geometry.set(newId, new VoxelRuleGeometry(newId, newData));
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
return registred;
|
|
33
|
+
};
|
|
34
|
+
const getGeometryLinkId = (node) => {
|
|
35
|
+
return `${node.geometryId}${node.position ? `-p${node.position.toString()}` : ""}${node.rotation ? `-r${node.rotation.toString()}` : ""}${node.scale ? `-s${node.scale.toString()}` : ""}`.trim();
|
|
36
|
+
};
|
|
37
|
+
export class VoxelModelRuleBuilderRegister {
|
|
38
|
+
static geometryPalette = new StringPalette();
|
|
39
|
+
static getGeometryLinkId = getGeometryLinkId;
|
|
40
|
+
static voxels = new Map();
|
|
41
|
+
static geometry = new Map();
|
|
42
|
+
static models = new Map();
|
|
43
|
+
static registerGeometry(...geometry) {
|
|
44
|
+
for (const geo of geometry) {
|
|
45
|
+
if (!this.geometryPalette.isRegistered(geo.id))
|
|
46
|
+
this.geometryPalette.register(geo.id);
|
|
47
|
+
const divisor = geo.divisor ? geo.divisor : false;
|
|
48
|
+
if (divisor) {
|
|
49
|
+
for (const node of geo.nodes) {
|
|
50
|
+
if (node.type == "box") {
|
|
51
|
+
let d = node.divisor ? node.divisor : divisor;
|
|
52
|
+
node.points[0][0] /= d[0];
|
|
53
|
+
node.points[0][1] /= d[1];
|
|
54
|
+
node.points[0][2] /= d[2];
|
|
55
|
+
node.points[1][0] /= d[0];
|
|
56
|
+
node.points[1][1] /= d[1];
|
|
57
|
+
node.points[1][2] /= d[2];
|
|
58
|
+
for (const faceName of VoxelFaceNameArray) {
|
|
59
|
+
const data = node.faces[faceName];
|
|
60
|
+
if (Array.isArray(data.uv)) {
|
|
61
|
+
data.uv[0] /= d[0];
|
|
62
|
+
data.uv[1] /= d[1];
|
|
63
|
+
data.uv[2] /= d[0];
|
|
64
|
+
data.uv[3] /= d[1];
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
if (node.type == "quad") {
|
|
69
|
+
let d = node.divisor ? node.divisor : divisor;
|
|
70
|
+
for (let i = 0; i < 4; i++) {
|
|
71
|
+
const point = node.points[i];
|
|
72
|
+
point[0] /= d[0];
|
|
73
|
+
point[1] /= d[1];
|
|
74
|
+
point[2] /= d[2];
|
|
75
|
+
}
|
|
76
|
+
if (Array.isArray(node.uv)) {
|
|
77
|
+
if (Array.isArray(node.uv[0])) {
|
|
78
|
+
let uvs = node.uv;
|
|
79
|
+
for (let i = 0; i < node.uv.length; i++) {
|
|
80
|
+
uvs[i][0] /= d[0];
|
|
81
|
+
uvs[i][1] /= d[1];
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
let uvs = node.uv;
|
|
86
|
+
uvs[0] /= d[0];
|
|
87
|
+
uvs[1] /= d[1];
|
|
88
|
+
uvs[2] /= d[0];
|
|
89
|
+
uvs[3] /= d[1];
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
this.geometry.set(geo.id, new VoxelRuleGeometry(geo.id, {
|
|
96
|
+
ogData: geo,
|
|
97
|
+
id: geo.id,
|
|
98
|
+
nodes: geo.nodes.map((node) => ({
|
|
99
|
+
node,
|
|
100
|
+
tranform: {},
|
|
101
|
+
})),
|
|
102
|
+
}));
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
static getGeomtryFromLink(link) {
|
|
106
|
+
return this.geometry.get(getGeometryLinkId(link));
|
|
107
|
+
}
|
|
108
|
+
static registerModels(...models) {
|
|
109
|
+
for (const model of models) {
|
|
110
|
+
const rulesModel = new VoxelRulesModoel(model);
|
|
111
|
+
this.models.set(model.id, rulesModel);
|
|
112
|
+
const divisor = model.divisor ? model.divisor : null;
|
|
113
|
+
if (divisor) {
|
|
114
|
+
for (const stateId in model.shapeStatesNodes) {
|
|
115
|
+
const nodes = model.shapeStatesNodes[stateId];
|
|
116
|
+
for (const node of nodes) {
|
|
117
|
+
const d = "divisor" in node ? node.divisor : divisor;
|
|
118
|
+
if (node.position) {
|
|
119
|
+
node.position[0] /= d[0];
|
|
120
|
+
node.position[1] /= d[1];
|
|
121
|
+
node.position[2] /= d[2];
|
|
122
|
+
}
|
|
123
|
+
if (node.rotationPivot) {
|
|
124
|
+
node.rotationPivot[0] /= d[0];
|
|
125
|
+
node.rotationPivot[1] /= d[1];
|
|
126
|
+
node.rotationPivot[2] /= d[2];
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
for (const stateId in model.shapeStatesConditonalNodes) {
|
|
131
|
+
const nodes = model.shapeStatesConditonalNodes[stateId];
|
|
132
|
+
for (const node of nodes) {
|
|
133
|
+
const d = "divisor" in node ? node.divisor : divisor;
|
|
134
|
+
if (node.position) {
|
|
135
|
+
node.position[0] /= d[0];
|
|
136
|
+
node.position[1] /= d[1];
|
|
137
|
+
node.position[2] /= d[2];
|
|
138
|
+
}
|
|
139
|
+
if (node.rotationPivot) {
|
|
140
|
+
node.rotationPivot[0] /= d[0];
|
|
141
|
+
node.rotationPivot[1] /= d[1];
|
|
142
|
+
node.rotationPivot[2] /= d[2];
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
if (model.effects) {
|
|
147
|
+
for (const effect of model.effects) {
|
|
148
|
+
if (effect.type == "fx-points") {
|
|
149
|
+
for (const state in effect.values) {
|
|
150
|
+
for (const point of effect.values[state]) {
|
|
151
|
+
point[0] /= divisor[0];
|
|
152
|
+
point[1] /= divisor[1];
|
|
153
|
+
point[2] /= divisor[2];
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
for (const stateId in model.shapeStatesNodes) {
|
|
161
|
+
const nodes = model.shapeStatesNodes[stateId];
|
|
162
|
+
addGeo(model, stateId, nodes).forEach((_) => rulesModel.registerShapeState(..._));
|
|
163
|
+
}
|
|
164
|
+
for (const stateId in model.shapeStatesConditonalNodes) {
|
|
165
|
+
const nodes = model.shapeStatesConditonalNodes[stateId];
|
|
166
|
+
addGeo(model, stateId, nodes).forEach((_) => rulesModel.registerCondiotnalNode(..._));
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
static registerVoxel(id, data) {
|
|
171
|
+
let voxelModels = this.voxels.get(data.id);
|
|
172
|
+
if (!voxelModels) {
|
|
173
|
+
voxelModels = [];
|
|
174
|
+
this.voxels.set(data.id, voxelModels);
|
|
175
|
+
}
|
|
176
|
+
voxelModels.push({ id, data });
|
|
177
|
+
}
|
|
178
|
+
}
|
|
@@ -22,6 +22,8 @@ export interface VoxelCustomGeomtryNode {
|
|
|
22
22
|
}
|
|
23
23
|
export interface VoxelBoxGeometryNode {
|
|
24
24
|
type: "box";
|
|
25
|
+
/**Divisor used for transform of this specific node.*/
|
|
26
|
+
divisor?: Vec3Array;
|
|
25
27
|
noShade?: boolean;
|
|
26
28
|
points: [start: Vec3Array, end: Vec3Array];
|
|
27
29
|
rotation?: Vec3Array;
|
|
@@ -37,6 +39,8 @@ export interface VoxelBoxFaceData {
|
|
|
37
39
|
}
|
|
38
40
|
export interface VoxelQuadGeometryNode {
|
|
39
41
|
type: "quad";
|
|
42
|
+
/**Divisor used for transform of this specific node.*/
|
|
43
|
+
divisor?: Vec3Array;
|
|
40
44
|
doubleSided?: boolean | string;
|
|
41
45
|
points: [p1: Vec3Array, p2: Vec3Array, p3: Vec3Array, p4: Vec3Array];
|
|
42
46
|
transparent?: boolean | string;
|
|
@@ -46,6 +50,8 @@ export interface VoxelQuadGeometryNode {
|
|
|
46
50
|
}
|
|
47
51
|
export interface VoxelTriangleGeometryNode {
|
|
48
52
|
type: "triangle";
|
|
53
|
+
/**Divisor used for transform of this specific node.*/
|
|
54
|
+
divisor?: Vec3Array;
|
|
49
55
|
orientation?: 0 | 1;
|
|
50
56
|
doubleSided?: boolean;
|
|
51
57
|
points: [p1: Vec3Array, p2: Vec3Array, p3: Vec3Array];
|
|
@@ -91,6 +97,7 @@ export type VoxelGeometryNodes = VoxelCustomGeomtryNode | VoxelBoxGeometryNode |
|
|
|
91
97
|
export interface VoxelGeometryData {
|
|
92
98
|
id: string;
|
|
93
99
|
nodes: VoxelGeometryNodes[];
|
|
100
|
+
divisor?: Vec3Array;
|
|
94
101
|
/**
|
|
95
102
|
* If this is set the voxel geometry will not be included in the
|
|
96
103
|
* geometry rules and will be fall back to custom inputs.
|
|
@@ -99,7 +106,11 @@ export interface VoxelGeometryData {
|
|
|
99
106
|
doNotBuildRules?: true;
|
|
100
107
|
arguments: Record<string, VoxelGeometryTextureArgument | VoxelGeometryBoxUVArgument | VoxelGeometryVector3Argument | VoxelGeometryIntArgument | VoxelGeometryBooleanArgument | VoxelGeometryFloatArgument>;
|
|
101
108
|
}
|
|
102
|
-
export interface
|
|
109
|
+
export interface VoxelGeometryLinkData {
|
|
110
|
+
id: string;
|
|
111
|
+
geometryId: string;
|
|
112
|
+
/**Divisor used for transform of this specific node.*/
|
|
113
|
+
divisor?: Vec3Array;
|
|
103
114
|
inputs: Record<string, any>;
|
|
104
115
|
scale?: Vec3Array;
|
|
105
116
|
position?: Vec3Array;
|
|
@@ -107,12 +118,10 @@ export interface VoxelGeometryBaseLinkData {
|
|
|
107
118
|
rotationPivot?: Vec3Array;
|
|
108
119
|
flip?: [flipX: 0 | 1, flipY: 0 | 1, flipZ: 0 | 1];
|
|
109
120
|
}
|
|
110
|
-
export interface VoxelGeometryLinkData extends VoxelGeometryBaseLinkData {
|
|
111
|
-
id: string;
|
|
112
|
-
geometryId: string;
|
|
113
|
-
}
|
|
114
121
|
export interface VoxelModelData {
|
|
115
122
|
id: string;
|
|
123
|
+
/**Divisor used all transforms of geometry nodes. */
|
|
124
|
+
divisor?: Vec3Array;
|
|
116
125
|
arguments: Record<string, VoxelGeometryTextureArgument | VoxelGeometryBoxUVArgument | VoxelGeometryVector3Argument | VoxelGeometryIntArgument | VoxelGeometryBooleanArgument | VoxelGeometryFloatArgument>;
|
|
117
126
|
shapeStateSchema: (VoxelStateStringSchemaData | VoxelStateNumberSchemaData)[];
|
|
118
127
|
effects?: VoxelEffectData[];
|
|
@@ -4,8 +4,7 @@ export declare class SectorMesh {
|
|
|
4
4
|
location: LocationData;
|
|
5
5
|
sections: SectionMesh[];
|
|
6
6
|
constructor(location: LocationData);
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
removeSection(y: number): false | SectionMesh;
|
|
7
|
+
getSection(x: number, y: number, z: number): SectionMesh;
|
|
8
|
+
addSection(x: number, y: number, z: number): SectionMesh;
|
|
9
|
+
removeSection(x: number, y: number, z: number): false | SectionMesh;
|
|
11
10
|
}
|
|
@@ -6,24 +6,19 @@ export class SectorMesh {
|
|
|
6
6
|
constructor(location) {
|
|
7
7
|
this.location = location;
|
|
8
8
|
}
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
const index = ry / WorldSpaces.section.bounds.y;
|
|
12
|
-
return index;
|
|
9
|
+
getSection(x, y, z) {
|
|
10
|
+
return this.sections[WorldSpaces.section.getIndex(x, y, z)];
|
|
13
11
|
}
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
}
|
|
17
|
-
addSection(y) {
|
|
18
|
-
const index = this.getIndex(y);
|
|
12
|
+
addSection(x, y, z) {
|
|
13
|
+
const index = WorldSpaces.section.getIndex(x, y, z);
|
|
19
14
|
if (this.sections[index])
|
|
20
15
|
return this.sections[index];
|
|
21
16
|
const section = new SectionMesh(this, index);
|
|
22
17
|
this.sections[index] = section;
|
|
23
18
|
return section;
|
|
24
19
|
}
|
|
25
|
-
removeSection(y) {
|
|
26
|
-
const index =
|
|
20
|
+
removeSection(x, y, z) {
|
|
21
|
+
const index = WorldSpaces.section.getIndex(x, y, z);
|
|
27
22
|
if (!this.sections[index])
|
|
28
23
|
return false;
|
|
29
24
|
const section = this.sections[index];
|
package/Renderer/InitTasks.js
CHANGED
|
@@ -8,16 +8,15 @@ export default function RendererTasks(threads) {
|
|
|
8
8
|
Threads.registerTask("set-section", (data, origin) => {
|
|
9
9
|
MeshManager.updateSection(data);
|
|
10
10
|
const tranfers = [];
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
tranfers.push(mesh[
|
|
16
|
-
tranfers.push(mesh[2]);
|
|
11
|
+
if (data[1][0] == 0) {
|
|
12
|
+
const comp = data[1][1];
|
|
13
|
+
for (const mesh of comp) {
|
|
14
|
+
tranfers.push(mesh[1].buffer);
|
|
15
|
+
tranfers.push(mesh[2].buffer);
|
|
17
16
|
}
|
|
18
17
|
}
|
|
19
18
|
if (!EngineSettings.settings.rendererSettings.cpuBound) {
|
|
20
|
-
origin.sendMessage(
|
|
19
|
+
origin.sendMessage([], tranfers);
|
|
21
20
|
}
|
|
22
21
|
});
|
|
23
22
|
Threads.registerTask("remove-sector", (data) => {
|
package/Renderer/MeshManager.js
CHANGED
|
@@ -12,9 +12,9 @@ export class MeshManager {
|
|
|
12
12
|
if (!sector) {
|
|
13
13
|
sector = MeshRegister.sectors.add(location);
|
|
14
14
|
}
|
|
15
|
-
let section = sector.getSection(location[2]);
|
|
15
|
+
let section = sector.getSection(location[1], location[2], location[3]);
|
|
16
16
|
if (!section) {
|
|
17
|
-
section = sector.addSection(location[2]);
|
|
17
|
+
section = sector.addSection(location[1], location[2], location[3]);
|
|
18
18
|
}
|
|
19
19
|
added.clear();
|
|
20
20
|
for (const [id, points] of effects) {
|
package/Renderer/MeshRegister.js
CHANGED
|
@@ -9,7 +9,7 @@ class Sectors {
|
|
|
9
9
|
location[0],
|
|
10
10
|
...WorldSpaces.sector.getPositionVec3Array(location[1], location[2], location[3]),
|
|
11
11
|
]);
|
|
12
|
-
dimension.set(WorldSpaces.hash.
|
|
12
|
+
dimension.set(WorldSpaces.hash.hashVec3(WorldSpaces.sector.getPosition(location[1], location[2], location[3])), sector);
|
|
13
13
|
return sector;
|
|
14
14
|
}
|
|
15
15
|
static remove(location) {
|
|
@@ -90,3 +90,4 @@ export class MeshRegister {
|
|
|
90
90
|
this._dimensions.set("main", new Map());
|
|
91
91
|
}
|
|
92
92
|
}
|
|
93
|
+
window.MeshRegister = MeshRegister;
|
|
@@ -12,11 +12,11 @@ type EngineSettingsEvents = {
|
|
|
12
12
|
declare class EngineSettingsClass extends TypedEventTarget<EngineSettingsEvents> {
|
|
13
13
|
enviorment: "node" | "browser";
|
|
14
14
|
settings: EngineSettingsData;
|
|
15
|
+
version: string;
|
|
15
16
|
get doSunPropagation(): boolean;
|
|
16
17
|
get doRGBPropagation(): boolean;
|
|
17
18
|
get doLight(): boolean;
|
|
18
19
|
get doFlow(): boolean;
|
|
19
|
-
get isClient(): boolean;
|
|
20
20
|
getSettings(): EngineSettingsData;
|
|
21
21
|
syncSettings(data: EngineSettingsData): void;
|
|
22
22
|
getSettingsCopy(): any;
|
|
@@ -8,11 +8,12 @@ import { TypedEventTarget } from "../Util/TypedEventTarget.js";
|
|
|
8
8
|
class EngineSettingsClass extends TypedEventTarget {
|
|
9
9
|
enviorment = Environment.isNode() ? "node" : "browser";
|
|
10
10
|
settings = new EngineSettingsData();
|
|
11
|
+
version = "0.0.72";
|
|
11
12
|
get doSunPropagation() {
|
|
12
|
-
return this.settings.lighting.
|
|
13
|
+
return this.settings.lighting.sunLightEnabled == true;
|
|
13
14
|
}
|
|
14
15
|
get doRGBPropagation() {
|
|
15
|
-
return this.settings.lighting.
|
|
16
|
+
return this.settings.lighting.rgbLightEnabled == true;
|
|
16
17
|
}
|
|
17
18
|
get doLight() {
|
|
18
19
|
return this.doRGBPropagation || this.doSunPropagation;
|
|
@@ -20,9 +21,6 @@ class EngineSettingsClass extends TypedEventTarget {
|
|
|
20
21
|
get doFlow() {
|
|
21
22
|
return this.settings.flow.enable;
|
|
22
23
|
}
|
|
23
|
-
get isClient() {
|
|
24
|
-
return this.enviorment != "browser";
|
|
25
|
-
}
|
|
26
24
|
getSettings() {
|
|
27
25
|
return this.settings;
|
|
28
26
|
}
|