added path finding

This commit is contained in:
2024-10-05 13:29:42 -04:00
parent 5e7ab32138
commit 06ffb2bd3e
12 changed files with 136 additions and 70 deletions

View File

@@ -1,16 +1,7 @@
use bevy::{prelude::*, window::PrimaryWindow};
use bevy_inspector_egui::bevy_egui::{systems::InputEvents, EguiContexts};
use bevy_inspector_egui::egui;
use bevy_rapier3d::prelude::*;
use bevy::prelude::*;
use shared::resources::TileUnderCursor;
use shared::states::GameplayState;
use shared::tags::MainCamera;
use world_generation::{
consts::HEX_CORNERS,
hex_utils::{HexCoord, INNER_RADIUS},
prelude::Map,
states::GeneratorState,
};
use world_generation::{consts::HEX_CORNERS, prelude::Map, states::GeneratorState};
pub struct DebugPlugin;
@@ -76,24 +67,10 @@ fn show_tile_heights(map: Res<Map>, mut gizmos: Gizmos, shape: Res<Shape>, tile_
Quat::IDENTITY,
Color::WHITE,
);
let nbors = map.get_neighbors(&contact.tile);
let contact_tile_pos = contact.tile.to_world(map.sample_height(&contact.tile));
// for i in 0..6 {
// if let Some(s) = nbors[i] {
// let coord = contact.tile.get_neighbor(i);
// let p = coord.to_world(s);
// gizmos.arrow(p, p + Vec3::Y * (i as f32 + 1.0), Color::WHITE);
// }
// let p = HEX_CORNERS[i] + contact_tile_pos;
// gizmos.arrow(p, p + Vec3::Y * (i as f32 + 1.0), LinearRgba::rgb(1.0, 0.0, 0.5));
// }
gizmos.line(contact.point, contact.point + Vec3::X, LinearRgba::RED);
gizmos.line(contact.point, contact.point + Vec3::Y, LinearRgba::GREEN);
gizmos.line(contact.point, contact.point + Vec3::Z, LinearRgba::BLUE);
//gizmos.sphere(contact_point, Quat::IDENTITY, 0.1, LinearRgba::rgb(1., 0., 0.5));
}
}

View File

@@ -1,5 +1,4 @@
pub mod chunk_utils;
pub mod render_distance_system;
pub mod debug_plugin;
pub mod editor_plugin;
pub mod tile_selection_plugin;

View File

@@ -1,71 +0,0 @@
use bevy::prelude::*;
use crate::camera_system::components::PhosCamera;
pub struct RenderDistancePlugin;
impl Plugin for RenderDistancePlugin {
fn build(&self, app: &mut bevy::prelude::App) {
app.register_type::<RenderDistanceSettings>();
app.add_systems(PostUpdate, render_distance_system)
.insert_resource(RenderDistanceSettings::default());
#[cfg(debug_assertions)]
app.insert_resource(RenderDistanceSettings::new(f32::MAX));
}
}
#[derive(Resource, Reflect)]
#[reflect(Resource)]
pub struct RenderDistanceSettings {
pub render_distance: f32,
}
impl RenderDistanceSettings {
pub fn new(distance: f32) -> Self {
return Self {
render_distance: distance,
};
}
}
impl Default for RenderDistanceSettings {
fn default() -> Self {
Self::new(500.)
}
}
#[derive(Component)]
pub struct RenderDistanceVisibility {
pub offset: Vec3,
}
impl RenderDistanceVisibility {
pub fn with_offset(mut self, offset: Vec3) -> Self {
self.offset = offset;
return self;
}
}
impl Default for RenderDistanceVisibility {
fn default() -> Self {
Self { offset: Vec3::ZERO }
}
}
fn render_distance_system(
mut objects: Query<(&Transform, &mut Visibility, &RenderDistanceVisibility)>,
camera_query: Query<&Transform, With<PhosCamera>>,
settings: Res<RenderDistanceSettings>,
) {
let camera = camera_query.single();
let cam_pos = Vec3::new(camera.translation.x, 0.0, camera.translation.z);
for (t, mut vis, r) in objects.iter_mut() {
let dist = (cam_pos - (t.translation + r.offset)).length();
if settings.render_distance < dist {
*vis = Visibility::Hidden;
} else {
*vis = Visibility::Visible;
}
}
}