From 50f1135c1e04296c0bfa87e75fcdbdd61ed3147d Mon Sep 17 00:00:00 2001 From: zefad Date: Thu, 17 Sep 2026 19:42:58 +0200 Subject: [PATCH] Collision logic --- src/collision.rs | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/collision.rs b/src/collision.rs index 23270e5..657cf64 100644 --- a/src/collision.rs +++ b/src/collision.rs @@ -1,6 +1,9 @@ use bevy::prelude::*; -use crate::{obstacle::Obstacle, player::Player}; +use crate::{ + obstacle::Obstacle, + player::{Player, move_player}, +}; // Hitbox #[derive(Component)] @@ -8,18 +11,22 @@ pub struct Collider { pub size: Vec2, } +#[derive(Resource, Default)] +pub struct HasCollided(pub bool); + // Check collision with Player fn check_collision( mut player: Single<(&Transform, &Collider, &mut Sprite), With>, obstacle: Query<(&Transform, &Collider), With>, - mut has_collided: Local, + mut has_collided: ResMut, ) { - if *has_collided { + if has_collided.0 { return; } let (player_transform, player_collider, mut player_sprite) = player.into_inner(); + // Check whether or not each obstacles overlap the player for (collider_transform, collider_collider) in obstacle { if overlap( player_transform.translation.truncate(), @@ -27,9 +34,9 @@ fn check_collision( collider_transform.translation.truncate(), collider_collider.size / 2.0, ) { - println!("Collision!!!!!!!"); + // println!("Collision!!!!!!!"); player_sprite.color = Color::srgb(1.0, 0.0, 0.0); - *has_collided = true; + has_collided.0 = true; break; } } @@ -46,6 +53,7 @@ pub struct CollisionPlugin; impl Plugin for CollisionPlugin { fn build(&self, app: &mut App) { - app.add_systems(Update, check_collision); + app.init_resource::() + .add_systems(Update, check_collision.after(move_player)); } }