Some checks failed
studiorailgun/Renderer/pipeline/head There was a failure building this commit
156 lines
4.3 KiB
TypeScript
156 lines
4.3 KiB
TypeScript
import { Engine } from "/Scripts/types/engine";
|
|
import { CHUNK_WIDTH, ChunkGenerator, GeneratedVoxel, VoxelFunction } from "/Scripts/types/host/server/chunk/chunkgenerator";
|
|
import { BiomeData } from "/Scripts/types/host/server/data/biomedata";
|
|
|
|
|
|
/**
|
|
* Converts a chunk coordinate to a real coordinate
|
|
* @param chunk The chunk pos
|
|
* @param world The world pos
|
|
* @returns The real pos
|
|
*/
|
|
const voxelToReal = (chunk: number, world: number) => {
|
|
return world * CHUNK_WIDTH + chunk
|
|
}
|
|
|
|
/**
|
|
* Gets the voxel on the surface
|
|
* @return The voxel
|
|
*/
|
|
const getSurfaceVoxel = (
|
|
voxel: GeneratedVoxel,
|
|
worldX: number, worldY: number, worldZ: number,
|
|
chunkX: number, chunkY: number, chunkZ: number,
|
|
realX: number, realY: number, realZ: number,
|
|
surfacePercent: number,
|
|
surfaceHeight: number,
|
|
surfaceBiome: BiomeData
|
|
) => {
|
|
voxel.weight = surfacePercent * 2 - 1;
|
|
voxel.type = 2;
|
|
return voxel;
|
|
}
|
|
|
|
/**
|
|
* Gets the voxel below the surface
|
|
* @return The voxel
|
|
*/
|
|
const getSubsurfaceVoxel = (
|
|
voxel: GeneratedVoxel,
|
|
worldX: number, worldY: number, worldZ: number,
|
|
chunkX: number, chunkY: number, chunkZ: number,
|
|
realX: number, realY: number, realZ: number,
|
|
surfacePercent: number,
|
|
surfaceHeight: number,
|
|
surfaceBiome: BiomeData
|
|
) => {
|
|
if(realY < surfaceHeight - 5){
|
|
voxel.weight = 1;
|
|
voxel.type = 6;
|
|
} else {
|
|
voxel.weight = 1;
|
|
voxel.type = 1;
|
|
}
|
|
return voxel;
|
|
}
|
|
|
|
/**
|
|
* Gets the voxel above the service
|
|
* @return The voxel
|
|
*/
|
|
const getOverSurfaceVoxel = (
|
|
voxel: GeneratedVoxel,
|
|
worldX: number, worldY: number, worldZ: number,
|
|
chunkX: number, chunkY: number, chunkZ: number,
|
|
realX: number, realY: number, realZ: number,
|
|
surfacePercent: number,
|
|
surfaceHeight: number,
|
|
surfaceBiome: BiomeData
|
|
) => {
|
|
voxel.weight = -1;
|
|
voxel.type = 0;
|
|
return voxel;
|
|
}
|
|
|
|
/**
|
|
* A test generator
|
|
*/
|
|
export const TestGen: ChunkGenerator = {
|
|
|
|
/**
|
|
* Gets the tag for this generator
|
|
* @returns The tag
|
|
*/
|
|
getTag: () => "test",
|
|
|
|
/**
|
|
* The elevation function
|
|
* @param worldX The world x coordinate
|
|
* @param worldZ The world z coordinate
|
|
* @param chunkX The chunk x coordinate
|
|
* @param chunkZ The chunk z coordinate
|
|
*/
|
|
getElevation: (worldX: number, worldZ: number, chunkX: number, chunkZ: number): number => {
|
|
return 1
|
|
},
|
|
|
|
/**
|
|
* Gets the function to actually get voxels
|
|
* @param engine The engine reference
|
|
*/
|
|
getVoxelFunction: (
|
|
engine: Engine
|
|
): VoxelFunction => {
|
|
const rVal = (
|
|
voxel: GeneratedVoxel,
|
|
worldX: number, worldY: number, worldZ: number,
|
|
chunkX: number, chunkY: number, chunkZ: number,
|
|
stride: number,
|
|
surfaceHeight: number,
|
|
surfaceBiome: BiomeData
|
|
): void => {
|
|
|
|
const realX = voxelToReal(chunkX,worldX)
|
|
const realY = voxelToReal(chunkY,worldY)
|
|
const realZ = voxelToReal(chunkZ,worldZ)
|
|
const strideMultiplier = engine.classes.math.static.pow(2,stride)
|
|
// const strideMultiplier = 1
|
|
const heightDiff = realY - surfaceHeight
|
|
const surfacePercent = (surfaceHeight - realY) / strideMultiplier
|
|
|
|
if(heightDiff < -strideMultiplier){
|
|
getSubsurfaceVoxel(
|
|
voxel,
|
|
worldX, worldY, worldZ,
|
|
chunkX, chunkY, chunkZ,
|
|
realX, realY, realZ,
|
|
surfacePercent,
|
|
surfaceHeight,
|
|
surfaceBiome
|
|
);
|
|
} else if(heightDiff > 0) {
|
|
getOverSurfaceVoxel(
|
|
voxel,
|
|
worldX, worldY, worldZ,
|
|
chunkX, chunkY, chunkZ,
|
|
realX, realY, realZ,-
|
|
surfacePercent,
|
|
surfaceHeight,
|
|
surfaceBiome
|
|
);
|
|
} else {
|
|
getSurfaceVoxel(
|
|
voxel,
|
|
worldX, worldY, worldZ,
|
|
chunkX, chunkY, chunkZ,
|
|
realX, realY, realZ,
|
|
surfacePercent,
|
|
surfaceHeight,
|
|
surfaceBiome
|
|
);
|
|
}
|
|
}
|
|
return rVal
|
|
},
|
|
|
|
} |