Level* LevelFactory::createTestLevel() { Level* level = new Level(parent_); int colWidth = Game::Width / Level::BrickCols; int colHeight = Game::Height/2 / Level::BrickRows; int hp = Brick::MaxHealth; // offset by 1 - first row empty for(int i = 1; i < Level::BrickRows && hp > 0; i++) { // offset by 1, first and last column empty for(int j = 1; j < Level::BrickCols-1; j++) { Brick* brick = new Brick(hp); level->addItem(brick); brick->setPos(colWidth*j, colHeight*i); } hp--; } createBall(level); createPaddle(level); return level; }
Level *Level::LoadFromFile(std::string pFilePath, Point pAvatarPosition) { Level *lLevelResult = new Level(); lLevelResult->init(); std::string lStrJson = loadTextFile(pFilePath); Json::Value lRoot; Json::Reader lReader; bool lParsingSuccessful = lReader.parse(lStrJson, lRoot, false); if (!lParsingSuccessful) { return nullptr; } lLevelResult->mBackgroundColor.r = lRoot["BackColorR"].asInt(); lLevelResult->mBackgroundColor.g = lRoot["BackColorG"].asInt(); lLevelResult->mBackgroundColor.b = lRoot["BackColorB"].asInt(); Json::Value lJsonMaps = lRoot["Maps"]; for (Json::ValueIterator lItrJsonMap = lJsonMaps.begin(); lItrJsonMap != lJsonMaps.end(); lItrJsonMap++) { Map *lNewMap = Map::LoadFromJson(*lItrJsonMap); if (lNewMap->getName() == "CollisionMap") { lLevelResult->mCollisionMap = lNewMap; } else if (lNewMap->getName() == "BackDecorsMap") { lLevelResult->mBackDecorsMap = lNewMap; } else if (lNewMap->getName() == "FrontDecorsMap") { lLevelResult->mFrontDecorsMap = lNewMap; } } Json::Value lJsonItems = lRoot["Items"]; for (Json::ValueIterator lItrJsonItem = lJsonItems.begin(); lItrJsonItem != lJsonItems.end(); lItrJsonItem++) { Json::Value lJsonItem = (*lItrJsonItem); std::string lItemName = lJsonItem["Name"].asString(); Item* lNewItem = Item::createItem(lItemName); if (lNewItem->typeName() == "PlayerAvatar") { if (pAvatarPosition.x != -1 ) { lNewItem->setPosition(pAvatarPosition); } } lNewItem->setLevel(lLevelResult); lNewItem->init(lJsonItem); lLevelResult->addItem(lNewItem); } lLevelResult->mCamera.setCollistionMap(lLevelResult->mCollisionMap); lLevelResult->mCamera.setLevel(lLevelResult); Size lLevelSize = lLevelResult->mBackDecorsMap->getSize(); int lTileSize = lLevelResult->mBackDecorsMap->getTileSize(); lLevelResult->mAreaManager.setLevelSize(Size(lLevelSize.width * lTileSize, lLevelSize.height * lTileSize)); lLevelResult->mAreaManager.init(); return lLevelResult; }