Exemplo n.º 1
0
	void parseEffects()
	{
		Parser parser(false, true);
		parser.readStream(filesystem::FilePackageManager::getInstance().getFile(fileName));

		ParserGroup &global = parser.getGlobals();
		int groupAmount = global.getSubGroupAmount();

		for(int i = 0; i < groupAmount; ++i)
		{
			const std::string &name = global.getSubGroupName(i);
			const ParserGroup &group = global.getSubGroup(i);
			const ParserGroup &textures = group.getSubGroup("textures");

			if(name.empty())
				continue;

			effects.push_back(parseEffectProperties(name, group));
			Effect &effect = effects[effects.size() - 1];

			int lineCount = textures.getLineCount();
			for(int j = 0; j < lineCount; ++j)
			{
				const string &texture = textures.getLine(j);
				addSpawner(effect, manager, texture, storm);
			}

			if(lineCount == 0)
			{
				Logger::getInstance()->warning("Decal effect with no textures defined");
				Logger::getInstance()->warning(name.c_str());
			}
		}
	}
Exemplo n.º 2
0
Entity *addEntityFromResource(char *type, char *name, int startX, int startY)
{
	Entity *e = NULL;

	if (strcmpignorecase(type, "ITEM") == 0 || strcmpignorecase(type, "SHIELD") == 0 || strcmpignorecase(type, "WEAPON") == 0)
	{
		e = addPermanentItem(name, startX, startY);
	}

	else if (strcmpignorecase(type, "TEMP_ITEM") == 0 || strcmpignorecase(type, "HEALTH") == 0)
	{
		e = addTemporaryItem(name, startX, startY, LEFT, 0, 0);
	}

	else if (strcmpignorecase(type, "PLAYER") == 0)
	{
		e = loadPlayer(startX, startY, NULL);
	}

	else if (strcmpignorecase(type, "PLAYER_WEAPON") == 0)
	{
		setPlayerWeaponName(name);
	}

	else if (strcmpignorecase(type, "PLAYER_SHIELD") == 0)
	{
		setPlayerShieldName(name);
	}

	else if (strcmpignorecase(type, "KEY_ITEM") == 0)
	{
		e = addKeyItem(name, startX, startY);
	}

	else if (strcmpignorecase(type, "ENEMY") == 0)
	{
		e = addEnemy(name, startX, startY);
	}

	else if (strcmpignorecase(type, "NPC") == 0)
	{
		e = addNPC(name, startX, startY);
	}

	else if (strcmpignorecase(type, "AUTO_LIFT") == 0 || strcmpignorecase(type, "MANUAL_LIFT") == 0)
	{
		e = addLift(name, startX, startY, getEntityTypeByName(type));
	}

	else if (strcmpignorecase(type, "SPAWNER") == 0)
	{
		e = addSpawner(startX, startY, name);
	}

	else if (strcmpignorecase(type, "TARGET") == 0)
	{
		addTarget(startX, startY, name);
	}

	else if (strcmpignorecase(type, "PRESSURE_PLATE") == 0)
	{
		e = addPressurePlate(name, startX, startY);
	}

	else if (strcmpignorecase(type, "TELEPORTER") == 0)
	{
		e = addTeleporter(name, startX, startY);
	}

	else if (strcmpignorecase(type, "AUTO_DOOR") == 0 || strcmpignorecase(type, "MANUAL_DOOR") == 0)
	{
		e = addDoor(name, startX, startY, getEntityTypeByName(type));
	}

	else if (strcmpignorecase(type, "WEAK_WALL") == 0)
	{
		e = addWeakWall(name, startX, startY);
	}

	else if (strcmpignorecase(type, "TRAP_DOOR") == 0)
	{
		e = addTrapDoor(name, startX, startY);
	}

	else if (strcmpignorecase(type, "CONVEYOR_BELT") == 0)
	{
		e = addConveyorBelt(name, startX, startY);
	}

	else if (strcmpignorecase(type, "SWITCH") == 0)
	{
		e = addSwitch(name, startX, startY);
	}

	else if (strcmpignorecase(type, "SCRIPT_LINE_DEF") == 0 || strcmpignorecase(type, "LINE_DEF") == 0)
	{
		e = addLineDef(type, name, startX, startY);
	}

	else if (strcmpignorecase(type, "LEVEL_EXIT") == 0)
	{
		e = addLevelExit(name, startX, startY);
	}

	else if (strcmpignorecase(type, "SAVE_POINT") == 0)
	{
		/* Save points don't spawn for replays */

		if (game.gameType == NORMAL)
		{
			e = addSavePoint(startX, startY);
		}
	}

	else if (strcmpignorecase(type, "TRIGGER") == 0)
	{
		addTriggerFromResource(key, value);
	}

	else if (strcmpignorecase(type, "GLOBAL_TRIGGER") == 0)
	{
		addGlobalTriggerFromResource(key, value);
	}

	else if (strcmpignorecase(type, "MAP_TRIGGER") == 0)
	{
		addMapTriggerFromResource(key, value);
	}

	else if (strcmpignorecase(type, "OBJECTIVE") == 0)
	{
		addObjectiveFromResource(key, value);
	}

	else if (strcmpignorecase(type, "ACTION_POINT") == 0)
	{
		e = addActionPoint(name, startX, startY);
	}

	else if (strcmpignorecase(type, "FALLING_PLATFORM") == 0)
	{
		e = addFallingPlatform(startX, startY, name);
	}

	else if (strcmpignorecase(type, "VANISHING_PLATFORM") == 0)
	{
		e = addVanishingPlatform(startX, startY, name);
	}

	else if (strcmpignorecase(type, "ANTI_GRAVITY") == 0)
	{
		e = addAntiGravityField(startX, startY, name);
	}

	else
	{
		showErrorAndExit("Unknown Entity type %s", type);
	}

	return e;
}
MyLevel::MyLevel(Game* j,std::string lvlFileName,Metadata* metadata,int id)
:world(b2Vec2(0,-10)),
 running(false),
 game(j),
 factory(&world,this),
 metadata(metadata),
 id(id),
 bossEncounter(false){
	LevelObject::resetIds();
	boundaries=nullptr;
	world.SetContinuousPhysics(true);
	world.SetContactListener(&contactListener);
	windowPos.x=0;
	windowPos.y=0;
	/*abro configuraciones*/
	Json::Value config_json;
	fileToJson(COFIG_FILE,config_json);

	Item::initializeDropTable(config_json);

	/*cargo nivel*/
	Json::Value level_json;
	fileToJson(lvlFileName,level_json);
	/*seteo variables mundo*/
	this->worldHeight=level_json["width"].asInt();
	this->worldWidth=level_json["length"].asInt();

	Json::Value world_json=config_json["world"];
	this->stepsPerSecond=world_json["steps/second"].asFloat();
	world.SetGravity(b2Vec2(0,world_json["gravity"].asFloat()));
	this->windowHeight=world_json["windowHeight"].asFloat();
	this->windowWidth=world_json["windowWidth"].asFloat();
	//window borders
	createBoundaries();
	//load all objects of the level
	Json::Value objetosNivel=level_json["foreground"];
	Json::ValueIterator it=objetosNivel.begin();
	for(; it!=objetosNivel.end(); it++){
		int id=(*it)["id"].asInt();
		b2Vec2 pos=jsonPosToWorldPos((*it)["x"].asInt(),
				(*it)["y"].asInt());
		ObjectInfo info(id,pos);
		int objectType=id/1000;
		if( objectType==1){
			addSpawner(id,pos);
		}else{
			createObject(&info);
		}
	}
	//load all objects of the level
	Json::Value objetosBossChamber=level_json["chamber"];
	Json::ValueIterator chamberIt=objetosBossChamber.begin();
	for(; chamberIt!=objetosBossChamber.end(); chamberIt++){
		int id=(*chamberIt)["id"].asInt();
		b2Vec2 pos=jsonPosToWorldPos(
				(*chamberIt)["x"].asInt()+worldWidth+BOSS_CHAMBER_OFFSET,
				(*chamberIt)["y"].asInt());
		ObjectInfo info(id,pos);
		int objectType=id/1000;
		if( objectType==1){
			addSpawner(id,pos);
		}else{
			createObject(&info);
		}
	}
	spawn();
}