46 class CollisionDetector;
51 struct QuadTreeObject {
53 QuadTreeObject * next;
56 QuadTreeObject(QuadTreeObject * next_, Sprite * sprite_)
57 : owner(nullptr), next(next_), sprite(sprite_)
63 #define QUADTREE_LEVEL_SPLIT_THRESHOLD 3 66 enum QuadTreeQuadrant {
75 typedef void (*CollisionDetectionCallback)(
void * callbackObj, Sprite * spriteA, Sprite * spriteB, Point collisionPoint);
82 QuadTree(CollisionDetector * collisionDetector, QuadTree * parent, QuadTreeQuadrant quadrant,
int x,
int y,
int width,
int height);
84 void insert(QuadTreeObject *
object);
86 static void remove(QuadTreeObject * object);
90 QuadTreeObject * detectCollision(QuadTreeObject *
object, CollisionDetectionCallback callbackFunc =
nullptr,
void * callbackObj =
nullptr);
94 void detachFromParent();
96 static void update(QuadTreeObject *
object);
100 QuadTreeQuadrant getQuadrant(QuadTreeObject *
object);
101 void createQuadrant(QuadTreeQuadrant quadrant);
102 bool objectsIntersect(QuadTreeObject * objectA, QuadTreeObject * objectB);
103 bool objectIntersectsQuadTree(QuadTreeObject *
object, QuadTree * quadTree);
104 bool checkMaskCollision(QuadTreeObject * objectA, QuadTreeObject * objectB, Point * collisionPoint);
106 static bool objectInRect(QuadTreeObject *
object,
int x,
int y,
int width,
int height);
108 CollisionDetector * m_collisionDetector;
110 QuadTreeQuadrant m_quadrant;
115 QuadTreeObject * m_objects;
117 QuadTree * m_children[4];
131 friend class QuadTree;
228 QuadTree * initEmptyQuadTree(QuadTree * parent, QuadTreeQuadrant quadrant,
int x,
int y,
int width,
int height);
231 QuadTree * m_rootQuadTree;
232 QuadTree * m_quadTreePool;
233 int m_quadTreePoolSize;
234 QuadTreeObject * m_objectPool;
235 int m_objectPoolSize;
Represents a sprite.
Definition: vgacontroller.h:436
Sprite * updateAndDetectCollision(Sprite *sprite, bool removeCollidingSprites=true)
Updates collision detector and detect collision with the specified sprite.
Definition: collisiondetector.cpp:428
This file contains fabgl::VGAControllerClass definition and the VGAController instance.
CollisionDetector(int maxObjectsCount, int width, int height)
Creates an instance of CollisionDetector.
Definition: collisiondetector.cpp:324
A class to detect sprites collisions.
Definition: collisiondetector.h:129
void update(Sprite *sprite)
Updates collision detector.
Definition: collisiondetector.cpp:422
Definition: canvas.cpp:47
Sprite * detectCollision(Sprite *sprite, bool removeCollidingSprites=true)
Detects first collision with the specified sprite.
Definition: collisiondetector.cpp:403
This file contains FabGL library configuration settings, like number of supported colors...
void addSprite(Sprite *sprite)
Adds the specified sprite to collision detector.
Definition: collisiondetector.cpp:373
void removeSprite(Sprite *sprite)
Removes the specified sprite from collision detector.
Definition: collisiondetector.cpp:388