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); }