From 1d7de54990c953c9440f0752e84ef6cd21ba0ec3 Mon Sep 17 00:00:00 2001 From: jacopograndi Date: Tue, 21 Jun 2022 23:15:44 +0200 Subject: collisions --- src/main.rs | 106 +++++++++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 95 insertions(+), 11 deletions(-) (limited to 'src') diff --git a/src/main.rs b/src/main.rs index cdb19d1..a3190bb 100644 --- a/src/main.rs +++ b/src/main.rs @@ -8,7 +8,13 @@ use std::io::BufReader; use bevy_inspector_egui::Inspectable; -use bevy::{prelude::*, sprite::MaterialMesh2dBundle, render::camera::ScalingMode}; +use bevy::{ + prelude::*, + sprite::{MaterialMesh2dBundle, collide_aabb::collide}, + render::camera::ScalingMode, + ecs::system::EntityCommands, + math::Vec3Swizzles +}; use bevy::diagnostic::{FrameTimeDiagnosticsPlugin, LogDiagnosticsPlugin}; @@ -44,24 +50,72 @@ fn camera_follow( #[derive(Component, Inspectable)] pub struct Player; +#[derive(Component, Clone)] +pub struct Collider { + speed_mul: f32, + height: bool, +} + +fn wall_collision_check( + target_player_pos: Vec3, + wall_query: &Query<(&Transform, &Collider), + (With, Without)>, +) -> Option { + for (wall_transform, collider) in wall_query.iter() { + let collision = collide( + target_player_pos, + Vec2::splat(0.03), + wall_transform.translation, + wall_transform.scale.xy() + ); + if collision.is_some() { + return Some(collider.clone()); + } + } + None +} + fn movement ( mut player_query: Query<(&Player, &mut Transform)>, + wall_query: Query<(&Transform, &Collider), + (With, Without)>, keyboard: Res>, time: Res