#include "GestionCollision.h" #include #include #include "MobsCorpACorpIA.h" GestionCollision::GestionCollision(GestionMobs* m, GestionPlayer* p, GestionTerrain* t) : gMobs(m), gPlayer(p), gTerrain(t) { } /** * Test des collisions entre les entités et le sol */ void GestionCollision::CheckCollisonSol() { Vector2 posPlayer = gPlayer->get_transform().get_origin(); Vector2 taille_Player = ((Sprite*)gPlayer->get_children()[0])->get_texture().ptr()->get_size(); bool player_touch_temp = false; for (StaticBody2D* elem : gTerrain->elems_terrains) { //Récuperation des données de position de l'elem Vector2 posTerrain = elem->get_transform().get_origin(); Vector2 taille_Sol = ((Sprite*)elem->get_children()[0])->get_texture().ptr()->get_size(); //Test collision avec le sol et le player if (!player_touch_temp) // Si player ne touche pas encore if (posTerrain.y - (taille_Sol.y) < posPlayer.y && posTerrain.y > posPlayer.y && posTerrain.x - (taille_Sol.x / 2) < posPlayer.x + taille_Player.x / 4 && posTerrain.x + (taille_Sol.x / 2) > posPlayer.x - taille_Player.x / 4) //Test de si touche player_touch_temp = true; //Test collision de chaque mobs avec le sol for (KinematicBody2D* m : gMobs->mobs) { Vector2 pos = m->get_transform().get_origin(); Vector2 size = ((Sprite*)elem->get_children()[0])->get_texture().ptr()->get_size(); MobsCorpACorpIA* m_cast = (MobsCorpACorpIA*) m; if (posTerrain.y - (taille_Sol.y) < pos.y && posTerrain.y > pos.y && posTerrain.x - (taille_Sol.x / 2) < pos.x + size.x / 4 && posTerrain.x + (taille_Sol.x / 2) > pos.x - size.x / 4) { Godot::print("Mob touche"); m_cast->on_ground = true; } } } gPlayer->on_ground = player_touch_temp; } /** * Test des collisions entre les entités et les murs */ void GestionCollision::CheckCollisonMur() { } /** * Test des collisions entre les entités et les plafonds */ void GestionCollision::CheckCollisonToit() { }