Esempio n. 1
0
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());
	}
}
Esempio n. 2
0
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++;
			}
		}
	}
}