27 lines
No EOL
2.3 KiB
Markdown
27 lines
No EOL
2.3 KiB
Markdown
# Core Module - IslaApocalypse
|
|
|
|
**Phase 2 Status:** Active (Voxel Math & Parsing Online)
|
|
|
|
## Overview
|
|
The `Core` directory contains the mathematical foundation, data structures, and parser required to bridge the 2D procedural generation with the 3D Voxel Engine. It is strictly logic-driven and contains no Godot Nodes or visual elements.
|
|
|
|
## Key Architecture & Components
|
|
|
|
### 1. The Data Bridge (`MapDataParser.cs`)
|
|
Responsible for deserializing the highly compressed binary `.dat` file generated by the `/Tools` pipeline.
|
|
* **Outputs:** A `WorldBlueprint` object held in RAM.
|
|
* **Capabilities:** Reads the 2D heightmap, biome map, and town locations. Crucially, it parses all four tiers of A* road vectors (Highways, Branch Roads, Rugged Roads, Trails) for the Server to use in terrain flattening.
|
|
|
|
### 2. Voxel Data Containers (`ChunkData.cs` & `Constants.cs`)
|
|
* **Chunk Dimensions:** Defined in `Constants.cs`. Currently optimized to `32x32` horizontal with a massive `256` vertical height limit to allow for true AAA-scale mountain ranges without heightmap compression.
|
|
* **Seamless Borders:** `ChunkData.cs` expands its scalar field arrays (`Densities` and `BlockIDs`) by `+1` on all axes. This allows the Marching Cubes algorithm to sample the neighboring chunk's data, ensuring meshes connect perfectly without gaps.
|
|
|
|
### 3. The Math Engine (`MarchingCubes.cs`)
|
|
Transforms the raw `ChunkData` scalar fields into physical Godot `ArrayMesh` geometry.
|
|
* **Analytical Normals:** Instead of flat shading, the algorithm calculates exact 3D slope gradients at the corners of each voxel. This produces smooth, realistic lighting across curved terrain.
|
|
* **Vertex Painting:** Reads the `BlockID` assigned to each voxel corner and applies physical RGB colors directly to the mesh vertices before committing the geometry.
|
|
|
|
### 4. Biome & Material Mapping (`BiomePalette.cs`, `BlockRegistry.cs`)
|
|
Translates the 2D world into physical 3D materials.
|
|
* **BlockRegistry:** A byte-based lookup table defining physical materials (`SAND`, `STONE`, `WASTELAND_DIRT`, `ASPHALT`).
|
|
* **BiomePalette Logic:** Uses the 2D `Biome` pixel combined with the 3D `currentY` depth to determine the block type. For example, `Biome.Wasteland` combined with a depth of 0 yields `WASTELAND_DIRT`, while a depth > 4 yields `STONE`. |