Exemplo n.º 1
0
bool CGamePlayState::update(float dtime)
{
	
	m_enemyTime -= dtime;
	if (m_enemyCount > 0.f && m_enemyTime <= 0.f)
	{
		m_enemyTime = 2.f;
		m_enemyId++;
		// Create new enemy
		CGameObject* enemy = new CGameObject();
		if (m_enemyId == 1) {
			enemy->setPosition(glm::vec3(-50.f, 30.f, 50.f));
			enemy->setRotation(glm::vec3(0.f));
			enemy->setScale(glm::vec3(0.5f));
			enemy->addController(std::make_shared<CRestrictPositionController>(glm::vec2(-100.f, -100.f), glm::vec2(100.f, 100.f)));
			enemy->addController(std::make_shared<CLinearMovementController>(enemy->getForward(), 15.f));
			enemy->addController(std::make_shared<CHealthController>(100.f));
			enemy->addController(std::make_shared<CRemoveOnDeathController>(this));
		}

		if (m_enemyId == 2) {
			enemy->setPosition(glm::vec3(0.f, 45.f, -50.f));
			enemy->setRotation(glm::vec3(0.f));
			enemy->setScale(glm::vec3(0.5f));
			enemy->addController(std::make_shared<CRestrictPositionController>(glm::vec2(-100.f, -100.f), glm::vec2(100.f, 100.f)));
			enemy->addController(std::make_shared<CLinearMovementController>(enemy->getForward(), 15.f));
			enemy->addController(std::make_shared<CHealthController>(100.f));
			enemy->addController(std::make_shared<CRemoveOnDeathController>(this));
		}

		if (m_enemyId == 3) {
			enemy->setPosition(glm::vec3(50.f, 20.f, 0.f));
			enemy->setRotation(glm::vec3(0.f));
			enemy->setScale(glm::vec3(0.5f));
			enemy->addController(std::make_shared<CRestrictPositionController>(glm::vec2(-100.f, -100.f), glm::vec2(100.f, 100.f)));
			enemy->addController(std::make_shared<CLinearMovementController>(enemy->getForward(), 15.f));
			enemy->addController(std::make_shared<CHealthController>(100.f));
			enemy->addController(std::make_shared<CRemoveOnDeathController>(this));
		}

		if (m_enemyId == 4) {
			enemy->setPosition(glm::vec3(50.f, 25.f, 0.f));
			enemy->setRotation(glm::vec3(0.f, 92.6,0.f));
			enemy->setScale(glm::vec3(0.5f));
			enemy->addController(std::make_shared<CRestrictPositionController>(glm::vec2(-100.f, -100.f), glm::vec2(100.f, 100.f)));
			enemy->addController(std::make_shared<CSimpleWaypointController>(glm::vec3(-101.f, 25.f, 0.f), 15.f, this));
			enemy->addController(std::make_shared<CHealthController>(100.f));
			enemy->addController(std::make_shared<CRemoveOnDeathController>(this));
		}
		
		if (m_enemyId == 5) {
			enemy->setPosition(glm::vec3(0.f, 40.f, -50.f));
			enemy->setRotation(glm::vec3(0.f, 92.6, 0.f));
			enemy->setScale(glm::vec3(0.5f));
			enemy->addController(std::make_shared<CRestrictPositionController>(glm::vec2(-100.f, -100.f), glm::vec2(100.f, 100.f)));
			enemy->addController(std::make_shared<CSimpleWaypointController>(glm::vec3(-101.f, 40.f, -50.f), 15.f, this));
			enemy->addController(std::make_shared<CHealthController>(100.f));
			enemy->addController(std::make_shared<CRemoveOnDeathController>(this));
		}
		
		if (m_enemyId == 6) {
			enemy->setPosition(glm::vec3(-50.f, 50.f, 50.f));
			enemy->setRotation(glm::vec3(0.f, 92.6, 0.f));
			enemy->setScale(glm::vec3(0.5f));
			enemy->addController(std::make_shared<CRestrictPositionController>(glm::vec2(-100.f, -100.f), glm::vec2(100.f, 100.f)));
			enemy->addController(std::make_shared<CSimpleWaypointController>(glm::vec3(-101.f, 50.f, 50.f), 15.f, this));
			enemy->addController(std::make_shared<CHealthController>(100.f));
			enemy->addController(std::make_shared<CRemoveOnDeathController>(this));
		}
		
		// Player collidable added to player collision group
		std::vector<float> enemyVertices;
		std::vector<unsigned int> enemyIndices;
		std::vector<float> enemyNormals;
		std::vector<float> enemyUvs;
		EPrimitiveType enemyType;
		m_resourceManager->getMesh(enemyShip, enemyVertices, enemyIndices, enemyNormals, enemyUvs, enemyType);
		enemy->setCollidable(m_collisionSystem->add(CAABBox::create(enemyVertices), m_enemyGroup));

		// Create scene object
		CSceneObjectProxy* enemySceneObject = new CSceneObjectProxy(m_scene, m_scene->createObject(enemyShip, enemyShipMaterial, glm::vec3(m_enemyXPosition, 25.f, 0.f), glm::quat(0.f, 0.f, 0.f, 0.f), glm::vec3(0.5f)));
		enemy->setSceneObject(enemySceneObject);

        // Add enemy
		getGameWorld().addObject(enemy);

		m_enemyCount -= 1;
		m_enemyXPosition += 25.f;
	}

	
	m_ring->setRotation(glm::vec3(m_ring->getRotation().x, m_ring->getRotation().y, m_ring->getRotation().z + dtime));
	

	if (m_inputProvider->isKeyPressed(GLFW_KEY_P))
	{
		return false;
	}
	if (m_inputProvider->isKeyPressed(GLFW_KEY_O))
	{
		m_winCounter = 6;
		return false;
	}
	if (m_winCounter == 6) {
		return false;
	}

	if (m_inputProvider->isKeyPressed(GLFW_KEY_K)) {
		m_camera->getFeatureInfoForWrite().toonActive = true;
	}
	if (m_inputProvider->isKeyPressed(GLFW_KEY_L)) {
		m_camera->getFeatureInfoForWrite().toonActive = false;
	}
	// Update collision system
	m_collisionSystem->update();
	// Update gameworld
	return AGameState::update(dtime);
}