void rb::R2DGame::RegisterNewGameObject(GameObject& gameObject) { //Debug::Log("Register new go"); assert(&gameObject && !gameObject.destroyed && "GameObject is null or destroyed"); for (auto& script : gameObject.GetScripts()) { script->currentScene = currentScene; //Debug::Log("Add Script: script ref count: " + ToString(script.use_count())); } gameObject.Init(); if (gameObject.GetRenderer()) { if (gameObject.GetAnimator()) { gameObject.GetRenderer()->EnableAnimation(); } engine->GetRenderEngine()->AddNewRenderer(gameObject.GetRenderer()); } if (gameObject.GetRigidbody()) { engine->GetPhysicsEngine()->AddNewRigidbody(gameObject.GetRigidbody()); } if (gameObject.GetCollider()) { engine->GetPhysicsEngine()->AddNewCollider(gameObject.GetCollider()); } }
void Game::CheckCollisions() { bool collision = false; for (std::list<GameObject*>::iterator mineIterator = this->m_Mines->GetListBegin(); mineIterator != this->m_Mines->GetListEnd(); collision = false) { GameObject* mine = *mineIterator; for (std::list<GameObject*>::iterator bulletIterator = this->m_Bullets->GetListBegin(); bulletIterator != this->m_Bullets->GetListEnd();) { GameObject* bullet = *bulletIterator; if (Game::CheckCircleCircleCollision(dynamic_cast<CircleCollider*>(bullet->GetCollider()), dynamic_cast<CircleCollider*>(mine->GetCollider()))) { bulletIterator = this->m_Bullets->NotifyCollision(bulletIterator); mineIterator = this->m_Mines->NotifyCollision(mineIterator); this->m_Score->IncrementScore(); collision = true; break; } else { bulletIterator++; } } if (!collision) { if (Game::CheckCircleRectangleCollision(dynamic_cast<BoxCollider*>(this->m_Fighter->GetCollider()), dynamic_cast<CircleCollider*>(mine->GetCollider()))) { mineIterator = this->m_Mines->NotifyCollision(mineIterator); this->m_HealthManager->DecrementHealth(); } else { mineIterator++; } } } }