use bevy states

despawn plugin
buiding plugin
This commit is contained in:
2024-06-05 22:00:00 -04:00
parent c31c2fb908
commit 05f9fa3143
20 changed files with 296 additions and 54 deletions

13
game/shared/Cargo.toml Normal file
View File

@@ -0,0 +1,13 @@
[package]
name = "shared"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
bevy = "0.13.2"
[features]
tracing = []

View File

@@ -0,0 +1,47 @@
use crate::states::GameState;
use bevy::prelude::*;
pub struct DespawnPuglin;
#[derive(Component)]
pub struct DespawnAt(f32);
#[derive(Component)]
pub struct DespawnAfter(Timer);
#[derive(Component)]
pub struct Despawn;
impl Plugin for DespawnPuglin {
fn build(&self, app: &mut App) {
app.add_systems(PostUpdate, despawn_at);
app.add_systems(
PreUpdate,
(despawn, despawn_after).run_if(not(in_state(GameState::Paused))),
);
}
}
fn despawn_at(mut commands: Commands, time: Res<Time>, entities: Query<(Entity, &DespawnAt), Without<DespawnAfter>>) {
for (entity, at) in entities.iter() {
let d = at.0 - time.elapsed_seconds();
commands
.entity(entity)
.insert(DespawnAfter(Timer::from_seconds(d, TimerMode::Once)));
}
}
fn despawn_after(mut commands: Commands, mut entities: Query<(&mut DespawnAfter, Entity)>, time: Res<Time>) {
for (mut after, entity) in &mut entities.iter_mut() {
after.0.tick(time.delta());
if after.0.finished() {
commands.entity(entity).despawn();
}
}
}
fn despawn(mut commands: Commands, entities: Query<Entity, With<Despawn>>) {
for entity in entities.iter() {
commands.entity(entity).despawn();
}
}

3
game/shared/src/lib.rs Normal file
View File

@@ -0,0 +1,3 @@
pub mod despawn;
pub mod states;
pub mod tags;

17
game/shared/src/states.rs Normal file
View File

@@ -0,0 +1,17 @@
use bevy::prelude::*;
#[derive(States, Debug, Clone, PartialEq, Eq, Hash)]
pub enum GameState {
Startup,
MainMenu,
Loading,
Playing,
Paused,
}
#[derive(States, Debug, Clone, PartialEq, Eq, Hash)]
pub enum GameplayState {
Waiting,
PlaceHQ,
Playing,
}

3
game/shared/src/tags.rs Normal file
View File

@@ -0,0 +1,3 @@
use bevy::prelude::*;
#[derive(Component)]
pub struct MainCamera;