#include "components/ColliderComponent.hpp" #include "Entity.hpp" #include "components/TransformComponent.hpp" void ColliderComponent::Setup() {} void ColliderComponent::EmitCollision(Entity &other) { for (auto &callback : onCollision) { callback(other); } } void ColliderComponent::AddCollisionListener(std::function callback) { onCollision.push_back(std::move(callback)); } void ColliderComponent::Update(float) { if (!monitoring || !context || !context->entities || entity->queuedForFree) { return; } auto selfTransform = entity->GetComponent(); if (!selfTransform) { return; } for (auto &other : *context->entities) { if (!other || other.get() == entity || other->queuedForFree) { continue; } auto otherCollider = other->GetComponent(); auto otherTransform = other->GetComponent(); if (!otherCollider || !otherTransform || !otherCollider->get().monitorable) { continue; } const float dx = selfTransform->get().x - otherTransform->get().x; const float dy = selfTransform->get().y - otherTransform->get().y; const float r = radius + otherCollider->get().radius; if ((dx * dx + dy * dy) <= (r * r)) { EmitCollision(*other); } } } void ColliderComponent::Cleanup() {}