import type { BlockRegistry } from "$/common/everything_registry.ts"; import type { SpriteRegion } from "$/common/constants.ts"; import type { OreJson } from "$/common/mod_data.ts"; import type { SortType } from "./translucent_sort.ts"; // messages between the main thread and the chunk workers // position 3, uv 2, color 4 (directional shade and ambient occlusion, alpha), lightmap coordinates 2 export const TERRAIN_VERTEX_FLOATS = 11; export type ToChunkWorker = | { type: "init"; // the blocks registry without its functions, indexed by numeric id blocks_registry: BlockRegistry[]; block_ids: Record; textures_info: Record; image: { width: number; height: number }; // mods' worldgen scripts and ores, so generation matches the server worldgen_scripts: { mod: string; url: string }[]; ores: OreJson[]; } | { type: "generate"; chunk_x: number; chunk_z: number; seed: string } | { type: "mesh"; chunk_x: number; chunk_z: number; version: number; // copies of the blocks of the 3x3 chunks around it, going +x then +z from -x -z, for lighting chunks: (Uint32Array | null)[]; // where the camera is, to sort the translucent quads camera: number[]; } | { type: "sort"; chunk_x: number; chunk_z: number; version: number; sort_version: number; centers: Float32Array; camera: number[]; }; // 4 vertices per quad export interface LayerMesh { vertices: Float32Array; quad_count: number; } export type FromChunkWorker = | { type: "generated"; chunk_x: number; chunk_z: number; blocks: Uint32Array; // blocks that landed in other chunks (from features like a mod's trees), flattened as x, y, z, numeric id spills: Int32Array; } | { type: "meshed"; chunk_x: number; chunk_z: number; version: number; solid: LayerMesh; cutout: LayerMesh; translucent: LayerMesh & { // sorted back to front for the camera the mesh was requested with indices: Uint32Array; sort_type: SortType; // what resorting needs, see translucent_sort.ts centers: Float32Array; planes: [Float32Array, Float32Array, Float32Array]; }; camera: number[]; } | { type: "sorted"; chunk_x: number; chunk_z: number; version: number; sort_version: number; indices: Uint32Array; };