@divinevoxel/vlox 0.0.72 → 0.0.73
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Contexts/Render/DivineVoxelEngineRender.d.ts +1 -1
- package/Contexts/World/DivineVoxelEngineWorld.d.ts +1 -1
- package/Init/StartConstructor.js +6 -4
- package/Init/StartWorld.d.ts +1 -1
- package/Mesher/Functions/CompactVoxelMesh.d.ts +2 -2
- package/Mesher/Functions/CompactVoxelMesh.js +1 -1
- package/Mesher/Functions/MeshSection.js +20 -8
- package/Mesher/Functions/MeshTexture.d.ts +1 -1
- package/Mesher/Functions/MeshTexture.js +3 -4
- 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 +2 -2
- package/Mesher/Geomtry/VoxelMesh.d.ts +1 -1
- package/Mesher/Geomtry/VoxelMesh.js +2 -2
- package/Mesher/Geomtry/index.d.ts +0 -1
- package/Mesher/Geomtry/index.js +0 -1
- package/Mesher/InitMesher.js +1 -1
- package/Mesher/InitTask.js +4 -22
- package/Mesher/Models/Common/Calc/FaceDataCalc.d.ts +2 -2
- package/Mesher/Models/Common/Calc/FaceDataCalc.js +37 -30
- 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.js +11 -17
- package/Mesher/Models/Nodes/GeometryNode.d.ts +2 -2
- package/Mesher/Models/Nodes/Ruled/BoxVoxelGeometryNode.d.ts +1 -0
- package/Mesher/Models/Nodes/Ruled/BoxVoxelGeometryNode.js +24 -12
- 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 +3 -3
- package/Mesher/Models/VoxelGeometryBuilderCacheSpace.d.ts +1 -3
- package/Mesher/Models/VoxelGeometryBuilderCacheSpace.js +0 -23
- package/Mesher/{Tools/VoxelMesherDataTool.d.ts → Models/VoxelModelBuilder.d.ts} +4 -5
- package/Mesher/{Tools/VoxelMesherDataTool.js → Models/VoxelModelBuilder.js} +11 -7
- 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/Rules/Functions/BuildFinalInputs.js +9 -7
- package/Models/Rules/Functions/BuildGeomtryInputs.js +8 -5
- package/Models/Rules/Functions/BuildRules.js +2 -2
- 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 +13 -1
- package/Tasks/IWG/Internal/Classes/IWGTaskBase.js +2 -2
- package/Tasks/IWG/Internal/Functions/runBuildUpdate.js +21 -2
- package/Tasks/IWG/Internal/IWGTasks.d.ts +0 -4
- package/Tasks/IWG/Internal/IWGTasks.js +0 -10
- package/Tasks/IWG/Internal/IWGTools.d.ts +1 -1
- package/Tasks/IWG/Procedures/SaveAllSectors.js +2 -0
- package/Tasks/Update/UpdateTask.d.ts +3 -1
- package/Tasks/Update/UpdateTask.js +28 -2
- package/Tasks/Update/VoxelUpdate.js +6 -0
- package/Tasks/WorldGeneration/WorldGenBrush.js +1 -1
- package/Templates/Cursor/TemplateCursor.d.ts +2 -2
- package/Templates/Cursor/TemplateCursor.js +1 -2
- 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 -1
- package/Tools/Brush/Brush.js +39 -7
- 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/{BitArray.d.ts → BinaryFunctions.d.ts} +1 -2
- package/Util/Binary/BinaryFunctions.js +11 -0
- package/Voxels/Cursor/DataCursor.interface.d.ts +5 -0
- package/Voxels/Cursor/VoxelCursor.interface.d.ts +1 -1
- package/Voxels/Cursor/VoxelCursor.interface.js +8 -11
- package/Voxels/Data/VoxelPalettesRegister.d.ts +0 -5
- package/Voxels/Data/VoxelPalettesRegister.js +0 -9
- package/Voxels/Data/VoxelTagsRegister.js +7 -7
- package/Voxels/Functions/BuildStateData.js +9 -9
- package/Voxels/Functions/BuildTagAndPaletteData.js +2 -4
- package/Voxels/InitVoxelData.js +12 -13
- package/Voxels/State/Schema/StateSchema.d.ts +1 -1
- package/Voxels/Types/Voxel.types.d.ts +18 -0
- package/Voxels/Types/Voxel.types.js +6 -2
- package/World/Archive/Archive.types.d.ts +38 -34
- package/World/Archive/Functions/ArchiveArea.js +16 -24
- package/World/Archive/Functions/ArchiveSector.js +477 -192
- package/World/Archive/Functions/ImportSector.d.ts +3 -3
- package/World/Archive/Functions/ImportSector.js +202 -141
- 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 +2 -2
- package/World/Cursor/SectionCursor.js +2 -3
- package/World/Cursor/SectorCursor.d.ts +2 -2
- package/World/Cursor/SectorCursor.js +1 -2
- package/World/Cursor/WorldCursor.d.ts +2 -2
- package/World/Cursor/WorldCursor.js +1 -2
- package/World/Cursor/WorldVoxelCursor.js +1 -0
- package/World/InitTasks.d.ts +1 -1
- package/World/Lock/WorldLock.d.ts +1 -1
- package/World/Section/Section.d.ts +12 -16
- package/World/Section/Section.js +62 -20
- package/World/Section/SectionState.d.ts +10 -0
- package/World/Section/SectionState.js +11 -0
- package/World/Sector/Sector.d.ts +14 -6
- package/World/Sector/Sector.js +67 -17
- package/World/Sector/SectorHeightMap.js +2 -2
- package/World/Sector/SectorState.d.ts +14 -6
- package/World/Sector/SectorState.js +28 -15
- package/World/Types/WorldStorage.interface.js +1 -0
- package/World/WorldRegister.d.ts +4 -0
- package/World/WorldRegister.js +15 -3
- package/World/WorldSpaces.d.ts +4 -0
- package/World/WorldSpaces.js +19 -6
- package/package.json +1 -1
- package/Mesher/Functions/CompactMesh.d.ts +0 -2
- package/Mesher/Functions/CompactMesh.js +0 -42
- 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/DataCursor.interface.d.ts +0 -5
- package/Tools/DataCursor.interface.js +0 -2
- package/Util/Binary/BitArray.js +0 -16
- package/World/Structs/WorldDataStructProperties.d.ts +0 -8
- package/World/Structs/WorldDataStructProperties.js +0 -9
- /package/Mesher/{Tools → Geomtry}/VoxelMeshBVHBuilder.d.ts +0 -0
- /package/Mesher/{Tools → Geomtry}/VoxelMeshBVHBuilder.js +0 -0
- /package/Mesher/Geomtry/{Buffers.d.ts → VoxelMeshBuffers.d.ts} +0 -0
- /package/Mesher/Geomtry/{Buffers.js → VoxelMeshBuffers.js} +0 -0
- /package/Mesher/{Tools → Geomtry}/VoxelMeshVertexStructCursor.d.ts +0 -0
- /package/Mesher/{Tools → Geomtry}/VoxelMeshVertexStructCursor.js +0 -0
- /package/Mesher/{VoxelShaderData.d.ts → Geomtry/VoxelShaderData.d.ts} +0 -0
- /package/Mesher/{VoxelShaderData.js → Geomtry/VoxelShaderData.js} +0 -0
- /package/{World/Storage/WorldStorage.interface.js → Voxels/Cursor/DataCursor.interface.js} +0 -0
- /package/World/{Storage → Types}/WorldStorage.interface.d.ts +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Vector3Like } from "@amodx/math";
|
|
2
2
|
import { SectorCursor } from "./SectorCursor";
|
|
3
|
-
import { DataCursorInterface } from "../../
|
|
4
|
-
export declare class WorldCursor
|
|
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 "../../Tools/DataCursor.interface";
|
|
5
4
|
let cursorCache = [];
|
|
6
5
|
const tempPosition = Vector3Like.Create();
|
|
7
|
-
export class WorldCursor
|
|
6
|
+
export class WorldCursor {
|
|
8
7
|
sectorCursors = new Map();
|
|
9
8
|
origin = { x: 0, y: 0, z: 0 };
|
|
10
9
|
dimension = "";
|
|
@@ -31,6 +31,7 @@ export class WorldVoxelCursor extends VoxelCursorInterface {
|
|
|
31
31
|
*/
|
|
32
32
|
updateVoxel(mode) {
|
|
33
33
|
const voxelPos = this.dataCursor._voxelPosition;
|
|
34
|
+
this.dataCursor._section?.sector.setStored(false);
|
|
34
35
|
if (mode == 0) {
|
|
35
36
|
this.dataCursor._section?.setBuried(this.dataCursor._voxelIndex, false);
|
|
36
37
|
this.dataCursor._section?.setHasVoxel(voxelPos.y, true);
|
package/World/InitTasks.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Thread } from "@amodx/threads/";
|
|
2
|
-
import { WorldStorageInterface } from "./
|
|
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 "
|
|
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,22 +1,9 @@
|
|
|
1
1
|
import { Sector } from "../Sector/Sector.js";
|
|
2
2
|
import { Vec3Array } from "@amodx/math";
|
|
3
|
-
|
|
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
|
-
}
|
|
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. */
|
|
@@ -33,8 +20,15 @@ export declare class Section {
|
|
|
33
20
|
static GetArrayStartIndex(index: number): number;
|
|
34
21
|
static CreateNew(index: number, sectorBuffer: ArrayBufferLike): SectionData;
|
|
35
22
|
static toObject(sector: Sector, index: number, data: SectionData): Section;
|
|
23
|
+
readonly position: Vec3Array;
|
|
36
24
|
constructor(sector: Sector, index: number, data: SectionData);
|
|
37
25
|
getPosition(): Readonly<Vec3Array>;
|
|
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;
|
|
38
32
|
getBuried(index: number): boolean;
|
|
39
33
|
setBuried(index: number, value: boolean): void;
|
|
40
34
|
setHasVoxel(y: number, hasVoxel: boolean): void;
|
|
@@ -42,5 +36,7 @@ export declare class Section {
|
|
|
42
36
|
setHasVoxelDirty(y: number, dirty: boolean): void;
|
|
43
37
|
getHasVoxelDirty(y: number): boolean;
|
|
44
38
|
getMinMax(): number[];
|
|
39
|
+
storeFlags(): Record<string, boolean>;
|
|
40
|
+
loadFlags(flags: Record<string, boolean>): void;
|
|
45
41
|
toJSON(): SectionData;
|
|
46
42
|
}
|
package/World/Section/Section.js
CHANGED
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
import { WorldSpaces } from "../WorldSpaces.js";
|
|
2
2
|
import { Sector } from "../Sector/Sector.js";
|
|
3
|
-
import { getBitArrayIndex, setBitArrayIndex, } from "../../Util/Binary/
|
|
4
|
-
|
|
5
|
-
|
|
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;
|
|
@@ -12,18 +10,16 @@ export class Section {
|
|
|
12
10
|
const voxelSize = WorldSpaces.section.volumne;
|
|
13
11
|
const height = WorldSpaces.section.bounds.y;
|
|
14
12
|
return forceMultipleOf2(
|
|
15
|
-
//-----
|
|
16
|
-
//
|
|
17
|
-
|
|
13
|
+
//----- state
|
|
14
|
+
//2 bytes for flags
|
|
15
|
+
2 +
|
|
16
|
+
//voxelMap
|
|
17
|
+
height / 8 +
|
|
18
18
|
//dirtyMap
|
|
19
19
|
height / 8 +
|
|
20
|
-
|
|
21
|
-
//cache
|
|
20
|
+
//bureid
|
|
22
21
|
voxelSize / 8 +
|
|
23
|
-
|
|
24
|
-
voxelSize * 2 +
|
|
25
|
-
//-----
|
|
26
|
-
//voxel data
|
|
22
|
+
//---- voxel data arrays
|
|
27
23
|
//ids
|
|
28
24
|
voxelSize * 2 +
|
|
29
25
|
//light
|
|
@@ -42,8 +38,10 @@ export class Section {
|
|
|
42
38
|
}
|
|
43
39
|
static CreateNew(index, sectorBuffer) {
|
|
44
40
|
const voxelSize = WorldSpaces.section.volumne;
|
|
45
|
-
let bufferStart = this.GetArrayStartIndex(index);
|
|
46
41
|
const height = WorldSpaces.section.bounds.y;
|
|
42
|
+
let bufferStart = this.GetArrayStartIndex(index);
|
|
43
|
+
const flagArray = new Uint8Array(sectorBuffer, bufferStart, 2);
|
|
44
|
+
bufferStart += 2;
|
|
47
45
|
const voxelMap = new Uint8Array(sectorBuffer, bufferStart, height / 8);
|
|
48
46
|
bufferStart += height / 8;
|
|
49
47
|
const dirtyMap = new Uint8Array(sectorBuffer, bufferStart, height / 8);
|
|
@@ -63,6 +61,7 @@ export class Section {
|
|
|
63
61
|
const level = new Uint8Array(sectorBuffer, bufferStart, voxelSize);
|
|
64
62
|
bufferStart += voxelSize;
|
|
65
63
|
return {
|
|
64
|
+
flagArray,
|
|
66
65
|
voxelMap,
|
|
67
66
|
dirtyMap,
|
|
68
67
|
buried,
|
|
@@ -77,9 +76,18 @@ export class Section {
|
|
|
77
76
|
static toObject(sector, index, data) {
|
|
78
77
|
return new Section(sector, index, data);
|
|
79
78
|
}
|
|
79
|
+
position;
|
|
80
80
|
constructor(sector, index, data) {
|
|
81
81
|
this.sector = sector;
|
|
82
82
|
this.index = index;
|
|
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;
|
|
83
91
|
this.voxelMap = data.voxelMap;
|
|
84
92
|
this.dirtyMap = data.dirtyMap;
|
|
85
93
|
this.buried = data.buried;
|
|
@@ -91,11 +99,27 @@ export class Section {
|
|
|
91
99
|
this.mod = data.mod;
|
|
92
100
|
}
|
|
93
101
|
getPosition() {
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
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);
|
|
99
123
|
}
|
|
100
124
|
getBuried(index) {
|
|
101
125
|
return getBitArrayIndex(this.buried, index) == 1;
|
|
@@ -129,8 +153,26 @@ export class Section {
|
|
|
129
153
|
}
|
|
130
154
|
return [min, max];
|
|
131
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
|
+
}
|
|
172
|
+
}
|
|
132
173
|
toJSON() {
|
|
133
174
|
return {
|
|
175
|
+
flagArray: this.flagArray,
|
|
134
176
|
voxelMap: this.voxelMap,
|
|
135
177
|
dirtyMap: this.dirtyMap,
|
|
136
178
|
buried: this.buried,
|
|
@@ -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
|
+
}
|
package/World/Sector/Sector.d.ts
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { Section, SectionData } from "../Section/Section.js";
|
|
2
2
|
import { Vec3Array } from "@amodx/math";
|
|
3
|
-
import {
|
|
3
|
+
import { SectorStateDefaultBitFlags } from "./SectorState.js";
|
|
4
4
|
export interface SectorData {
|
|
5
|
-
position: Vec3Array;
|
|
6
5
|
buffer: ArrayBufferLike;
|
|
7
6
|
/**Array of timestamps for the sector */
|
|
8
7
|
timeStampArray: Uint32Array;
|
|
@@ -13,18 +12,27 @@ export interface SectorData {
|
|
|
13
12
|
export interface Sector extends SectorData {
|
|
14
13
|
}
|
|
15
14
|
export declare class Sector {
|
|
16
|
-
|
|
17
|
-
static
|
|
15
|
+
position: Vec3Array;
|
|
16
|
+
static FlagIds: typeof SectorStateDefaultBitFlags;
|
|
17
|
+
static TimeStampIds: typeof import("./SectorState.js").SectorStateDefaultTimeStamps;
|
|
18
18
|
static GetHeaderSize(): number;
|
|
19
19
|
static GetBufferSize(): number;
|
|
20
20
|
static CreateNew(): SectorData;
|
|
21
21
|
sections: Section[];
|
|
22
22
|
bufferView: Uint8Array;
|
|
23
|
-
constructor(data: SectorData);
|
|
24
|
-
getSection(y: number): Section;
|
|
23
|
+
constructor(data: SectorData, position: Vec3Array);
|
|
24
|
+
getSection(x: number, y: number, z: number): Section;
|
|
25
25
|
setBitFlag(index: number, value: boolean): void;
|
|
26
26
|
getBitFlag(index: number): boolean;
|
|
27
|
+
setStored(stored: boolean): void;
|
|
28
|
+
isStored(): boolean;
|
|
27
29
|
setTimeStamp(index: number, value: number): void;
|
|
28
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;
|
|
29
37
|
toJSON(): SectorData;
|
|
30
38
|
}
|
package/World/Sector/Sector.js
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
import { Section } from "../Section/Section.js";
|
|
2
2
|
import { WorldSpaces } from "../WorldSpaces";
|
|
3
|
-
import { getBitArrayIndex, setBitArrayIndex, } from "../../Util/Binary/
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
return n % 2 === 0 ? n : n + 1;
|
|
7
|
-
}
|
|
3
|
+
import { getBitArrayIndex, setBitArrayIndex, } from "../../Util/Binary/BinaryArrays.js";
|
|
4
|
+
import { SectorState, SectorStateDefaultBitFlags } from "./SectorState.js";
|
|
5
|
+
import { forceMultipleOf2 } from "../../Util/Binary/BinaryFunctions.js";
|
|
8
6
|
export class Sector {
|
|
9
|
-
|
|
10
|
-
static
|
|
7
|
+
position;
|
|
8
|
+
static FlagIds = SectorState.Flags;
|
|
9
|
+
static TimeStampIds = SectorState.TimeStamps;
|
|
11
10
|
static GetHeaderSize() {
|
|
12
11
|
return forceMultipleOf2(
|
|
13
12
|
//12 bytes fot flags
|
|
@@ -22,14 +21,13 @@ export class Sector {
|
|
|
22
21
|
static CreateNew() {
|
|
23
22
|
const buffer = new SharedArrayBuffer(this.GetBufferSize());
|
|
24
23
|
const flagArray = new Uint8Array(buffer, 0, 12);
|
|
25
|
-
const timeStampArray = new Uint32Array(buffer, 12, 12
|
|
24
|
+
const timeStampArray = new Uint32Array(buffer, 12, 12);
|
|
26
25
|
const sections = [];
|
|
27
|
-
const totalSections = WorldSpaces.sector.
|
|
26
|
+
const totalSections = WorldSpaces.sector.sectionVolumne;
|
|
28
27
|
for (let i = 0; i < totalSections; i++) {
|
|
29
28
|
sections[i] = Section.CreateNew(i, buffer);
|
|
30
29
|
}
|
|
31
30
|
return {
|
|
32
|
-
position: [0, 0, 0],
|
|
33
31
|
buffer,
|
|
34
32
|
flagArray,
|
|
35
33
|
timeStampArray,
|
|
@@ -38,8 +36,8 @@ export class Sector {
|
|
|
38
36
|
}
|
|
39
37
|
sections = [];
|
|
40
38
|
bufferView;
|
|
41
|
-
constructor(data) {
|
|
42
|
-
this.position =
|
|
39
|
+
constructor(data, position) {
|
|
40
|
+
this.position = position;
|
|
43
41
|
this.flagArray = data.flagArray;
|
|
44
42
|
this.timeStampArray = data.timeStampArray;
|
|
45
43
|
this.buffer = data.buffer;
|
|
@@ -48,10 +46,8 @@ export class Sector {
|
|
|
48
46
|
this.sections[i] = new Section(this, i, data.sections[i]);
|
|
49
47
|
}
|
|
50
48
|
}
|
|
51
|
-
getSection(y) {
|
|
52
|
-
|
|
53
|
-
const index = ry / WorldSpaces.section.bounds.y;
|
|
54
|
-
return this.sections[index];
|
|
49
|
+
getSection(x, y, z) {
|
|
50
|
+
return this.sections[WorldSpaces.section.getIndex(x, y, z)];
|
|
55
51
|
}
|
|
56
52
|
setBitFlag(index, value) {
|
|
57
53
|
setBitArrayIndex(this.flagArray, index, value ? 1 : 0);
|
|
@@ -59,19 +55,73 @@ export class Sector {
|
|
|
59
55
|
getBitFlag(index) {
|
|
60
56
|
return getBitArrayIndex(this.flagArray, index) == 1;
|
|
61
57
|
}
|
|
58
|
+
setStored(stored) {
|
|
59
|
+
this.setBitFlag(SectorStateDefaultBitFlags.isStored, stored);
|
|
60
|
+
}
|
|
61
|
+
isStored() {
|
|
62
|
+
return this.getBitFlag(SectorStateDefaultBitFlags.isStored);
|
|
63
|
+
}
|
|
62
64
|
setTimeStamp(index, value) {
|
|
63
65
|
this.timeStampArray[index] = value;
|
|
64
66
|
}
|
|
65
67
|
getTimeStamp(index) {
|
|
66
68
|
return this.timeStampArray[index];
|
|
67
69
|
}
|
|
70
|
+
*getRenerableSections() {
|
|
71
|
+
for (const section of this.sections) {
|
|
72
|
+
const [min, max] = section.getMinMax();
|
|
73
|
+
if (min == Infinity || max == -Infinity)
|
|
74
|
+
continue;
|
|
75
|
+
yield section;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
anySectionDirty() {
|
|
79
|
+
for (let i = 0; i < this.sections.length; i++) {
|
|
80
|
+
if (this.sections[i].isDirty() && !this.sections[i].isInProgress())
|
|
81
|
+
return true;
|
|
82
|
+
}
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
85
|
+
storeFlags() {
|
|
86
|
+
const stored = {};
|
|
87
|
+
for (const key in SectorState.StoredFlags) {
|
|
88
|
+
stored[key] = this.getBitFlag(SectorState.StoredFlags[key]);
|
|
89
|
+
}
|
|
90
|
+
return stored;
|
|
91
|
+
}
|
|
92
|
+
loadFlags(flags) {
|
|
93
|
+
for (const flag in flags) {
|
|
94
|
+
const storedIndex = SectorState.StoredFlags[flag];
|
|
95
|
+
if (storedIndex === undefined) {
|
|
96
|
+
console.warn(`${flag} does not exist on stored flags for sector`);
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
this.setBitFlag(storedIndex, flags[flag]);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
storeTimestamps() {
|
|
103
|
+
const stored = {};
|
|
104
|
+
for (const key in SectorState.StoredTimeStamps) {
|
|
105
|
+
stored[key] = this.getTimeStamp(SectorState.StoredTimeStamps[key]);
|
|
106
|
+
}
|
|
107
|
+
return stored;
|
|
108
|
+
}
|
|
109
|
+
loadTimestamps(stored) {
|
|
110
|
+
for (const timeStamp in stored) {
|
|
111
|
+
const storedIndex = SectorState.StoredTimeStamps[timeStamp];
|
|
112
|
+
if (storedIndex === undefined) {
|
|
113
|
+
console.warn(`${timeStamp} does not exist on stored timestamps for sector`);
|
|
114
|
+
continue;
|
|
115
|
+
}
|
|
116
|
+
this.setTimeStamp(storedIndex, stored[timeStamp]);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
68
119
|
toJSON() {
|
|
69
120
|
const sections = [];
|
|
70
121
|
for (const section of this.sections) {
|
|
71
122
|
sections.push(section.toJSON());
|
|
72
123
|
}
|
|
73
124
|
return {
|
|
74
|
-
position: this.position,
|
|
75
125
|
buffer: this.buffer,
|
|
76
126
|
flagArray: this.flagArray,
|
|
77
127
|
timeStampArray: this.timeStampArray,
|
|
@@ -31,11 +31,11 @@ export class SectorHeightMap {
|
|
|
31
31
|
const section = sector.sections[i];
|
|
32
32
|
if (!section)
|
|
33
33
|
continue;
|
|
34
|
-
const sectionPOS =
|
|
34
|
+
const sectionPOS = section.getPosition();
|
|
35
35
|
let [sectionMin, sectionMax] = section.getMinMax();
|
|
36
36
|
if (Math.abs(sectionMax) == Infinity)
|
|
37
37
|
continue;
|
|
38
|
-
sectionMax = sectionPOS + sectionMax;
|
|
38
|
+
sectionMax = sectionPOS[1] + sectionMax;
|
|
39
39
|
if (maxHeight < sectionMax) {
|
|
40
40
|
maxHeight = sectionMax;
|
|
41
41
|
}
|
|
@@ -1,13 +1,21 @@
|
|
|
1
|
-
export declare enum
|
|
1
|
+
export declare enum SectorStateDefaultBitFlags {
|
|
2
2
|
isWorldGenDone = 0,
|
|
3
3
|
isWorldDecorDone = 1,
|
|
4
4
|
isWorldPropagationDone = 2,
|
|
5
5
|
isWorldSunDone = 3,
|
|
6
6
|
isDirty = 4,
|
|
7
|
-
isStored = 5
|
|
8
|
-
persistent = 6
|
|
7
|
+
isStored = 5
|
|
9
8
|
}
|
|
10
|
-
export declare enum
|
|
11
|
-
lastSaveTimestamp = 0
|
|
12
|
-
|
|
9
|
+
export declare enum SectorStateDefaultTimeStamps {
|
|
10
|
+
lastSaveTimestamp = 0
|
|
11
|
+
}
|
|
12
|
+
export declare class SectorState {
|
|
13
|
+
/**The default bit flags for secotrs */
|
|
14
|
+
static Flags: typeof SectorStateDefaultBitFlags;
|
|
15
|
+
/**An array of bit flags tht are preserved when the sector is stored */
|
|
16
|
+
static StoredFlags: Record<string, number>;
|
|
17
|
+
/**The default timestamps for secotrs */
|
|
18
|
+
static TimeStamps: typeof SectorStateDefaultTimeStamps;
|
|
19
|
+
/**An array of bit timestamps tht are preserved when the sector is stored */
|
|
20
|
+
static StoredTimeStamps: Record<string, number>;
|
|
13
21
|
}
|
|
@@ -1,15 +1,28 @@
|
|
|
1
|
-
export var
|
|
2
|
-
(function (
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
1
|
+
export var SectorStateDefaultBitFlags;
|
|
2
|
+
(function (SectorStateDefaultBitFlags) {
|
|
3
|
+
SectorStateDefaultBitFlags[SectorStateDefaultBitFlags["isWorldGenDone"] = 0] = "isWorldGenDone";
|
|
4
|
+
SectorStateDefaultBitFlags[SectorStateDefaultBitFlags["isWorldDecorDone"] = 1] = "isWorldDecorDone";
|
|
5
|
+
SectorStateDefaultBitFlags[SectorStateDefaultBitFlags["isWorldPropagationDone"] = 2] = "isWorldPropagationDone";
|
|
6
|
+
SectorStateDefaultBitFlags[SectorStateDefaultBitFlags["isWorldSunDone"] = 3] = "isWorldSunDone";
|
|
7
|
+
SectorStateDefaultBitFlags[SectorStateDefaultBitFlags["isDirty"] = 4] = "isDirty";
|
|
8
|
+
SectorStateDefaultBitFlags[SectorStateDefaultBitFlags["isStored"] = 5] = "isStored";
|
|
9
|
+
})(SectorStateDefaultBitFlags || (SectorStateDefaultBitFlags = {}));
|
|
10
|
+
export var SectorStateDefaultTimeStamps;
|
|
11
|
+
(function (SectorStateDefaultTimeStamps) {
|
|
12
|
+
SectorStateDefaultTimeStamps[SectorStateDefaultTimeStamps["lastSaveTimestamp"] = 0] = "lastSaveTimestamp";
|
|
13
|
+
})(SectorStateDefaultTimeStamps || (SectorStateDefaultTimeStamps = {}));
|
|
14
|
+
export class SectorState {
|
|
15
|
+
/**The default bit flags for secotrs */
|
|
16
|
+
static Flags = SectorStateDefaultBitFlags;
|
|
17
|
+
/**An array of bit flags tht are preserved when the sector is stored */
|
|
18
|
+
static StoredFlags = {
|
|
19
|
+
dve_is_world_gen_done: SectorStateDefaultBitFlags.isWorldGenDone,
|
|
20
|
+
dve_is_world_decoration_done: SectorStateDefaultBitFlags.isWorldDecorDone,
|
|
21
|
+
dve_is_world_progation_done: SectorStateDefaultBitFlags.isWorldPropagationDone,
|
|
22
|
+
dve_is_world_sun_done: SectorStateDefaultBitFlags.isWorldSunDone,
|
|
23
|
+
};
|
|
24
|
+
/**The default timestamps for secotrs */
|
|
25
|
+
static TimeStamps = SectorStateDefaultTimeStamps;
|
|
26
|
+
/**An array of bit timestamps tht are preserved when the sector is stored */
|
|
27
|
+
static StoredTimeStamps = {};
|
|
28
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/World/WorldRegister.d.ts
CHANGED
|
@@ -19,9 +19,13 @@ declare class WorldRegisterDimensions {
|
|
|
19
19
|
declare class WorldRegisterSectors {
|
|
20
20
|
static setSecotrPool(enabled: boolean): void;
|
|
21
21
|
static add(dimensionId: string, x: number, y: number, z: number, sector: SectorData): Sector;
|
|
22
|
+
static addAt(location: LocationData, sector: SectorData): Sector;
|
|
22
23
|
static new(dimensionId: string, x: number, y: number, z: number): boolean;
|
|
24
|
+
static newAt(location: LocationData): boolean;
|
|
23
25
|
static get(dimensionId: string, x: number, y: number, z: number): false | Sector;
|
|
26
|
+
static getAt(location: LocationData): false | Sector;
|
|
24
27
|
static remove(dimensionId: string, x: number, y: number, z: number): boolean;
|
|
28
|
+
static removeAt(location: LocationData): boolean;
|
|
25
29
|
}
|
|
26
30
|
export declare class WorldRegister {
|
|
27
31
|
static _dimensions: Map<string, Dimension>;
|
package/World/WorldRegister.js
CHANGED
|
@@ -35,6 +35,7 @@ class SectorPool {
|
|
|
35
35
|
}
|
|
36
36
|
static returnSector(secotr) {
|
|
37
37
|
secotr.bufferView.fill(0);
|
|
38
|
+
this._secotrs.push(secotr.toJSON());
|
|
38
39
|
}
|
|
39
40
|
}
|
|
40
41
|
class WorldRegisterSectors {
|
|
@@ -46,21 +47,26 @@ class WorldRegisterSectors {
|
|
|
46
47
|
let dimension = WorldRegister.dimensions.get(dimensionId);
|
|
47
48
|
if (!dimension)
|
|
48
49
|
dimension = WorldRegister.dimensions.add(dimensionId);
|
|
49
|
-
WorldSpaces.sector.getPositionVec3Array(x, y, z
|
|
50
|
-
const newSector = new Sector(sector);
|
|
50
|
+
const newSector = new Sector(sector, WorldSpaces.sector.getPositionVec3Array(x, y, z));
|
|
51
51
|
dimension.sectors.set(WorldSpaces.hash.hashVec3Array(newSector.position), newSector);
|
|
52
52
|
return newSector;
|
|
53
53
|
}
|
|
54
|
+
static addAt(location, sector) {
|
|
55
|
+
return this.add(...location, sector);
|
|
56
|
+
}
|
|
54
57
|
static new(dimensionId, x, y, z) {
|
|
55
58
|
if (this.get(dimensionId, x, y, z))
|
|
56
59
|
return false;
|
|
57
60
|
let dimension = WorldRegister.dimensions.get(dimensionId);
|
|
58
61
|
if (!dimension)
|
|
59
62
|
dimension = WorldRegister.dimensions.add(dimensionId);
|
|
60
|
-
const sector = this.add(dimensionId, x, y, z,
|
|
63
|
+
const sector = this.add(dimensionId, x, y, z, SectorPool.getSector());
|
|
61
64
|
WorldDataHooks.sectors.onNew([dimensionId, x, y, z], sector);
|
|
62
65
|
return true;
|
|
63
66
|
}
|
|
67
|
+
static newAt(location) {
|
|
68
|
+
return this.new(...location);
|
|
69
|
+
}
|
|
64
70
|
static get(dimensionId, x, y, z) {
|
|
65
71
|
let dimension = WorldRegister.dimensions.get(dimensionId);
|
|
66
72
|
if (!dimension)
|
|
@@ -68,6 +74,9 @@ class WorldRegisterSectors {
|
|
|
68
74
|
const sector = dimension.sectors.get(WorldSpaces.hash.hashVec3(WorldSpaces.sector.getPosition(x, y, z, tempPosition)));
|
|
69
75
|
return sector || false;
|
|
70
76
|
}
|
|
77
|
+
static getAt(location) {
|
|
78
|
+
return this.get(...location);
|
|
79
|
+
}
|
|
71
80
|
static remove(dimensionId, x, y, z) {
|
|
72
81
|
let dimension = WorldRegister.dimensions.get(dimensionId);
|
|
73
82
|
if (!dimension)
|
|
@@ -83,6 +92,9 @@ class WorldRegisterSectors {
|
|
|
83
92
|
dimension.sectors.delete(sectorKey);
|
|
84
93
|
return true;
|
|
85
94
|
}
|
|
95
|
+
static removeAt(location) {
|
|
96
|
+
return this.remove(...location);
|
|
97
|
+
}
|
|
86
98
|
}
|
|
87
99
|
export class WorldRegister {
|
|
88
100
|
static _dimensions = new Map();
|
package/World/WorldSpaces.d.ts
CHANGED
|
@@ -23,6 +23,8 @@ declare class SectorSpace {
|
|
|
23
23
|
static power2Axes: Vector3Like;
|
|
24
24
|
static bounds: Vector3Like;
|
|
25
25
|
static volumne: number;
|
|
26
|
+
static sectionBounds: Vector3Like;
|
|
27
|
+
static sectionVolumne: number;
|
|
26
28
|
static getPosition(x: number, y: number, z: number, refPosition?: Vector3Like): Vector3Like;
|
|
27
29
|
static getPositionVec3Array(x: number, y: number, z: number, refPosition?: Vec3Array): Vec3Array;
|
|
28
30
|
}
|
|
@@ -33,6 +35,8 @@ declare class SectionSpace {
|
|
|
33
35
|
static getPosition(x: number, y: number, z: number, refPosition?: Vector3Like): Vector3Like;
|
|
34
36
|
static getPositionVec3Array(x: number, y: number, z: number, refPosition?: Vec3Array): Vec3Array;
|
|
35
37
|
static getIndex(x: number, y: number, z: number): number;
|
|
38
|
+
static getPositionFromIndex(index: number, refPosition?: Vector3Like): Vector3Like;
|
|
39
|
+
static getPositionFromIndexVec3Array(index: number, refPosition?: Vec3Array): Vec3Array;
|
|
36
40
|
}
|
|
37
41
|
declare class VoxelSpace {
|
|
38
42
|
static bounds: Vector3Like;
|