void SceneManagerCMPlay::AddHEALER(string ID) { //**********// //Healer // //**********// GameObject3D* newModel = new GameObject3D; SceneNode* newNode = new SceneNode; Mesh* drawMesh = resourceManager.retrieveMesh("HEALER_OBJ"); drawMesh->textureID = resourceManager.retrieveTexture("HEALER"); newModel = new GameObject3D; newNode = new SceneNode; newModel->setMesh(drawMesh); newModel->setName(ID); newNode->SetGameObject(newModel); sceneGraph->AddChildNode(newNode); drawMesh = resourceManager.retrieveMesh("HEALER_ROD_OBJ"); drawMesh->textureID = resourceManager.retrieveTexture("WEAPONS"); newModel = new GameObject3D; newNode = new SceneNode; string IDPlus = ID; IDPlus += ROD; IDPlus += ID.back(); newModel->setName(IDPlus); newModel->setMesh(drawMesh); newNode->SetGameObject(newModel); sceneGraph->AddChildToChildNode(ID, newNode); HEALER_COUNT++; TOTAL_COUNT++; }
void SceneManagerCMPlay::AddMAGE(string ID) { //**********// //Mage // //**********// GameObject3D* newModel = new GameObject3D; SceneNode* newNode = new SceneNode; Mesh* drawMesh = resourceManager.retrieveMesh("MAGE_OBJ"); drawMesh->textureID = resourceManager.retrieveTexture("MAGE"); newModel = new GameObject3D; newNode = new SceneNode; newModel->setMesh(drawMesh); newModel->setName(ID); newNode->SetGameObject(newModel); sceneGraph->AddChildNode(newNode); drawMesh = resourceManager.retrieveMesh("MAGE_STAFF_OBJ"); drawMesh->textureID = resourceManager.retrieveTexture("WEAPONS"); newModel = new GameObject3D; newNode = new SceneNode; string IDPlus = ID; IDPlus += STAFF; IDPlus += ID.back(); newModel->setName(IDPlus); newModel->setMesh(drawMesh); newNode->SetGameObject(newModel); sceneGraph->AddChildToChildNode(ID, newNode); MAGE_COUNT++; TOTAL_COUNT++; }
SceneNode* SceneManagerCMPlay::getNode() { GameObject3D* object; SceneNode* node; for (unsigned i = 0; i < nodeList.size(); ++i) { if (!nodeList[i]->getActive()) { //nodeList[i]->CleanUp(); nodeList[i]->setActive(true); //object = new GameObject3D; //nodeList[i]->SetGameObject(object); return nodeList[i]; } } for (int i = 0; i < 50; ++i) { object = new GameObject3D; node = new SceneNode; node->SetGameObject(object); node->setActive(false); nodeList.push_back(node); } SceneNode *lastnode = nodeList.back(); lastnode->setActive(true); return lastnode; }
void SceneManagerCMPlay::AddBOSS(string ID) { //**********// //Boss // //**********// GameObject3D* newModel = new GameObject3D; SceneNode* newNode = new SceneNode; Mesh* drawMesh = resourceManager.retrieveMesh("BOSS_OBJ"); drawMesh->textureID = resourceManager.retrieveTexture("BOSS"); newModel = new GameObject3D; newNode = new SceneNode; newModel->setMesh(drawMesh); newModel->setName(ID); newNode->SetGameObject(newModel); sceneGraph->AddChildNode(newNode); drawMesh = resourceManager.retrieveMesh("BOSS_ARM_OBJ"); drawMesh->textureID = resourceManager.retrieveTexture("BOSS"); newModel = new GameObject3D; newNode = new SceneNode; string IDPlus = ID; IDPlus += RARM; IDPlus += ID.back(); newModel->setName(IDPlus); newModel->setMesh(drawMesh); newNode->SetGameObject(newModel); sceneGraph->AddChildToChildNode(ID, newNode); drawMesh = resourceManager.retrieveMesh("BOSS_ARM_OBJ"); drawMesh->textureID = resourceManager.retrieveTexture("BOSS"); newModel = new GameObject3D; newNode = new SceneNode; IDPlus = ID; IDPlus += LARM; IDPlus += ID.back(); newModel->setName(IDPlus); newModel->setMesh(drawMesh); newNode->SetGameObject(newModel); sceneGraph->AddChildToChildNode(ID, newNode); BOSS_COUNT++; TOTAL_COUNT++; }
void SceneManagerCMPlay::AddTANK(string ID) { //**********// //Warrior // //**********// GameObject3D* newModel = new GameObject3D; SceneNode* newNode = new SceneNode; Mesh* drawMesh = resourceManager.retrieveMesh("WARRIOR_OBJ"); drawMesh->textureID = resourceManager.retrieveTexture("WARRIOR"); newModel->setMesh(drawMesh); newModel->setName(ID); newNode->SetGameObject(newModel); sceneGraph->AddChildNode(newNode); drawMesh = resourceManager.retrieveMesh("WARRIOR_SWORD_OBJ"); drawMesh->textureID = resourceManager.retrieveTexture("WEAPONS"); newModel = new GameObject3D; newNode = new SceneNode; string IDPlus = ID; IDPlus += SWORD; IDPlus += ID.back(); newModel->setName(IDPlus); newModel->setMesh(drawMesh); newNode->SetGameObject(newModel); sceneGraph->AddChildToChildNode(ID, newNode); //drawMesh = resourceManager.retrieveMesh("WARRIOR_SHIELD_OBJ"); //drawMesh->textureID = resourceManager.retrieveTexture("WEAPONS"); newModel = new GameObject3D; newNode = new SceneNode; IDPlus = ID; IDPlus += SHIELD_PIVOT; IDPlus += ID.back(); newModel->setName(IDPlus); //newModel->setMesh(drawMesh); newNode->SetGameObject(newModel); sceneGraph->AddChildToChildNode(ID, newNode); drawMesh = resourceManager.retrieveMesh("WARRIOR_SHIELD_OBJ"); drawMesh->textureID = resourceManager.retrieveTexture("WEAPONS"); newModel = new GameObject3D; newNode = new SceneNode; string theCopy = IDPlus; IDPlus = ID; IDPlus += SHIELD; IDPlus += ID.back(); newModel->setName(IDPlus); newModel->setMesh(drawMesh); newNode->SetGameObject(newModel); sceneGraph->AddChildToChildNode(theCopy, newNode); TANK_COUNT++; TOTAL_COUNT++; }
void SceneManagerCMPlay::Config(string directory) { sceneBranch = TextTree::FileToRead(directory); for (vector<Branch>::iterator branch = sceneBranch.childBranches.begin(); branch != sceneBranch.childBranches.end(); ++branch) { if (branch->branchName == "SpatialPartition") { // create a spatial partition manager if it is not defined if (spatialPartitionManager == NULL) { spatialPartitionManager = new SpatialPartitionManager(); } int type = 0; Vector3 partitionDimension; Vector2 partitionDimension2D; bool numPartitionBased = true; std::cout << "Setting up spatial partitioning" << std::endl; for (vector<Attribute>::iterator attri = branch->attributes.begin(); attri != branch->attributes.end(); ++attri) { Attribute tempAttri = *attri; string attriName = tempAttri.name; string attriValue = tempAttri.value; if (attriName == "Type") { type = stoi(attriValue); } else if (attriName == "WorldStart") { if (type == 3) { stringToVector(attriValue, world3DStart); } else { stringToVector(attriValue, world2DStart); } } else if (attriName == "WorldEnd") { if (type == 3) { stringToVector(attriValue, world3DEnd); } else { stringToVector(attriValue, world2DEnd); } } else if (attriName == "Partitions") { if (type == 3) { stringToVector(attriValue, partitionDimension); } else { stringToVector(attriValue, partitionDimension2D); } } else if (attriName == "PartitionBased") { stringToBool(attriValue, numPartitionBased); } } // 3D spatial partition if (type == 3) { spatialPartitionManager->Init(world3DStart, world3DEnd, partitionDimension, numPartitionBased, resourceManager.retrieveMesh("DEBUG_CUBE")); } // assume its 2D else { spatialPartitionManager->Init(world2DStart, world2DEnd, partitionDimension2D, numPartitionBased, resourceManager.retrieveMesh("DEBUG_QUAD")); } } else if (branch->branchName == "SceneNode") { std::cout << "Creating scenenode container!" << std::endl; for (vector<Attribute>::iterator attri = branch->attributes.begin(); attri != branch->attributes.end(); ++attri) { Attribute tempAttri = *attri; string attriName = tempAttri.name; string attriValue = tempAttri.value; if (attriName == "Container") { GameObject3D* object; SceneNode* node; int containerSize = stoi(tempAttri.value); for (int i = 0; i < containerSize; ++i) { object = new GameObject3D; node = new SceneNode; node->SetGameObject(object); nodeList.push_back(node); } } } } } }
void SceneManagerCMPlay::Update(double dt) { SceneManagerGameplay::Update(dt); //FSMApplication(); //spatialPartitionManager->Update(); spatialPartitionManager->removeNode(dynamicSceneGraph); spatialPartitionManager->addNode(dynamicSceneGraph, this->spatialPartitionManager->type); // loop through partitions for (unsigned i = 0; i < spatialPartitionManager->partitions.size(); ++i) { // check if partitions contain more than 1 node ( can further optimize by checking if contains dynamic nodes) if (spatialPartitionManager->partitions[i]->nodes.size() > 0) { for (vector<SceneNode*>::iterator j = spatialPartitionManager->partitions[i]->nodes.begin(); j != spatialPartitionManager->partitions[i]->nodes.end(); ++j) { SceneNode* firstNode = *j; for (vector<SceneNode*>::iterator k = j + 1; k != spatialPartitionManager->partitions[i]->nodes.end(); ++k) { SceneNode* secondNode = *k; string boxName = ""; if (firstNode->getActive() && secondNode->getActive()) { //Only check if both are not player if (firstNode->GetGameObject()->getName() != "Player" && secondNode->GetGameObject()->getName() != "Player" && firstNode->GetGameObject()->getName() != "LeftHand" && secondNode->GetGameObject()->getName() != "LeftHand" && firstNode->GetGameObject()->getName() != "RightHand" && secondNode->GetGameObject()->getName() != "RightHand") { if (check3DCollision(firstNode->GetGameObject()->getHitbox(), secondNode->GetGameObject()->getHitbox(), boxName)) { if (firstNode->GetGameObject()->getName() == "testprojectile") { //projectileManager.RemoveProjectile(firstNode->GetGameObject()); spatialPartitionManager->removeNode(secondNode); dynamicSceneGraph->RemoveChildNode(secondNode); j = spatialPartitionManager->partitions[i]->nodes.begin(); break; } else if (secondNode->GetGameObject()->getName() == "testprojectile") { //projectileManager.RemoveProjectile(firstNode->GetGameObject()); spatialPartitionManager->removeNode(firstNode); dynamicSceneGraph->RemoveChildNode(firstNode); j = spatialPartitionManager->partitions[i]->nodes.begin(); break; } //Every other thing spatialPartitionManager->removeNode(secondNode); dynamicSceneGraph->RemoveChildNode(secondNode); j = spatialPartitionManager->partitions[i]->nodes.begin(); break; } } } } } } } /*Sound testing related keys*/ if (inputManager->getKey("TEST_SOUND")) { resourceManager.setListenerPosition(tpCamera.getPosition(), tpCamera.getTarget()); static int distance = 2; //distance++; //resourceManager.retrieveSoundas2D("MenuFeedback"); resourceManager.retrieveSoundas3D("MenuFeedback", tpCamera.getPosition() + (float)distance); } if (inputManager->getKey("VOLUME_UP")) { resourceManager.IncreaseSoundEngineVolume(); } if (inputManager->getKey("VOLUME_DOWN")) { resourceManager.DecreaseSoundEngineVolume(); } //tpCamera.Update(dt); if (inputManager->getKey("RSelect")) { Vector3 characterPos = dynamicSceneGraph->GetChildNode("Player")->GetGameObject()->getPosition(); testProjectile.setPosition(characterPos); CProjectile* projectile = projectileManager.FetchProjectile(testProjectile, (tpCamera.getTarget() - tpCamera.getPosition()).Normalized(), 20.f); GameObject3D* newProjectile = projectile; SceneNode* node; node = getNode(); node->SetGameObject(newProjectile); dynamicSceneGraph->AddChildNode(node); } projectileManager.Update(dt); if (inputManager->getKey("LockPitch")) { tpCamera.TogglePitchLock(); } if (inputManager->getKey("LockYaw")) { tpCamera.ToggleYawLock(); } const float moveSpeed = 100.f; if (inputManager->getKey("Up")) { Player->SetAngle(tpCamera.GetCamAngle()); if (inputManager->getKey("Left")) { Player->SetAngle(tpCamera.GetCamAngle() - 45.f); } if (inputManager->getKey("Right")) { Player->SetAngle(tpCamera.GetCamAngle() + 45.f); } Player->UpdateMovement(dt); } if (inputManager->getKey("Down")) { Player->SetAngle(tpCamera.GetCamAngle() + 180.f); if (inputManager->getKey("Left")) { Player->SetAngle(tpCamera.GetCamAngle() - 135.f); } if (inputManager->getKey("Right")) { Player->SetAngle(tpCamera.GetCamAngle() + 135.f); } Player->UpdateMovement(dt); } if (inputManager->getKey("Left")) { Player->SetAngle(tpCamera.GetCamAngle() + 90.f); Player->UpdateMovement(dt); } if (inputManager->getKey("Right")) { Player->SetAngle(tpCamera.GetCamAngle() - 90.f); Player->UpdateMovement(dt); } dynamicSceneGraph->GetChildNode("Player")->GetGameObject()->setPosition(Vector3( dynamicSceneGraph->GetChildNode("Player")->GetGameObject()->getPosition().x, dynamicSceneGraph->GetChildNode("Player")->GetGameObject()->getPosition().y, dynamicSceneGraph->GetChildNode("Player")->GetGameObject()->getPosition().z)); dynamicSceneGraph->GetChildNode("Player")->GetGameObject()->setRotation(Player->GetAngle(), 0, 1, 0); tpCamera.UpdatePosition(dynamicSceneGraph->GetChildNode("Player")->GetGameObject()->getPosition(), Vector3(0, 0, 0)); }