virtual bool Setup(Pint& pint, const PintCaps& caps) { if(!CylinderTest::Setup(pint, caps)) return false; const bool UseConvexes = mCheckBox_UseConvexesForAll ? mCheckBox_UseConvexesForAll->IsChecked() : false; Matrix3x3 M; M.RotX(HALFPI); const Quat R = M; udword Nb = 14; const float Radius = mCylinder.mRadius; const float HalfHeight = mCylinder.mHalfHeight; float Altitude = mCylinder.mRadius; float OffsetX = 0.0f; while(Nb) { for(udword i=0;i<Nb;i++) { if(!caps.mSupportCylinders || UseConvexes) { PINT_CONVEX_CREATE ConvexCreate(mCylinder.mNbVerts, mCylinder.mVerts); ConvexCreate.mRenderer = GetRegisteredRenderers()[0]; PintObjectHandle Handle = CreateDynamicObject(pint, &ConvexCreate, Point(OffsetX + float(i)*Radius*2.2f, Altitude, 0.0f), &R); ASSERT(Handle); } else { PINT_CYLINDER_CREATE CylinderCreate(mCylinder.mRadius, mCylinder.mHalfHeight); CylinderCreate.mRenderer = GetRegisteredRenderers()[1]; // const Quat Q = ShortestRotation(Point(0.0f, 1.0f, 0.0f), Point(0.0f, 0.0f, 1.0f)); PintObjectHandle Handle = CreateDynamicObject(pint, &CylinderCreate, Point(OffsetX + float(i)*Radius*2.2f, Altitude, 0.0f)/*, &R*/); ASSERT(Handle); } } Nb--; Altitude += HalfHeight*2.0f+0.01f; OffsetX += Radius*1.1f; } return true; }
void FileManager::LoadDynamicObjects(int levelNum) { _camX=-1;_camY=-1; std::string temp; std::vector<std::string> levelVector = LoadLevelFile(levelNum); std::vector<std::string>::iterator stringIter; std::vector<std::string>::iterator stringIter2; const int *tileSize = LoadLevelProperties(levelNum); const int tileWidth = tileSize[0]; const int tileHeight = tileSize[1]; temp=""; for(stringIter = levelVector.begin(); stringIter!=levelVector.end(); stringIter++) { if((*stringIter) == "[map]") { int x=0,y=0; std::string temp; for(stringIter2 = stringIter+1; stringIter2!=levelVector.end(); stringIter2++) { if((*stringIter2) == ";") break; else { for(unsigned int i=0; i<(*stringIter2).size(); i++) { if((*stringIter2)[i] != ' ' && (*stringIter2)[i] != '|') temp += (*stringIter2)[i]; else { if(temp=="--") { y--; temp=""; break; } CreateDynamicObject(temp, x*tileWidth, y*tileHeight); x++; temp=""; } } y++; x=0; } } } else if((*stringIter) == "END") break; } }
virtual bool Setup(Pint& pint, const PintCaps& caps) { if(!CylinderTest::Setup(pint, caps)) return false; // Create ramp { Matrix3x3 M; M.RotZ(-0.2f); const Quat R = M; PINT_BOX_CREATE BoxDesc(10.0f, 1.0f, 10.0f); BoxDesc.mRenderer = CreateBoxRenderer(BoxDesc.mExtents); PintObjectHandle Handle = CreateStaticObject(pint, &BoxDesc, Point(0.0f, 0.0f, 0.0f), &R); ASSERT(Handle); } const bool UseConvexes = mCheckBox_UseConvexesForAll ? mCheckBox_UseConvexesForAll->IsChecked() : false; if(!caps.mSupportCylinders || UseConvexes) { // Create cylinder as a convex object PINT_CONVEX_CREATE ConvexCreate(mCylinder.mNbVerts, mCylinder.mVerts); ConvexCreate.mRenderer = GetRegisteredRenderers()[0]; PintObjectHandle Handle = CreateDynamicObject(pint, &ConvexCreate, Point(0.0f, mCylinder.mRadius+2.0f, 0.0f)); ASSERT(Handle); } else { PINT_CYLINDER_CREATE CylinderCreate(mCylinder.mRadius, mCylinder.mHalfHeight); CylinderCreate.mRenderer = GetRegisteredRenderers()[1]; const Quat Q = ShortestRotation(Point(0.0f, 1.0f, 0.0f), Point(0.0f, 0.0f, 1.0f)); PintObjectHandle Handle = CreateDynamicObject(pint, &CylinderCreate, Point(0.0f, mCylinder.mRadius+2.0f, 0.0f), &Q); ASSERT(Handle); } return true; }
House::House(HouseInfo& info) : info(info) { areaid = CreateDynamicCube(info.lx, info.ly, info.lz, info.mx, info.my, info.mz, -1, -1, -1); GameServer::getInstance().areamanager.registerArea(areaid, [info](const std::shared_ptr<Account>& player) { if (player->getUserID() == info.ownerid) { SendClientMessage(player->getInGameID(), 0xFFFFFFFF, STR("[House] 欢迎来到你的房产 " << info.name).c_str()); } else { SendClientMessage(player->getInGameID(), 0xFFFFFFFF, STR("[House] 你正在进入限制区域 " << info.name << " 请输入密码").c_str()); showHouseAuthDialog(player, GameServer::getInstance().housemanager.findHouse(info.houseid)); } }); zoneid = GangZoneCreate(info.lx, info.ly, info.mx, info.my); signid = CreateDynamicObject(3337, info.ex, info.ey, info.ez, 0.0f, 0.0f, info.rotation, -1, -1, -1, 200.0f, 200.0f); SetDynamicObjectMaterialText(signid, 1, info.name.c_str(), OBJECT_MATERIAL_SIZE_256x128, "Arial", 32, 1, 0xFFFFFFFF, 0xFF003366, 1); init(); }