From 806b37890d00f17695014e3d18a77b3c752e9d14 Mon Sep 17 00:00:00 2001 From: Amaury Date: Mon, 4 May 2020 15:18:20 +0200 Subject: [PATCH] Ajout commentaires et destructeurs --- .../GestionCollision.cpp | 74 +++++++++++-------- .../DungeonAndDemaonScript/GestionCollision.h | 9 ++- .../DungeonAndDemaonScript/GestionTerrain.cpp | 35 ++++++++- .../DungeonAndDemaonScript/GestionTerrain.h | 3 + 4 files changed, 85 insertions(+), 36 deletions(-) diff --git a/DungeonAndDeamonScript/DungeonAndDemaonScript/GestionCollision.cpp b/DungeonAndDeamonScript/DungeonAndDemaonScript/GestionCollision.cpp index 29348e2..c4da3a4 100644 --- a/DungeonAndDeamonScript/DungeonAndDemaonScript/GestionCollision.cpp +++ b/DungeonAndDeamonScript/DungeonAndDemaonScript/GestionCollision.cpp @@ -3,56 +3,68 @@ #include #include +#include "MobsCorpACorpIA.h" + GestionCollision::GestionCollision(GestionMobs* m, GestionPlayer* p, GestionTerrain* t) : gMobs(m), gPlayer(p), gTerrain(t) { } -std::vector GestionCollision::CheckCollisonSol() -{ - std::vector mobs_collision; - /*for (MobsIA* m : gMobs->mobs) - { - Vector2 pos = m->get_transform().get_origin(); - Vector2 size = m->get_transform().get_scale(); - for (StaticBody2D* elem : gTerrain->elems_terrains) - { - if (elem->get_transform().get_origin().y > pos.x) { - Godot::print("Mob touche"); - mobs_collision.push_back(m); - } - } - }*/ - +/** + * 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 = false; + 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) < 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) { - - player_touch = true; - break; + + 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; - - return mobs_collision; + gPlayer->on_ground = player_touch_temp; } -std::vector GestionCollision::CheckCollisonMur() +/** + * Test des collisions entre les entités et les murs + */ +void GestionCollision::CheckCollisonMur() { - return std::vector(); } -std::vector GestionCollision::CheckCollisonToit() +/** + * Test des collisions entre les entités et les plafonds + */ +void GestionCollision::CheckCollisonToit() { - return std::vector(); } diff --git a/DungeonAndDeamonScript/DungeonAndDemaonScript/GestionCollision.h b/DungeonAndDeamonScript/DungeonAndDemaonScript/GestionCollision.h index 1f794a1..7e94741 100644 --- a/DungeonAndDeamonScript/DungeonAndDemaonScript/GestionCollision.h +++ b/DungeonAndDeamonScript/DungeonAndDemaonScript/GestionCollision.h @@ -7,6 +7,9 @@ using namespace godot; +/** + * Classe permettant la gestion des collisions entr eles divers objets composant le jeu + */ class GestionCollision { public : @@ -17,8 +20,8 @@ public : public: GestionCollision(GestionMobs* m, GestionPlayer* p, GestionTerrain* t); - std::vector CheckCollisonSol(); - std::vector CheckCollisonMur(); - std::vector CheckCollisonToit(); + void CheckCollisonSol(); + void CheckCollisonMur(); + void CheckCollisonToit(); }; diff --git a/DungeonAndDeamonScript/DungeonAndDemaonScript/GestionTerrain.cpp b/DungeonAndDeamonScript/DungeonAndDemaonScript/GestionTerrain.cpp index a7aa0be..9b164b6 100644 --- a/DungeonAndDeamonScript/DungeonAndDemaonScript/GestionTerrain.cpp +++ b/DungeonAndDeamonScript/DungeonAndDemaonScript/GestionTerrain.cpp @@ -8,11 +8,16 @@ using namespace godot; GestionTerrain::GestionTerrain() { - Godot::print("Constructeur Terrain"); + //Godot::print("Constructeur Terrain"); } GestionTerrain::~GestionTerrain() { + Array childrens = this->get_children(); + for (int i = 0; i < childrens.size(); i++) + { + ((Node*)childrens[i])->queue_free(); + } } void GestionTerrain::_register_methods() @@ -34,12 +39,25 @@ void GestionTerrain::_init() void GestionTerrain::_ready() { } - +/** + * Permet l'ajout de murs + * Position dans la largeur + * Position dans la hauteur + * Echelle en largeur + * + */ void GestionTerrain::AjoutMur(float sizeX, float sizeY, float posX, float posY) { } +/** + * Permet l'ajout de sols + * Position dans la largeur + * Position dans la hauteur + * Echelle en largeur + * + */ void GestionTerrain::AjoutSolSolide(float sizeX, float sizeY, float posX, float posY) { Godot::print("Ajout sol solide"); @@ -69,14 +87,27 @@ void GestionTerrain::AjoutSolSolide(float sizeX, float sizeY, float posX, float elems_terrains.push_back(m); } +/** + * Permet l'ajout de sols traversables + * Position dans la largeur + * Position dans la hauteur + * Echelle en largeur + * + */ void GestionTerrain::AjoutSolTraversable(float sizeX, float sizeY, float posX, float posY) { } +/** + * Permet la suppression de tous les elements du terrains + */ void GestionTerrain::SuppressionTout() { } +/** + * Permet une génération de base des éléments du terrains + */ void GestionTerrain::GenerationCarte() { AjoutSolSolide(1, 1, 85, 300); diff --git a/DungeonAndDeamonScript/DungeonAndDemaonScript/GestionTerrain.h b/DungeonAndDeamonScript/DungeonAndDemaonScript/GestionTerrain.h index 3459186..6a3a528 100644 --- a/DungeonAndDeamonScript/DungeonAndDemaonScript/GestionTerrain.h +++ b/DungeonAndDeamonScript/DungeonAndDemaonScript/GestionTerrain.h @@ -8,6 +8,9 @@ using namespace godot; +/** + * + */ class GestionTerrain : public TileMap { private: