|
@@ -13,6 +13,8 @@
|
|
|
#include <ECS.h>
|
|
|
#include <Logger.h>
|
|
|
|
|
|
+#include <SDL.h>
|
|
|
+
|
|
|
#include <Components/Transform.h>
|
|
|
#include <Components/BoxCollider.h>
|
|
|
|
|
@@ -46,22 +48,61 @@ public:
|
|
|
void update()
|
|
|
{
|
|
|
auto entities = this->getSystemEntities();
|
|
|
+ for(auto entity: entities)
|
|
|
+ {
|
|
|
+ auto &collider = entity.getComponent<BoxColliderComponent>();
|
|
|
+ collider.isColliding = false;
|
|
|
+ collider.collidingList.clear();
|
|
|
+ }
|
|
|
for(auto i = entities.begin(); i != entities.end(); i++)
|
|
|
{
|
|
|
for(auto j = (i + 1); j != entities.end(); j++)
|
|
|
{
|
|
|
- BoxRect boxA = BoxRect(i->getComponent<TransformComponent>(),
|
|
|
- i->getComponent<BoxColliderComponent>());
|
|
|
- BoxRect boxB = BoxRect(j->getComponent<TransformComponent>(),
|
|
|
- j->getComponent<BoxColliderComponent>());
|
|
|
+ auto &collideA = i->getComponent<BoxColliderComponent>();
|
|
|
+ auto &collideB = j->getComponent<BoxColliderComponent>();
|
|
|
+
|
|
|
+ BoxRect boxA = BoxRect(i->getComponent<TransformComponent>(), collideA);
|
|
|
+ BoxRect boxB = BoxRect(j->getComponent<TransformComponent>(), collideB);
|
|
|
|
|
|
if (boxA.collideWith(boxB))
|
|
|
{
|
|
|
Logger::Debug("Entity #%d collided with #%d!", i->getId(), j->getId());
|
|
|
+ collideB.isColliding = true;
|
|
|
+ collideA.isColliding = true;
|
|
|
+ collideA.collidingList.push_back(*j);
|
|
|
+ collideB.collidingList.push_back(*i);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ void debugRender(SDL_Renderer *renderer)
|
|
|
+ {
|
|
|
+ for(auto entity: this->getSystemEntities())
|
|
|
+ {
|
|
|
+ auto collider = entity.getComponent<BoxColliderComponent>();
|
|
|
+ auto transform = entity.getComponent<TransformComponent>();
|
|
|
+
|
|
|
+ SDL_Rect rect;
|
|
|
+ rect.x = static_cast<int>(transform.position.x + collider.offset.x);
|
|
|
+ rect.y = static_cast<int>(transform.position.y + collider.offset.y);
|
|
|
+ rect.w = static_cast<int>(collider.width);
|
|
|
+ rect.h = static_cast<int>(collider.height);
|
|
|
+
|
|
|
+ if (collider.isColliding)
|
|
|
+ {
|
|
|
+ SDL_SetRenderDrawColor(renderer, 255, 64, 16, 255);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ SDL_SetRenderDrawColor(renderer, 64, 255, 21, 255);
|
|
|
+ }
|
|
|
+
|
|
|
+ SDL_RenderDrawRect(renderer, &rect);
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
};
|
|
|
|
|
|
#endif /* GAMEENGINE_COLLISION_H */
|