diff --git a/engine/world_generation/src/mesh_generator.rs b/engine/world_generation/src/mesh_generator.rs index 8b3e7a9..f25480c 100644 --- a/engine/world_generation/src/mesh_generator.rs +++ b/engine/world_generation/src/mesh_generator.rs @@ -43,7 +43,6 @@ fn create_tile_collider( } for i in 0..3 { let off = i * 2; - indices.push([off + idx, ((off + 1) % 6) + idx, ((off + 2) % 6) + idx]); } @@ -80,8 +79,9 @@ fn create_tile_wall_collider( verts.push(pos + HEX_CORNERS[dir]); verts.push(pos + HEX_CORNERS[(dir + 1) % 6]); - indices.push([idx, idx + 1, idx2]); - indices.push([idx, idx2 + 1, idx2]); + let off = dir as u32; + indices.push([idx + off, idx + ((off + 1) % 6), idx2 + 1]); + indices.push([idx + off, idx2 + 1, idx2]); } pub fn generate_chunk_mesh( diff --git a/game/main/src/main.rs b/game/main/src/main.rs index f2e7f15..3382061 100644 --- a/game/main/src/main.rs +++ b/game/main/src/main.rs @@ -17,9 +17,9 @@ fn main() { primary_window: Some(Window { title: "Phos".into(), name: Some("phos".into()), - resolution: (1920., 1080.).into(), + // resolution: (1920., 1080.).into(), present_mode: PresentMode::AutoNoVsync, - // mode: bevy::window::WindowMode::BorderlessFullscreen, + mode: bevy::window::WindowMode::BorderlessFullscreen, ..default() }), ..default() diff --git a/game/main/src/phos.rs b/game/main/src/phos.rs index 7394727..f2c335d 100644 --- a/game/main/src/phos.rs +++ b/game/main/src/phos.rs @@ -9,6 +9,7 @@ use bevy::{ use bevy_rapier3d::dynamics::{RigidBody, Velocity}; use bevy_rapier3d::geometry::{Collider, Restitution}; use bevy_rapier3d::plugin::{NoUserData, RapierPhysicsPlugin}; +use bevy_rapier3d::render::RapierDebugRenderPlugin; use camera_system::prelude::PhosCamera; use camera_system::PhosCameraPlugin; use iyes_perf_ui::prelude::*; @@ -38,7 +39,15 @@ impl Plugin for PhosGamePlugin { .add_systems(Startup, (load_textures, load_tiles, create_map).chain()); //Systems - Update - app.add_systems(Update, (finalize_texture, spawn_map, spawn_sphere)); + app.add_systems( + Update, + ( + finalize_texture, + spawn_map, + spawn_sphere, + render_distance_system, + ), + ); //Perf UI app.add_plugins(bevy::diagnostic::FrameTimeDiagnosticsPlugin) @@ -52,7 +61,7 @@ impl Plugin for PhosGamePlugin { app.add_plugins(BiomePainterPlugin); //Physics app.add_plugins(RapierPhysicsPlugin::::default()); - // .add_plugins(RapierDebugRenderPlugin::default()); + // app.add_plugins(RapierDebugRenderPlugin::default()); app.insert_resource(WireframeConfig { global: false, @@ -200,6 +209,7 @@ fn create_map(mut commands: Commands) { sea_level: 4., border_size: 64., size: UVec2::splat(1024 / Chunk::SIZE as u32), + // size: UVec2::splat(1), }, 4, ); @@ -276,28 +286,30 @@ fn spawn_sphere( let cam_transform = cam.single(); commands.spawn(( MaterialMeshBundle { - mesh: meshes.add(Sphere::new(0.5)), + mesh: meshes.add(Sphere::new(0.3)), material: mat.0.clone(), transform: Transform::from_translation(cam_transform.translation), ..default() }, - Collider::ball(0.5), + Collider::ball(0.3), RigidBody::Dynamic, - Velocity::linear(cam_transform.forward() * 100.), + Velocity::linear(cam_transform.forward() * 50.), )); } } -// fn render_distance_system( -// mut chunks: Query<(&PhosChunk, &mut Visibility)>, -// camera: Query<&Transform, With>, -// ) { -// let cam = camera.single(); -// for (transform, mut visibility) in chunks.iter_mut() { -// let dist = (transform.center - cam.translation).length(); -// if dist > 500. { -// *visibility = Visibility::Hidden; -// } else { -// *visibility = Visibility::Visible; -// } -// } -// } +fn render_distance_system( + mut chunks: Query<(&Transform, &mut Visibility), With>, + camera: Query<&Transform, With>, +) { + let cam = camera.single(); + for (transform, mut visibility) in chunks.iter_mut() { + let dist = (transform.translation - cam.translation + + Vec3::new((Chunk::SIZE / 2) as f32, 0., (Chunk::SIZE / 2) as f32)) + .length(); + if dist > 500. { + *visibility = Visibility::Hidden; + } else { + *visibility = Visibility::Visible; + } + } +}