本文整理汇总了C++中XMLElement::GetBool方法的典型用法代码示例。如果您正苦于以下问题:C++ XMLElement::GetBool方法的具体用法?C++ XMLElement::GetBool怎么用?C++ XMLElement::GetBool使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类XMLElement
的用法示例。
在下文中一共展示了XMLElement::GetBool方法的13个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: SetParameters
void Texture::SetParameters(const XMLElement& element)
{
XMLElement paramElem = element.GetChild();
while (paramElem)
{
String name = paramElem.GetName();
if (name == "address")
{
String coord = paramElem.GetAttributeLower("coord");
if (coord.Length() >= 1)
{
TextureCoordinate coordIndex = (TextureCoordinate)(coord[0] - 'u');
String mode = paramElem.GetAttributeLower("mode");
SetAddressMode(coordIndex, (TextureAddressMode)GetStringListIndex(mode.CString(), addressModeNames, ADDRESS_WRAP));
}
}
if (name == "border")
SetBorderColor(paramElem.GetColor("color"));
if (name == "filter")
{
String mode = paramElem.GetAttributeLower("mode");
SetFilterMode((TextureFilterMode)GetStringListIndex(mode.CString(), filterModeNames, FILTER_DEFAULT));
}
if (name == "mipmap")
SetNumLevels(paramElem.GetBool("enable") ? 0 : 1);
if (name == "quality")
{
if (paramElem.HasAttribute("low"))
SetMipsToSkip(QUALITY_LOW, paramElem.GetInt("low"));
if (paramElem.HasAttribute("med"))
SetMipsToSkip(QUALITY_MEDIUM, paramElem.GetInt("med"));
if (paramElem.HasAttribute("medium"))
SetMipsToSkip(QUALITY_MEDIUM, paramElem.GetInt("medium"));
if (paramElem.HasAttribute("high"))
SetMipsToSkip(QUALITY_HIGH, paramElem.GetInt("high"));
}
if (name == "srgb")
SetSRGB(paramElem.GetBool("enable"));
paramElem = paramElem.GetNext();
}
}
示例2: Load
void RenderTargetInfo::Load(const XMLElement& element)
{
name_ = element.GetAttribute("name");
tag_ = element.GetAttribute("tag");
if (element.HasAttribute("enabled"))
enabled_ = element.GetBool("enabled");
if (element.HasAttribute("cubemap"))
cubemap_ = element.GetBool("cubemap");
String formatName = element.GetAttribute("format");
format_ = Graphics::GetFormat(formatName);
if (element.HasAttribute("filter"))
filtered_ = element.GetBool("filter");
if (element.HasAttribute("srgb"))
sRGB_ = element.GetBool("srgb");
if (element.HasAttribute("persistent"))
persistent_ = element.GetBool("persistent");
if (element.HasAttribute("size"))
size_ = element.GetVector2("size");
if (element.HasAttribute("sizedivisor"))
{
size_ = element.GetVector2("sizedivisor");
sizeMode_ = SIZE_VIEWPORTDIVISOR;
}
else if (element.HasAttribute("rtsizedivisor"))
{
// Deprecated rtsizedivisor mode, acts the same as sizedivisor mode now
URHO3D_LOGWARNING("Deprecated rtsizedivisor mode used in rendertarget definition");
size_ = element.GetVector2("rtsizedivisor");
sizeMode_ = SIZE_VIEWPORTDIVISOR;
}
else if (element.HasAttribute("sizemultiplier"))
{
size_ = element.GetVector2("sizemultiplier");
sizeMode_ = SIZE_VIEWPORTMULTIPLIER;
}
if (element.HasAttribute("width"))
size_.x_ = element.GetFloat("width");
if (element.HasAttribute("height"))
size_.y_ = element.GetFloat("height");
}
示例3: LoadParameters
void Sound::LoadParameters()
{
ResourceCache* cache = GetSubsystem<ResourceCache>();
String xmlName = ReplaceExtension(GetName(), ".xml");
if (!cache->Exists(xmlName))
return;
XMLFile* file = cache->GetResource<XMLFile>(xmlName);
if (!file)
return;
XMLElement rootElem = file->GetRoot();
XMLElement paramElem = rootElem.GetChild();
while (paramElem)
{
String name = paramElem.GetName();
if (name == "format" && !compressed_)
{
if (paramElem.HasAttribute("frequency"))
frequency_ = paramElem.GetInt("frequency");
if (paramElem.HasAttribute("sixteenbit"))
sixteenBit_ = paramElem.GetBool("sixteenbit");
if (paramElem.HasAttribute("16bit"))
sixteenBit_ = paramElem.GetBool("16bit");
if (paramElem.HasAttribute("stereo"))
stereo_ = paramElem.GetBool("stereo");
}
if (name == "loop")
{
if (paramElem.HasAttribute("enable"))
SetLooped(paramElem.GetBool("enable"));
if (paramElem.HasAttribute("start") && paramElem.HasAttribute("end"))
SetLoop(paramElem.GetInt("start"), paramElem.GetInt("end"));
}
paramElem = paramElem.GetNext();
}
}
示例4: Load
void RenderTargetInfo::Load(const XMLElement& element)
{
name_ = element.GetAttribute("name");
tag_ = element.GetAttribute("tag");
if (element.HasAttribute("enabled"))
enabled_ = element.GetBool("enabled");
String formatName = element.GetAttribute("format");
format_ = Graphics::GetFormat(formatName);
if (element.HasAttribute("filter"))
filtered_ = element.GetBool("filter");
if (element.HasAttribute("srgb"))
sRGB_ = element.GetBool("srgb");
if (element.HasAttribute("persistent"))
persistent_ = element.GetBool("persistent");
if (element.HasAttribute("size"))
size_ = element.GetIntVector2("size");
if (element.HasAttribute("sizedivisor"))
{
size_ = element.GetIntVector2("sizedivisor");
sizeMode_ = SIZE_VIEWPORTDIVISOR;
}
if (element.HasAttribute("rtsizedivisor"))
{
size_ = element.GetIntVector2("rtsizedivisor");
sizeMode_ = SIZE_RENDERTARGETDIVISOR;
}
if (element.HasAttribute("width"))
size_.x_ = element.GetInt("width");
if (element.HasAttribute("height"))
size_.y_ = element.GetInt("height");
}
示例5: LoadParameters
void Sound::LoadParameters()
{
auto* cache = GetSubsystem<ResourceCache>();
String xmlName = ReplaceExtension(GetName(), ".xml");
SharedPtr<XMLFile> file(cache->GetTempResource<XMLFile>(xmlName, false));
if (!file)
return;
XMLElement rootElem = file->GetRoot();
LoadMetadataFromXML(rootElem);
for (XMLElement paramElem = rootElem.GetChild(); paramElem; paramElem = paramElem.GetNext())
{
String name = paramElem.GetName();
if (name == "format" && !compressed_)
{
if (paramElem.HasAttribute("frequency"))
frequency_ = (unsigned)paramElem.GetInt("frequency");
if (paramElem.HasAttribute("sixteenbit"))
sixteenBit_ = paramElem.GetBool("sixteenbit");
if (paramElem.HasAttribute("16bit"))
sixteenBit_ = paramElem.GetBool("16bit");
if (paramElem.HasAttribute("stereo"))
stereo_ = paramElem.GetBool("stereo");
}
if (name == "loop")
{
if (paramElem.HasAttribute("enable"))
SetLooped(paramElem.GetBool("enable"));
if (paramElem.HasAttribute("start") && paramElem.HasAttribute("end"))
SetLoop((unsigned)paramElem.GetInt("start"), (unsigned)paramElem.GetInt("end"));
}
}
}
示例6: BeginLoad
bool Technique::BeginLoad(Deserializer& source)
{
passes_.Clear();
SetMemoryUse(sizeof(Technique));
SharedPtr<XMLFile> xml(new XMLFile(context_));
if (!xml->Load(source))
return false;
XMLElement rootElem = xml->GetRoot();
if (rootElem.HasAttribute("sm3"))
isSM3_ = rootElem.GetBool("sm3");
String globalVS = rootElem.GetAttribute("vs");
String globalPS = rootElem.GetAttribute("ps");
String globalVSDefines = rootElem.GetAttribute("vsdefines");
String globalPSDefines = rootElem.GetAttribute("psdefines");
// End with space so that the pass-specific defines can be appended
if (!globalVSDefines.Empty())
globalVSDefines += ' ';
if (!globalPSDefines.Empty())
globalPSDefines += ' ';
bool globalAlphaMask = false;
if (rootElem.HasAttribute("alphamask"))
globalAlphaMask = rootElem.GetBool("alphamask");
unsigned numPasses = 0;
XMLElement passElem = rootElem.GetChild("pass");
while (passElem)
{
if (passElem.HasAttribute("name"))
{
StringHash nameHash(passElem.GetAttribute("name"));
Pass* newPass = CreatePass(nameHash);
++numPasses;
if (passElem.HasAttribute("sm3"))
newPass->SetIsSM3(passElem.GetBool("sm3"));
// Append global defines only when pass does not redefine the shader
if (passElem.HasAttribute("vs"))
{
newPass->SetVertexShader(passElem.GetAttribute("vs"));
newPass->SetVertexShaderDefines(passElem.GetAttribute("vsdefines"));
}
else
{
newPass->SetVertexShader(globalVS);
newPass->SetVertexShaderDefines(globalVSDefines + passElem.GetAttribute("vsdefines"));
}
if (passElem.HasAttribute("ps"))
{
newPass->SetPixelShader(passElem.GetAttribute("ps"));
newPass->SetPixelShaderDefines(passElem.GetAttribute("psdefines"));
}
else
{
newPass->SetPixelShader(globalPS);
newPass->SetPixelShaderDefines(globalPSDefines + passElem.GetAttribute("psdefines"));
}
if (passElem.HasAttribute("lighting"))
{
String lighting = passElem.GetAttributeLower("lighting");
newPass->SetLightingMode((PassLightingMode)GetStringListIndex(lighting.CString(), lightingModeNames,
LIGHTING_UNLIT));
}
if (passElem.HasAttribute("blend"))
{
String blend = passElem.GetAttributeLower("blend");
newPass->SetBlendMode((BlendMode)GetStringListIndex(blend.CString(), blendModeNames, BLEND_REPLACE));
}
if (passElem.HasAttribute("depthtest"))
{
String depthTest = passElem.GetAttributeLower("depthtest");
if (depthTest == "false")
newPass->SetDepthTestMode(CMP_ALWAYS);
else
newPass->SetDepthTestMode((CompareMode)GetStringListIndex(depthTest.CString(), compareModeNames, CMP_LESS));
}
if (passElem.HasAttribute("depthwrite"))
newPass->SetDepthWrite(passElem.GetBool("depthwrite"));
if (passElem.HasAttribute("alphamask"))
newPass->SetAlphaMask(passElem.GetBool("alphamask"));
else
newPass->SetAlphaMask(globalAlphaMask);
}
else
LOGERROR("Missing pass name");
passElem = passElem.GetNext("pass");
}
// Calculate memory use now
//.........这里部分代码省略.........
示例7: BeginLoad
bool Technique::BeginLoad(Deserializer& source)
{
passes_.clear();
cloneTechniques_.clear();
SetMemoryUse(sizeof(Technique));
ea::shared_ptr<XMLFile> xml(context_->CreateObject<XMLFile>());
if (!xml->Load(source))
return false;
XMLElement rootElem = xml->GetRoot();
if (rootElem.HasAttribute("desktop"))
isDesktop_ = rootElem.GetBool("desktop");
ea::string globalVS = rootElem.GetAttribute("vs");
ea::string globalPS = rootElem.GetAttribute("ps");
ea::string globalVSDefines = rootElem.GetAttribute("vsdefines");
ea::string globalPSDefines = rootElem.GetAttribute("psdefines");
// End with space so that the pass-specific defines can be appended
if (!globalVSDefines.empty())
globalVSDefines += ' ';
if (!globalPSDefines.empty())
globalPSDefines += ' ';
XMLElement passElem = rootElem.GetChild("pass");
while (passElem)
{
if (passElem.HasAttribute("name"))
{
Pass* newPass = CreatePass(passElem.GetAttribute("name"));
if (passElem.HasAttribute("desktop"))
newPass->SetIsDesktop(passElem.GetBool("desktop"));
// Append global defines only when pass does not redefine the shader
if (passElem.HasAttribute("vs"))
{
newPass->SetVertexShader(passElem.GetAttribute("vs"));
newPass->SetVertexShaderDefines(passElem.GetAttribute("vsdefines"));
}
else
{
newPass->SetVertexShader(globalVS);
newPass->SetVertexShaderDefines(globalVSDefines + passElem.GetAttribute("vsdefines"));
}
if (passElem.HasAttribute("ps"))
{
newPass->SetPixelShader(passElem.GetAttribute("ps"));
newPass->SetPixelShaderDefines(passElem.GetAttribute("psdefines"));
}
else
{
newPass->SetPixelShader(globalPS);
newPass->SetPixelShaderDefines(globalPSDefines + passElem.GetAttribute("psdefines"));
}
newPass->SetVertexShaderDefineExcludes(passElem.GetAttribute("vsexcludes"));
newPass->SetPixelShaderDefineExcludes(passElem.GetAttribute("psexcludes"));
if (passElem.HasAttribute("lighting"))
{
ea::string lighting = passElem.GetAttributeLower("lighting");
newPass->SetLightingMode((PassLightingMode)GetStringListIndex(lighting.c_str(), lightingModeNames,
LIGHTING_UNLIT));
}
if (passElem.HasAttribute("blend"))
{
ea::string blend = passElem.GetAttributeLower("blend");
newPass->SetBlendMode((BlendMode)GetStringListIndex(blend.c_str(), blendModeNames, BLEND_REPLACE));
}
if (passElem.HasAttribute("cull"))
{
ea::string cull = passElem.GetAttributeLower("cull");
newPass->SetCullMode((CullMode)GetStringListIndex(cull.c_str(), cullModeNames, MAX_CULLMODES));
}
if (passElem.HasAttribute("depthtest"))
{
ea::string depthTest = passElem.GetAttributeLower("depthtest");
if (depthTest == "false")
newPass->SetDepthTestMode(CMP_ALWAYS);
else
newPass->SetDepthTestMode((CompareMode)GetStringListIndex(depthTest.c_str(), compareModeNames, CMP_LESS));
}
if (passElem.HasAttribute("depthwrite"))
newPass->SetDepthWrite(passElem.GetBool("depthwrite"));
if (passElem.HasAttribute("alphatocoverage"))
newPass->SetAlphaToCoverage(passElem.GetBool("alphatocoverage"));
}
else
URHO3D_LOGERROR("Missing pass name");
passElem = passElem.GetNext("pass");
}
//.........这里部分代码省略.........
示例8: LoadXML
bool Menu::LoadXML(const XMLElement& source, XMLFile* styleFile)
{
// Apply the style first, but only for non-internal elements
if (!internal_ && styleFile)
{
// Use style override if defined, otherwise type name
String styleName = source.GetAttribute("style");
if (styleName.Empty())
styleName = GetTypeName();
SetStyle(styleFile, styleName);
}
// Then load rest of the attributes from the source
if (!Serializable::LoadXML(source))
return false;
unsigned nextInternalChild = 0;
// Load child elements. Internal elements are not to be created as they already exist
XMLElement childElem = source.GetChild("element");
while (childElem)
{
bool internalElem = childElem.GetBool("internal");
bool popupElem = childElem.GetBool("popup");
String typeName = childElem.GetAttribute("type");
if (typeName.Empty())
typeName = "UIElement";
UIElement* child = 0;
if (!internalElem)
{
if (!popupElem)
child = CreateChild(ShortStringHash(typeName));
else
{
// Do not add the popup element as a child even temporarily, as that can break layouts
SharedPtr<UIElement> popup = DynamicCast<UIElement>(context_->CreateObject(ShortStringHash(typeName)));
if (!popup)
LOGERROR("Could not create popup element type " + ShortStringHash(typeName).ToString());
else
{
child = popup;
SetPopup(popup);
}
}
}
else
{
// An internal popup element should already exist
if (popupElem)
child = popup_;
else
{
for (unsigned i = nextInternalChild; i < children_.Size(); ++i)
{
if (children_[i]->IsInternal() && children_[i]->GetTypeName() == typeName)
{
child = children_[i];
nextInternalChild = i + 1;
break;
}
}
if (!child)
LOGWARNING("Could not find matching internal child element of type " + typeName + " in " + GetTypeName());
}
}
if (child)
{
if (!child->LoadXML(childElem, styleFile))
return false;
}
childElem = childElem.GetNext("element");
}
ApplyAttributes();
return true;
}
示例9: Load
bool Technique::Load(Deserializer& source)
{
PROFILE(LoadTechnique);
SharedPtr<XMLFile> xml(new XMLFile(context_));
if (!xml->Load(source))
return false;
XMLElement rootElem = xml->GetRoot();
if (rootElem.HasAttribute("sm3"))
isSM3_ = rootElem.GetBool("sm3");
unsigned numPasses = 0;
XMLElement passElem = rootElem.GetChild("pass");
while (passElem)
{
if (passElem.HasAttribute("name"))
{
StringHash nameHash(passElem.GetAttribute("name"));
Pass* newPass = CreatePass(nameHash);
++numPasses;
if (passElem.HasAttribute("vs"))
newPass->SetVertexShader(passElem.GetAttribute("vs"));
if (passElem.HasAttribute("ps"))
newPass->SetPixelShader(passElem.GetAttribute("ps"));
if (passElem.HasAttribute("lighting"))
{
String lighting = passElem.GetAttributeLower("lighting");
newPass->SetLightingMode((PassLightingMode)GetStringListIndex(lighting.CString(), lightingModeNames,
LIGHTING_UNLIT));
}
if (passElem.HasAttribute("blend"))
{
String blend = passElem.GetAttributeLower("blend");
newPass->SetBlendMode((BlendMode)GetStringListIndex(blend.CString(), blendModeNames, BLEND_REPLACE));
}
if (passElem.HasAttribute("depthtest"))
{
String depthTest = passElem.GetAttributeLower("depthtest");
if (depthTest == "false")
newPass->SetDepthTestMode(CMP_ALWAYS);
else
newPass->SetDepthTestMode((CompareMode)GetStringListIndex(depthTest.CString(), compareModeNames, CMP_LESS));
}
if (passElem.HasAttribute("depthwrite"))
newPass->SetDepthWrite(passElem.GetBool("depthwrite"));
if (passElem.HasAttribute("alphamask"))
newPass->SetAlphaMask(passElem.GetBool("alphamask"));
}
else
LOGERROR("Missing pass name");
passElem = passElem.GetNext("pass");
}
// Calculate memory use
unsigned memoryUse = sizeof(Technique) + numPasses * sizeof(Pass);
SetMemoryUse(memoryUse);
return true;
}
示例10: Load
void RenderPathCommand::Load(const XMLElement& element)
{
type_ = (RenderCommandType)GetStringListIndex(element.GetAttributeLower("type").CString(), commandTypeNames, CMD_NONE);
tag_ = element.GetAttribute("tag");
if (element.HasAttribute("enabled"))
enabled_ = element.GetBool("enabled");
if (element.HasAttribute("metadata"))
metadata_ = element.GetAttribute("metadata");
switch (type_)
{
case CMD_CLEAR:
if (element.HasAttribute("color"))
{
clearFlags_ |= CLEAR_COLOR;
// Mark fog color with negative values
if (element.GetAttributeLower("color") == "fog")
useFogColor_ = true;
else
clearColor_ = element.GetColor("color");
}
if (element.HasAttribute("depth"))
{
clearFlags_ |= CLEAR_DEPTH;
clearDepth_ = element.GetFloat("depth");
}
if (element.HasAttribute("stencil"))
{
clearFlags_ |= CLEAR_STENCIL;
clearStencil_ = element.GetInt("stencil");
}
break;
case CMD_SCENEPASS:
pass_ = element.GetAttribute("pass");
sortMode_ = (RenderCommandSortMode)GetStringListIndex(element.GetAttributeLower("sort").CString(), sortModeNames, SORT_FRONTTOBACK);
if (element.HasAttribute("marktostencil"))
markToStencil_ = element.GetBool("marktostencil");
if (element.HasAttribute("vertexlights"))
vertexLights_ = element.GetBool("vertexlights");
if (element.HasAttribute("usescissor"))
useScissor_ = element.GetBool("usescissor");
break;
case CMD_FORWARDLIGHTS:
pass_ = element.GetAttribute("pass");
if (element.HasAttribute("uselitbase"))
useLitBase_ = element.GetBool("uselitbase");
break;
case CMD_LIGHTVOLUMES:
case CMD_QUAD:
vertexShaderName_ = element.GetAttribute("vs");
pixelShaderName_ = element.GetAttribute("ps");
if (type_ == CMD_QUAD)
{
XMLElement parameterElem = element.GetChild("parameter");
while (parameterElem)
{
String name = parameterElem.GetAttribute("name");
Variant value = parameterElem.GetVectorVariant("value");
shaderParameters_[name] = value;
parameterElem = parameterElem.GetNext("parameter");
}
}
break;
default:
break;
}
// By default use 1 output, which is the viewport
outputNames_.Push("viewport");
if (element.HasAttribute("output"))
outputNames_[0] = element.GetAttribute("output");
// Check for defining multiple outputs
XMLElement outputElem = element.GetChild("output");
while (outputElem)
{
unsigned index = outputElem.GetInt("index");
if (index < MAX_RENDERTARGETS)
{
if (index >= outputNames_.Size())
outputNames_.Resize(index + 1);
outputNames_[index] = outputElem.GetAttribute("name");
}
outputElem = outputElem.GetNext("output");
}
XMLElement textureElem = element.GetChild("texture");
while (textureElem)
{
TextureUnit unit = TU_DIFFUSE;
if (textureElem.HasAttribute("unit"))
{
String unitName = textureElem.GetAttributeLower("unit");
if (unitName.Length() > 1)
unit = ParseTextureUnitName(unitName);
else
//.........这里部分代码省略.........
示例11: LoadConfiguration
void GameEconomicGameClient::LoadConfiguration(Configuration &configuration)
{
/// Grab resources
FileSystem * fileSystem = GetSubsystem<FileSystem>();
/// Set all defaults
bool success=false;
configuration.GameModeForceTablet=false;
configuration.VideoBloomParam1=0.9f;
configuration.VideoBloomParam2=0.6f;
/// Create String
String configFileName;
/// Set directory and path for network file
configFileName.Append(fileSystem->GetProgramDir().CString());
configFileName.Append("");
configFileName.Append("Configuration.xml");
/// If file does not exist exit function with null structure
if (!fileSystem->FileExists(configFileName))
{
cout << "Configuration file not found.. Using defaults.. " << endl;
return;
}
/// Flag file for loading and load
File loadFile(context_, configFileName, FILE_READ);
XMLFile * configurationXML = new XMLFile(context_);
configurationXML -> Load(loadFile);
XMLElement configElem = configurationXML->GetRoot();
/// If no configuration is set or no root
if (configElem.IsNull())
{
cout << "Configuration file not found.. Using defaults.. " << endl;
return;
}
/// Basic Config
XMLElement GameModeConfigurationElem = configElem.GetChild("GameModeConfiguration");
/// If no network server element return false;
if (!GameModeConfigurationElem.IsNull())
{
if (GameModeConfigurationElem.HasAttribute("GameModeForceTablet")) configuration.GameModeForceTablet = GameModeConfigurationElem.GetBool("GameModeForceTablet");
}
/// Basic Config
XMLElement VideoConfigurationElem = configElem.GetChild("VideoConfiguration");
/// If no network server element return false;
if (!VideoConfigurationElem.IsNull())
{
if (VideoConfigurationElem.HasAttribute("BloomParam1")) configuration.VideoBloomParam1= VideoConfigurationElem.GetFloat("BloomParam1");
if (VideoConfigurationElem.HasAttribute("BloomParam2")) configuration.VideoBloomParam2= VideoConfigurationElem.GetFloat("BloomParam2");
}
return;
}
示例12: LoadXML
bool Menu::LoadXML(const XMLElement& source, XMLFile* styleFile, bool setInstanceDefault)
{
// Get style override if defined
String styleName = source.GetAttribute("style");
// Apply the style first, if the style file is available
if (styleFile)
{
// If not defined, use type name
if (styleName.Empty())
styleName = GetTypeName();
SetStyle(styleName, styleFile);
}
// The 'style' attribute value in the style file cannot be equals to original's applied style to prevent infinite loop
else if (!styleName.Empty() && styleName != appliedStyle_)
{
// Attempt to use the default style file
styleFile = GetDefaultStyle();
if (styleFile)
{
// Remember the original applied style
String appliedStyle(appliedStyle_);
SetStyle(styleName, styleFile);
appliedStyle_ = appliedStyle;
}
}
// Then load rest of the attributes from the source
if (!Serializable::LoadXML(source, setInstanceDefault))
return false;
unsigned nextInternalChild = 0;
// Load child elements. Internal elements are not to be created as they already exist
XMLElement childElem = source.GetChild("element");
while (childElem)
{
bool internalElem = childElem.GetBool("internal");
bool popupElem = childElem.GetBool("popup");
String typeName = childElem.GetAttribute("type");
if (typeName.Empty())
typeName = "UIElement";
unsigned index = childElem.HasAttribute("index") ? childElem.GetUInt("index") : M_MAX_UNSIGNED;
UIElement* child = 0;
if (!internalElem)
{
if (!popupElem)
child = CreateChild(typeName, String::EMPTY, index);
else
{
// Do not add the popup element as a child even temporarily, as that can break layouts
SharedPtr<UIElement> popup = DynamicCast<UIElement>(context_->CreateObject(typeName));
if (!popup)
URHO3D_LOGERROR("Could not create popup element type " + typeName);
else
{
child = popup;
SetPopup(popup);
}
}
}
else
{
// An internal popup element should already exist
if (popupElem)
child = popup_;
else
{
for (unsigned i = nextInternalChild; i < children_.Size(); ++i)
{
if (children_[i]->IsInternal() && children_[i]->GetTypeName() == typeName)
{
child = children_[i];
nextInternalChild = i + 1;
break;
}
}
if (!child)
URHO3D_LOGWARNING("Could not find matching internal child element of type " + typeName + " in " + GetTypeName());
}
}
if (child)
{
if (!styleFile)
styleFile = GetDefaultStyle();
// As popup is not a child element in itself, the parental chain to acquire the default style file is broken for popup's child elements
// To recover from this, popup needs to have the default style set in its own instance so the popup's child elements can find it later
if (popupElem)
child->SetDefaultStyle(styleFile);
if (!child->LoadXML(childElem, styleFile, setInstanceDefault))
return false;
}
//.........这里部分代码省略.........
示例13: scale
bool AnimationSet2D::LoadAnimation(const XMLElement& animationElem)
{
SharedPtr<Animation2D> animation(new Animation2D(this));
String name = animationElem.GetAttribute("name");
animation->SetName(name);
float length = animationElem.GetFloat("length") * 0.001f;
animation->SetLength(length);
bool looped = true;
if (animationElem.HasAttribute("looping"))
looped = animationElem.GetBool("looping");
animation->SetLooped(looped);
// Load timelines
for (XMLElement timelineElem = animationElem.GetChild("timeline"); timelineElem; timelineElem = timelineElem.GetNext("timeline"))
{
Timeline2D timeline;
timeline.name_ = timelineElem.GetAttribute("name");
if (timelineElem.GetAttribute("object_type") == "bone")
timeline.type_ = OT_BONE;
else
timeline.type_ = OT_SPRITE;
for (XMLElement keyElem = timelineElem.GetChild("key"); keyElem; keyElem = keyElem.GetNext("key"))
{
TimelineKey2D key;
key.time_ = keyElem.GetFloat("time") * 0.001f;
key.spin_ = 1;
if (keyElem.HasAttribute("spin"))
key.spin_ = keyElem.GetInt("spin");
XMLElement childElem = keyElem.GetChild();
Vector2 position;
position.x_ = childElem.GetFloat("x");
position.y_ = childElem.GetFloat("y");
float angle = childElem.GetFloat("angle");
Vector2 scale(Vector2::ONE);
if (childElem.HasAttribute("scale_x"))
scale.x_ = childElem.GetFloat("scale_x");
if (childElem.HasAttribute("scale_y"))
scale.y_ = childElem.GetFloat("scale_y");
key.transform_ = Transform2D(position, angle, scale);
if (timeline.type_ == OT_SPRITE)
{
int folder = childElem.GetUInt("folder");
int file = childElem.GetUInt("file");
key.sprite_ = GetSprite(folder, file);
if (!key.sprite_)
{
LOGERROR("Could not find sprite");
return false;
}
if (childElem.HasAttribute("pivot_x"))
key.hotSpot_.x_ = childElem.GetFloat("pivot_x");
else
key.hotSpot_.x_ = key.sprite_->GetHotSpot().x_;
if (childElem.HasAttribute("pivot_y"))
key.hotSpot_.y_ = childElem.GetFloat("pivot_y");
else
key.hotSpot_.y_ = key.sprite_->GetHotSpot().y_;
if (childElem.HasAttribute("a"))
key.alpha_ = childElem.GetFloat("a");
}
timeline.timelineKeys_.Push(key);
}
// Add end key for looped animation
if (looped && timeline.timelineKeys_.Back().time_ != length)
{
TimelineKey2D key = timeline.timelineKeys_.Front();
key.time_ = length;
timeline.timelineKeys_.Push(key);
}
animation->AddTimeline(timeline);
}
// Load main line
XMLElement mainlineElem = animationElem.GetChild("mainline");
for (XMLElement keyElem = mainlineElem.GetChild("key"); keyElem; keyElem = keyElem.GetNext("key"))
{
MainlineKey2D mainlineKey;
int id = keyElem.GetInt("id");
mainlineKey.time_ = keyElem.GetFloat("time") * 0.001f;
for (XMLElement refElem = keyElem.GetChild(); refElem; refElem = refElem.GetNext())
{
Reference2D ref;
//.........这里部分代码省略.........