// Obtiene el objeto en una posicion indicada. Solo objetos registrados con collider GameObject* CollisionManager::getGameObjectIn( Vector2d position ) { for(std::size_t i = 0; i < colliderAlliesList.size(); i++) { Vector2d direction = position - colliderAlliesList[i]->getGameObject()->position; float distance = direction.getSqrLength(); if(distance <= colliderAlliesList[i]->getSqrCollisionRadius()) { return colliderAlliesList[i]->getGameObject(); } } for(std::size_t i = 0; i < colliderEnemyList.size(); i++) { Vector2d direction = position - colliderEnemyList[i]->getGameObject()->position; float distance = direction.getSqrLength(); if(distance <= colliderEnemyList[i]->getSqrCollisionRadius()) { return colliderEnemyList[i]->getGameObject(); } } return NULL; }
// Comprueba colision entre Vision y Collider. Un objeto entra en la vision de otro void CollisionManager::checkVisionBetween (ComponentVision* visionCollider, ComponentCollider* targetCollider) { //Optimizaciones de memoria GameObject *targetGameObject = targetCollider->getGameObject(); if(targetGameObject->isDead()) { return; } // Distancia entre los objetos Vector2d direction = targetGameObject->position - visionCollider->getGameObject()->position; float distance = direction.getSqrLength(); float sqrVisionRadius = visionCollider->getSqrVisionRadius(); float sqrTargetRadius = targetCollider->getSqrCollisionRadius(); // Dentro de vision if(distance <= sqrVisionRadius + sqrTargetRadius) { Collision collision; collision.collider = targetGameObject; collision.direction = direction; visionCollider->onVision(collision); } }