This commit is contained in:
2024-11-07 23:47:38 -05:00
parent 00468aa18d
commit 33fa18fe97
8 changed files with 33 additions and 9 deletions

View File

@@ -39,6 +39,7 @@ pub fn generate_chunk_mesh(chunk: &MeshChunkData) -> Mesh {
// &mut tex,
chunk.textures[idx][0],
chunk.textures[idx][1],
chunk.overlay_textures[idx],
);
}
}
@@ -63,10 +64,14 @@ fn create_tile(
normals: &mut Vec<Vec3>,
texture_index: u32,
side_texture_index: u32,
side_overlay_texture_index: Option<u32>,
) {
let uv_offset = Vec2::splat(0.5);
let tex_off = Vec2::new(texture_index as f32, 0.);
let side_tex_off = Vec2::new(side_texture_index as f32, 0.);
let side_tex_off = Vec2::new(
pack_texture_data(side_texture_index, side_overlay_texture_index) as f32,
0.,
);
let idx = verts.len() as u32;
for i in 0..6 {
@@ -278,6 +283,13 @@ fn create_tile_wall(
uvs.push((Vec2::new(1., pos.y - height) / TEX_MULTI) + tex_off);
}
fn pack_texture_data(texture: u32, overlay: Option<u32>) -> u32 {
if let Some(ovr) = overlay {
return texture + (ovr << 5);
}
return texture + (texture << 5);
}
#[cfg(test)]
mod tests {
@@ -320,7 +332,17 @@ mod tests {
//4 side faces
let nbors = [2.0, 2.0, 0.0, 0.0, 0.0, 0.0];
create_tile(Vec3::Y, &nbors, &mut verts, &mut uvs, &mut indices, &mut normals, 3, 7);
create_tile(
Vec3::Y,
&nbors,
&mut verts,
&mut uvs,
&mut indices,
&mut normals,
3,
7,
None,
);
assert!(verts.len() == (6 + 4 * 4), "Number of verts don't match");
assert!(uvs.len() == (6 + 4 * 4), "Number of uvs don't match");

View File

@@ -1,11 +1,11 @@
use crate::hex_utils::SHORT_DIAGONAL;
use bevy::prelude::*;
#[derive(Clone)]
pub struct Chunk {
pub heights: [f32; Chunk::AREA],
pub textures: [[u32; 2]; Chunk::AREA],
pub overlay_textures: [Option<u32>; Chunk::AREA],
// pub biome_data: [BiomeData; Chunk::AREA],
pub biome_id: [usize; Chunk::AREA],
pub chunk_offset: IVec2,
@@ -18,6 +18,7 @@ impl Default for Chunk {
Self {
heights: [0.; Chunk::AREA],
textures: [[0; 2]; Chunk::AREA],
overlay_textures: [None; Chunk::AREA],
// biome_data: [BiomeData::default(); Chunk::AREA],
biome_id: [0; Chunk::AREA],
chunk_offset: Default::default(),

View File

@@ -2,10 +2,7 @@ use bevy::prelude::*;
use crate::hex_utils::*;
use super::{
chunk::Chunk,
mesh_chunk::MeshChunkData,
};
use super::{chunk::Chunk, mesh_chunk::MeshChunkData};
#[derive(Resource, Clone)]
pub struct Map {
@@ -41,6 +38,7 @@ impl Map {
sealevel: self.sealevel,
heights: chunk.heights.clone(),
textures: chunk.textures.clone(),
overlay_textures: chunk.overlay_textures.clone(),
distance_to_land: self.get_distance_from_land(chunk.chunk_offset, 4),
};
}

View File

@@ -9,6 +9,7 @@ use super::chunk::Chunk;
pub struct MeshChunkData {
pub heights: [f32; Chunk::AREA],
pub textures: [[u32; 2]; Chunk::AREA],
pub overlay_textures: [Option<u32>; Chunk::AREA],
pub min_height: f32,
pub sealevel: f32,
pub distance_to_land: [f32; Chunk::AREA],

View File

@@ -29,6 +29,7 @@ pub struct TileAsset {
#[serde(skip)]
pub texture: String,
pub side_texture_id: u32,
pub side_overlay_id: Option<u32>,
#[serde(skip)]
pub side_texture: String,
}