示例#1
0
void TMXMapImporter::loadSparseLayerInfo(const TiXmlNode *node)
{
	const TiXmlElement *element = node->ToElement();
	SparseLayerInfo *sparseLayerInfo = new SparseLayerInfo();
	sparseLayerInfo->name = extractCharAtt(element, NAME_ATT);
	
	// NOW GET THE PROPERTIES
	const TiXmlNode *propertiesNode = node->FirstChild();
	string eName = propertiesNode->Value();
	const TiXmlNode *dataNode = propertiesNode;
	if (strcmp(eName.c_str(), PROPERTIES_ELEMENT.c_str()) == 0)
	{
		const TiXmlNode *propNode = propertiesNode->FirstChild();
		// IF THE LAYER IS NOT SPECIFIED AS COLLIDABLE OR NOT,
		// DON'T EVEN LOAD IT
		const char *propName = propNode->Value();
		if (strcmp(propNode->Value(), PROPERTY_ELEMENT.c_str()) != 0)
			return;

		// OTHERWISE LOAD THE PROPERTIES, WHICH MUST INCLUDE collidable
		while (propNode != NULL)
		{
			const TiXmlElement *propElement = propNode->ToElement();
			string att = propElement->Attribute(NAME_ATT.c_str());
			if (strcmp(att.c_str(), COLLIDABLE_ATT.c_str()) == 0)
			{
				sparseLayerInfo->collidable = extractBoolAtt(propNode->ToElement(), VALUE_ATT);
			}
			propNode = propNode->NextSibling();
		}
		dataNode = propertiesNode->NextSibling();
	}
	// NOW LET'S LOAD THE OBJECTS (Sparse Tiles) 
	while (dataNode != NULL)
	{
		const TiXmlElement *objectElement = dataNode->ToElement();
		if (	(dataNode->ToElement()->Attribute(GID_ATT.c_str()) != NULL) &&
			(dataNode->ToElement()->Attribute(X_ATT.c_str()) != NULL) &&
			(dataNode->ToElement()->Attribute(Y_ATT.c_str()) != NULL))
		{
			sparseLayerInfo->gidS.push_back(extractIntAtt(objectElement, GID_ATT));
			sparseLayerInfo->xS.push_back(extractIntAtt(objectElement, X_ATT));
			sparseLayerInfo->yS.push_back(extractIntAtt(objectElement, Y_ATT));
		}
		dataNode = dataNode->NextSibling();
	}

	sparseLayerInfo->tileSetInfo = getTileSetForId(sparseLayerInfo->gidS.front());
	sparseLayerInfo->type = LayerType::SPARSE;
	layerInfos.push_back(sparseLayerInfo);
}
void TMXMapImporter::loadTiledLayerInfo(const TiXmlNode *node)
{
	const TiXmlElement *element = node->ToElement();
	TiledLayerInfo tiledLayerInfo;
	tiledLayerInfo.name = extractCharAtt(element, NAME_ATT);
	tiledLayerInfo.width = extractIntAtt(element, WIDTH_ATT);
	tiledLayerInfo.height = extractIntAtt(element, HEIGHT_ATT);

	// NOW GET THE PROPERTIES
	const TiXmlNode *propertiesNode = node->FirstChild();
	string eName = propertiesNode->Value();
	const TiXmlNode *dataNode;
	if (strcmp(eName.c_str(), PROPERTIES_ELEMENT.c_str()) == 0)
	{
		const TiXmlNode *propNode = propertiesNode->FirstChild();
		while (propNode != NULL)
		{
			const TiXmlElement *propElement = propNode->ToElement();
			string att = propElement->Attribute(NAME_ATT.c_str());
			if (strcmp(att.c_str(), COLLIDABLE_ATT.c_str()) == 0)
			{
				tiledLayerInfo.collidable = extractBoolAtt(propNode->ToElement(), VALUE_ATT);
			}
			propNode = propNode->NextSibling();
		}
		dataNode = propertiesNode->NextSibling();
	}

	// NOW GET THE TILE DATA
	if (dataNode == NULL)
	{
		dataNode = node->FirstChild();
	}
	const TiXmlNode *tileNode = dataNode->FirstChild();
	while (tileNode)
	{
		const TiXmlElement *element = tileNode->ToElement();
		int gid = extractIntAtt(element, GID_ATT);
		tiledLayerInfo.gids.push_back(gid);
		tileNode = tileNode->NextSibling();
	}
	tiledLayerInfo.tileSetInfo = getTileSetForId(tiledLayerInfo.gids[0]);
	tiledLayerInfos[tiledLayerInfo.name] = tiledLayerInfo;
}
示例#3
0
void TMXMapImporter::loadTiledLayerInfo(const TiXmlNode *node)
{
	const TiXmlElement *element = node->ToElement();
	TiledLayerInfo *tiledLayerInfo = new TiledLayerInfo();

	// NAME WIDTH AND HEIGHT ARE ALL REQUIRED
	if (element->Attribute(NAME_ATT.c_str()) == NULL) return;
	else tiledLayerInfo->name = extractCharAtt(element, NAME_ATT);
	if (element->Attribute(WIDTH_ATT.c_str()) == NULL) return;
	else tiledLayerInfo->width = extractIntAtt(element, WIDTH_ATT);
	if (element->Attribute(HEIGHT_ATT.c_str()) == NULL) return;
	else tiledLayerInfo->height = extractIntAtt(element, HEIGHT_ATT);

	// NOW GET THE PROPERTIES, IF THERE ARE ANY
	const TiXmlNode *propertiesNode = node->FirstChild();
	string eName = propertiesNode->Value();
	const TiXmlNode *dataNode = NULL;
	bool collidableSpecified = false;
	if (strcmp(eName.c_str(), PROPERTIES_ELEMENT.c_str()) == 0)
	{
		const TiXmlNode *propNode = propertiesNode->FirstChild();
		while (propNode != NULL)
		{
			const TiXmlElement *propElement = propNode->ToElement();
			string att = propElement->Attribute(NAME_ATT.c_str());
			if (strcmp(att.c_str(), COLLIDABLE_ATT.c_str()) == 0)
			{
				tiledLayerInfo->collidable = extractBoolAtt(propNode->ToElement(), VALUE_ATT);
				collidableSpecified = true;
			}
			propNode = propNode->NextSibling();
		}
		dataNode = propertiesNode->NextSibling();
	}

	// BY DEFAULT A LAYER IS NOT COLLIDABLE
	if (!collidableSpecified)
		tiledLayerInfo->collidable = false;

	// NOW GET THE TILE DATA
	if (dataNode == NULL)
	{
		dataNode = node->FirstChild();
	}
	const TiXmlNode *tileNode = dataNode->FirstChild();
	while (tileNode)
	{
		const TiXmlElement *element = tileNode->ToElement();
		
		// GID IS REQUIRED
		if (element->Attribute(GID_ATT.c_str()) != NULL)
		{
			int gid = extractIntAtt(element, GID_ATT);
			tiledLayerInfo->gids.push_back(gid);
		}
		tileNode = tileNode->NextSibling();
	}
	tiledLayerInfo->tileSetInfo = getTileSetForId(tiledLayerInfo->gids[0]);
	tiledLayerInfo->type = LayerType::TILED;
	layerInfos.push_back(tiledLayerInfo);
}