buildings

This commit is contained in:
2024-06-29 19:00:29 -04:00
parent 805f50e40f
commit 7ff3638eff
17 changed files with 90 additions and 31 deletions

View File

@@ -1,14 +1,24 @@
use bevy::{prelude::*, window::PrimaryWindow};
use bevy_rapier3d::{pipeline::QueryFilter, plugin::RapierContext};
use shared::{despawn::Despawn, states::GameplayState, tags::MainCamera};
use shared::{
despawn::Despawn,
states::{GameplayState, MenuState},
tags::MainCamera,
};
use world_generation::{hex_utils::HexCoord, map::map::Map};
use crate::build_queue::{self, BuildQueue, QueueEntry};
pub struct BuildingPugin;
impl Plugin for BuildingPugin {
fn build(&self, app: &mut App) {
app.insert_resource(BuildQueue::default());
app.add_systems(Startup, init);
app.add_systems(Update, hq_placement.run_if(in_state(GameplayState::PlaceHQ)));
app.add_systems(PreUpdate, process_build_queue.run_if(in_state(GameplayState::Playing)));
}
}
@@ -30,6 +40,8 @@ fn hq_placement(
rapier_context: Res<RapierContext>,
map: Res<Map>,
indicator: Res<IndicatorCube>,
mut build_queue: ResMut<BuildQueue>,
next_state: ResMut<NextState<GameplayState>>,
) {
let win = window.single();
let (cam_transform, camera) = cam_query.single();
@@ -53,16 +65,29 @@ fn hq_placement(
let contact_point = cam_ray.get_point(dist);
let contact_coord = HexCoord::from_world_pos(contact_point);
let positions = map.hex_select(&contact_coord, 3, true, |pos, h, _| pos.to_world(h));
for p in positions {
commands.spawn((
PbrBundle {
mesh: indicator.0.clone(),
material: indicator.1.clone(),
transform: Transform::from_translation(p),
..default()
},
Despawn,
));
show_indicators(positions, &mut commands, &indicator);
if mouse.just_pressed(MouseButton::Left) {
build_queue.queue.push(QueueEntry {
building: 0.into(),
pos: contact_coord,
});
}
}
}
fn show_indicators(positions: Vec<Vec3>, commands: &mut Commands, indicator: &IndicatorCube) {
for p in positions {
commands.spawn((
PbrBundle {
mesh: indicator.0.clone(),
material: indicator.1.clone(),
transform: Transform::from_translation(p),
..default()
},
Despawn,
));
}
}
fn process_build_queue(mut queue: ResMut<BuildQueue>) {}