Ajout de fonctions pour le "coarse test" de la collision
This commit is contained in:
parent
4cc2bfa197
commit
8b8102eeb0
|
@ -29,6 +29,11 @@ public:
|
||||||
*/
|
*/
|
||||||
void draw(sf::RenderWindow& window);
|
void draw(sf::RenderWindow& window);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Récupère la boîte englobante de l'objet
|
||||||
|
*/
|
||||||
|
std::unique_ptr<sf::FloatRect> getAABB();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Détermine la couche d'affichage de l'objet
|
* Détermine la couche d'affichage de l'objet
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -29,6 +29,11 @@ public:
|
||||||
*/
|
*/
|
||||||
void update(EngineState& state);
|
void update(EngineState& state);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Récupère la boîte englobante de l'objet
|
||||||
|
*/
|
||||||
|
std::unique_ptr<sf::FloatRect> getAABB();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Détermine la couche d'affichage de l'objet
|
* Détermine la couche d'affichage de l'objet
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
#define __PTF_OBJECT_HPP__
|
#define __PTF_OBJECT_HPP__
|
||||||
|
|
||||||
#include <SFML/Graphics.hpp>
|
#include <SFML/Graphics.hpp>
|
||||||
|
#include <memory>
|
||||||
#include "engine_state.hpp"
|
#include "engine_state.hpp"
|
||||||
|
|
||||||
class Object {
|
class Object {
|
||||||
|
@ -24,6 +25,11 @@ public:
|
||||||
*/
|
*/
|
||||||
virtual void update(EngineState& state) = 0;
|
virtual void update(EngineState& state) = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Récupère la boîte englobante de l'objet
|
||||||
|
*/
|
||||||
|
virtual std::unique_ptr<sf::FloatRect> getAABB() = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Détermine la couche d'affichage de l'objet
|
* Détermine la couche d'affichage de l'objet
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -14,6 +14,14 @@ void Ball::draw(sf::RenderWindow& window) {
|
||||||
window.draw(shape);
|
window.draw(shape);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::unique_ptr<sf::FloatRect> Ball::getAABB() {
|
||||||
|
return std::unique_ptr<sf::FloatRect>(new sf::FloatRect(
|
||||||
|
position.x - 10 * mass,
|
||||||
|
position.y - 10 * mass,
|
||||||
|
20 * mass, 20 * mass
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
sf::Vector2f Ball::getForces(EngineState& state) {
|
sf::Vector2f Ball::getForces(EngineState& state) {
|
||||||
sf::Vector2f forces = PhysicsObject::getForces(state);
|
sf::Vector2f forces = PhysicsObject::getForces(state);
|
||||||
|
|
||||||
|
|
|
@ -23,3 +23,11 @@ void Block::draw(sf::RenderWindow& window) {
|
||||||
void Block::update(EngineState& state) {
|
void Block::update(EngineState& state) {
|
||||||
// rien à mettre à jour
|
// rien à mettre à jour
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::unique_ptr<sf::FloatRect> Block::getAABB() {
|
||||||
|
return std::unique_ptr<sf::FloatRect>(new sf::FloatRect(
|
||||||
|
position.x - Block::GRID / 2,
|
||||||
|
position.y - Block::GRID / 2,
|
||||||
|
Block::GRID, Block::GRID
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
|
@ -48,6 +48,24 @@ void Engine::update() {
|
||||||
for (unsigned int i = 0; i < state.objects.size(); i++) {
|
for (unsigned int i = 0; i < state.objects.size(); i++) {
|
||||||
state.objects[i]->update(state);
|
state.objects[i]->update(state);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// collisions entre objets
|
||||||
|
for (unsigned int i = 0; i < state.objects.size(); i++) {
|
||||||
|
Object* objA = state.objects[i];
|
||||||
|
|
||||||
|
for (unsigned int j = i + 1; j < state.objects.size(); j++) {
|
||||||
|
Object* objB = state.objects[j];
|
||||||
|
|
||||||
|
// vérifie si on a un risque de collision
|
||||||
|
if (objA->getAABB()->intersects(*objB->getAABB())) {
|
||||||
|
// TODO: gestion de la collision =>
|
||||||
|
// calcul de la normale
|
||||||
|
// calcul de la profondeur du choc
|
||||||
|
// si profondeur > 0 :
|
||||||
|
// résolution de la collision
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Engine::draw() {
|
void Engine::draw() {
|
||||||
|
|
Loading…
Reference in New Issue