ajout du programme
This commit is contained in:
88
src/collision.rs
Normal file
88
src/collision.rs
Normal file
@@ -0,0 +1,88 @@
|
||||
use bevy::prelude::*;
|
||||
|
||||
/*
|
||||
|
||||
on enumere les differents type de collision (il en existe un nombre fini de type)
|
||||
et on implement une fonction pour creer une variable capable de stocker un type de collision
|
||||
|
||||
*/
|
||||
|
||||
enum Collision {
|
||||
No,
|
||||
Food,
|
||||
Body,
|
||||
Border,
|
||||
}
|
||||
|
||||
impl Collision {
|
||||
fn new() -> Self {
|
||||
Collision::No
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
Systeme de collision entre les differentes entites
|
||||
|
||||
*/
|
||||
|
||||
fn collision_checker(
|
||||
head_query: Query<&GridPosition, With<Head>>,
|
||||
body_query: Query<&GridPosition, With<Body>>,
|
||||
food_query: Query<&GridPosition, With<Food>>,
|
||||
) -> Collision {
|
||||
let mut collision_type = Collision::new();
|
||||
if food_collision(head_query, food_query) {
|
||||
collision_type = Collision::Food;
|
||||
}
|
||||
if body_collision(head_query, body_query) {
|
||||
collision_type = Collision::Body;
|
||||
}
|
||||
if border_collision(head_query) {
|
||||
collision_type = Collision::Border;
|
||||
}
|
||||
collision_type
|
||||
}
|
||||
|
||||
fn food_collision(
|
||||
head_query: Query<&GridPosition, With<Head>>,
|
||||
food_query: Query<&GridPosition, With<Food>>,
|
||||
) -> bool {
|
||||
// on balaie parmis les entites qui possedent le composant food (ici un seul) pour tester la collision
|
||||
for food in &food_query {
|
||||
for head in &head_query {
|
||||
if head.x == food.x && head.y == food.y {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn body_collision(
|
||||
head_query: Query<&GridPosition, With<Head>>,
|
||||
body_query: Query<&GridPosition, With<Body>>,
|
||||
) -> bool {
|
||||
// on balaie parmis les entites qui possedent le composant body pour tester la collision
|
||||
for body in &body_query {
|
||||
for head in &head_query {
|
||||
if body.x == head.x && body.y == head.y {
|
||||
// on modifie la valeur retournee par la fonction pour correspondre au type d'entite rencontree
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn border_collision(head_query: Query<&GridPosition, With<Head>>) -> bool {
|
||||
// teste la position du composant head pour voir si celui-ci sort de la grille
|
||||
for head in &head_query {
|
||||
if head.x > 190 || head.x < -190 {
|
||||
// on modifie la valeur retournee par la fonction pour correspondre au type de collision rencontree
|
||||
return true;
|
||||
}
|
||||
if head.y > 190 || head.y < -190 {
|
||||
// on modifie la valeur retournee par la fonction pour correspondre au type de collision rencontree
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user