use bevy states
despawn plugin buiding plugin
This commit is contained in:
13
game/shared/Cargo.toml
Normal file
13
game/shared/Cargo.toml
Normal 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 = []
|
||||
47
game/shared/src/despawn.rs
Normal file
47
game/shared/src/despawn.rs
Normal 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
3
game/shared/src/lib.rs
Normal file
@@ -0,0 +1,3 @@
|
||||
pub mod despawn;
|
||||
pub mod states;
|
||||
pub mod tags;
|
||||
17
game/shared/src/states.rs
Normal file
17
game/shared/src/states.rs
Normal 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
3
game/shared/src/tags.rs
Normal file
@@ -0,0 +1,3 @@
|
||||
use bevy::prelude::*;
|
||||
#[derive(Component)]
|
||||
pub struct MainCamera;
|
||||
Reference in New Issue
Block a user