Collision

This commit is contained in:
Rendo 2025-11-15 01:52:27 +05:00
commit 7099b8629d
3 changed files with 47 additions and 7 deletions

14
Cargo.lock generated
View file

@ -314,13 +314,6 @@ version = "0.22.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
[[package]]
name = "bevi-practice"
version = "0.1.0"
dependencies = [
"bevy",
]
[[package]] [[package]]
name = "bevy" name = "bevy"
version = "0.17.2" version = "0.17.2"
@ -4094,6 +4087,13 @@ dependencies = [
"serde", "serde",
] ]
[[package]]
name = "spacorium"
version = "0.1.0"
dependencies = [
"bevy",
]
[[package]] [[package]]
name = "spin" name = "spin"
version = "0.10.0" version = "0.10.0"

37
src/collision.rs Normal file
View file

@ -0,0 +1,37 @@
use bevy::prelude::*;
pub struct CollisionPlugin;
impl Plugin for CollisionPlugin {
fn build(&self, app: &mut App) {
app.add_systems(FixedUpdate, calculate_collisions);
}
}
#[derive(Component)]
pub struct Collider(f32);
#[derive(EntityEvent)]
pub struct Collided {
entity: Entity,
with: Entity,
}
fn calculate_collisions(mut commands: Commands, query: Query<(Entity, &Transform, &Collider)>) {
for (first_entity, first_transform, first_collider) in query {
for (second_entity, second_transform, second_collider) in query {
if first_entity == second_entity {
continue;
}
if (second_transform.translation - first_transform.translation).length_squared()
<= (first_collider.0 + second_collider.0) * (first_collider.0 + second_collider.0)
{
commands.trigger(Collided {
entity: first_entity,
with: second_entity,
});
}
}
}
}

View file

@ -1,12 +1,15 @@
use bevy::prelude::*; use bevy::prelude::*;
use crate::collision::CollisionPlugin;
use crate::damagable::DamagablePlugin; use crate::damagable::DamagablePlugin;
mod collision;
mod damagable; mod damagable;
fn main() { fn main() {
App::new() App::new()
.add_plugins(DefaultPlugins) .add_plugins(DefaultPlugins)
.add_plugins(DamagablePlugin) .add_plugins(DamagablePlugin)
.add_plugins(CollisionPlugin)
.run(); .run();
} }