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
 | 
						|
    },
 | 
						|
 | 
						|
} |