Beispiel #1
0
bool CzXomlLoad::CreateInstance(IzXomlResource* parent, CzScene* scene, CzString* template_name, CzString* parameters)
{
	if (template_name == NULL)
		return false;

	// Get the template
	CzTemplate* temp = (CzTemplate*)CzXomlResourceManager::FindResource(template_name->getHash(), CzHashes::Template_Hash, parent);
	if (temp != NULL)
	{
		if (parameters != NULL && !parameters->isEmpty())
		{
			// Create a set of XML attributes that will replace the template parameters
			CzXmlNode* replacements = new CzXmlNode();
			replacements->Managed = false;

			// Split parameter two into paramater=value pairs
			CzSlotArray<CzString*>* split = parameters->Split(':');
			CzSlotArray<CzString*>* strings = new CzSlotArray<CzString*>();
			for (int t = 0; t < split->getSize(); t++)
			{
				CzString* pair = split->element_at(t);
				if (pair != NULL)
				{
					// Split paramater / value pair
					pair->Split('=', strings);
					CzString* name = strings->element_at(0);
					CzString* value = strings->element_at(1);

					if (name != NULL && value != NULL)
					{
						// Set template paramater
						CzXmlAttribute* attrib = new CzXmlAttribute();
						attrib->Managed = false;
						attrib->setName(name->c_str());
						attrib->setValue(value->c_str());
						replacements->AddAttribute(attrib);
					}
				}
				strings->clear(true);
			}
			temp->Instantiate(scene, replacements);

			delete replacements;
			delete strings;
			split->clear(true);
			delete split;
		}
		else
			temp->Instantiate(scene, NULL);

	}
#if defined (_DEBUG)
	else
	{
		CzDebug::Log(CZ_DEBUG_CHANNEL_WARNING, "Action - FromTemplate - Cannot find template - ", template_name->c_str(), parent->getDebugInfo().c_str());
		return false;
	}
#endif

	return true;
}