int PortalManager::AddPortal(int xLoc, int yLoc, float angle) { if(portalList.size()==0) portalList.push_back(Portal(xLoc, yLoc, angle, portalList.size())); else if(portalList.size()==1) portalList.push_back(Portal(xLoc, yLoc, angle, portalList.size()-1)); else if(portalList.size()%2 == 0) portalList.push_back(Portal(xLoc, yLoc, angle, portalList.size())); else portalList.push_back(Portal(xLoc, yLoc, angle, portalList.size()-1)); }
shared_ptr<Portal> PortalsSystem::_loadPortal(const String &path, bool recovery, bool start) { try { shared_ptr<Portal> portal(OS_NEW Portal(getPeersCacheSize(), getDatabasesCacheSize())); if(_initPortal(portal, path, recovery, start) == false) return nullptr; /* if(getPortal(portal->getPortalID()) != nullptr) return false; */ if(getPortalByFullPov(portal->getFullPovID()) != nullptr) return nullptr; m_portals.push_back(portal); return portal; } catch(std::exception &e) { OS_LOG_ERROR(e.what()); } catch(...) { OS_LOG_ERROR(_S("Unknown error loading portal '") + path + _S("'")); } return nullptr; }
// Create a portal instance Portal* PCZSceneManager::createPortal(const String& name, PortalBase::PORTAL_TYPE type) { Portal* newPortal = OGRE_NEW Portal(name, type); newPortal->_notifyCreator(Root::getSingleton().getMovableObjectFactory("Portal")); newPortal->_notifyManager(this); mPortals.push_front(newPortal); return newPortal; }
Portal PortalManager::GetExitPortal(Portal enterPortal) { for(int i = 0; i<portalList.size();i++) { if(portalList[i].ident == enterPortal.ident && portalList[i].portalPosition.x != enterPortal.portalPosition.x) return portalList[i]; } return Portal(0, 0, 0, -1); }
Portal PortalManager::GetPortalAt(int xLoc, int yLoc) { for(int i = 0;i<portalList.size();i++) { if(xLoc >= portalList[i].portalPosition.x-32 && xLoc <= portalList[i].portalPosition.x+32 && yLoc >= portalList[i].portalPosition.y-32 && yLoc <= portalList[i].portalPosition.y+32) return portalList[i]; } return Portal(0, 0, 0, -1); }
bool MainApp::init(){ useOcclusionQueries = true; char fileName[] = "room0.hmdl"; unsigned int i; OpenGLModel *rooms[5]; for (i = 0; i < 5; i++){ fileName[4] = '0' + i; rooms[i] = new OpenGLModel(); rooms[i]->loadFromFile(fileName); } mat4 matr0(1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1); matr0.translate(vec3(0, 256, 0)); mat4 matr1(1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1); matr1.translate(vec3(-384, 256, 3072)); mat4 matr2(1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1); matr2.translate(vec3(1536,256,2688)); mat4 matr3(1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1); matr3.translate(vec3(-1024,-768,2688)); mat4 matr4(1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1); matr4.translate(vec3(-2304,256,2688)); for (i = 0; i < rooms[1]->getBatchCount(); i++){ rooms[0]->getBatch(i)->transform(matr0, ATT_VERTEX); rooms[1]->getBatch(i)->transform(matr1, ATT_VERTEX); rooms[2]->getBatch(i)->transform(matr2, ATT_VERTEX); rooms[3]->getBatch(i)->transform(matr3, ATT_VERTEX); rooms[4]->getBatch(i)->transform(matr4, ATT_VERTEX); } for (i = 0; i < 5; i++) sectors.add(new Sector(rooms[i])); sectors[0]->addPortal(Portal(sectors[1], vec3(-384, 384, 1024), vec3(-128, 384, 1024), vec3(-384, 0, 1024))); sectors[1]->addPortal(Portal(sectors[0], vec3(-384, 384, 1024), vec3(-128, 384, 1024), vec3(-384, 0, 1024))); sectors[1]->addPortal(Portal(sectors[2], vec3(512, 384, 2816), vec3(512, 384, 3072), vec3(512, 0, 2816))); sectors[2]->addPortal(Portal(sectors[1], vec3(512, 384, 2816), vec3(512, 384, 3072), vec3(512, 0, 2816))); sectors[2]->addPortal(Portal(sectors[3], vec3(512, -256, 2304), vec3(512, -256, 2560), vec3(512, -640, 2304))); sectors[3]->addPortal(Portal(sectors[2], vec3(512, -256, 2304), vec3(512, -256, 2560), vec3(512, -640, 2304))); sectors[1]->addPortal(Portal(sectors[4], vec3(-1280, 384, 1664), vec3(-1280, 384, 1920), vec3(-1280, 128, 1664))); sectors[4]->addPortal(Portal(sectors[1], vec3(-1280, 384, 1664), vec3(-1280, 384, 1920), vec3(-1280, 128, 1664))); sectors[1]->addPortal(Portal(sectors[4], vec3(-1280, 192, 3840), vec3(-1280, 192, 4096), vec3(-1280, -256, 3840))); sectors[4]->addPortal(Portal(sectors[1], vec3(-1280, 192, 3840), vec3(-1280, 192, 4096), vec3(-1280, -256, 3840))); sectors[0]->addLight(vec3( 0, 128, 0 ), 800, 100, 100, 100); sectors[1]->addLight(vec3(-256, 224, 1800), 650, 100, 80, 100); sectors[1]->addLight(vec3(-512, 128, 3100), 900, 100, 100, 300); sectors[2]->addLight(vec3( 1300, 128, 2700), 800, 100, 100, 200); sectors[3]->addLight(vec3(-100, -700, 2432), 600, 50, 50, 50); sectors[3]->addLight(vec3(-1450, -700, 2900), 1200, 250, 80, 250); sectors[4]->addLight(vec3(-2200, 256, 2300), 800, 100, 100, 100); sectors[4]->addLight(vec3(-2000, 0, 4000), 800, 100, 100, 100); return true; }