|
@@ -1022,7 +1022,7 @@ void Node::UpdateSmoothing(float constant, float squaredSnapThreshold)
|
|
|
MarkDirty();
|
|
MarkDirty();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-bool Node::Load(Deserializer& source, SceneResolver& resolver, bool readChildren, bool rewriteIDs)
|
|
|
|
|
|
|
+bool Node::Load(Deserializer& source, SceneResolver& resolver, bool readChildren, bool rewriteIDs, CreateMode mode)
|
|
|
{
|
|
{
|
|
|
// Remove all children and components first in case this is not a fresh load
|
|
// Remove all children and components first in case this is not a fresh load
|
|
|
RemoveAllChildren();
|
|
RemoveAllChildren();
|
|
@@ -1038,7 +1038,8 @@ bool Node::Load(Deserializer& source, SceneResolver& resolver, bool readChildren
|
|
|
VectorBuffer compBuffer(source, source.ReadVLE());
|
|
VectorBuffer compBuffer(source, source.ReadVLE());
|
|
|
ShortStringHash compType = compBuffer.ReadShortStringHash();
|
|
ShortStringHash compType = compBuffer.ReadShortStringHash();
|
|
|
unsigned compID = compBuffer.ReadUInt();
|
|
unsigned compID = compBuffer.ReadUInt();
|
|
|
- Component* newComponent = CreateComponent(compType, rewriteIDs ? 0 : compID, compID < FIRST_LOCAL_ID ? REPLICATED : LOCAL);
|
|
|
|
|
|
|
+ Component* newComponent = CreateComponent(compType, rewriteIDs ? 0 : compID, (mode == REPLICATED &&
|
|
|
|
|
+ compID < FIRST_LOCAL_ID) ? REPLICATED : LOCAL);
|
|
|
if (newComponent)
|
|
if (newComponent)
|
|
|
{
|
|
{
|
|
|
resolver.AddComponent(compID, newComponent);
|
|
resolver.AddComponent(compID, newComponent);
|
|
@@ -1054,16 +1055,17 @@ bool Node::Load(Deserializer& source, SceneResolver& resolver, bool readChildren
|
|
|
for (unsigned i = 0; i < numChildren; ++i)
|
|
for (unsigned i = 0; i < numChildren; ++i)
|
|
|
{
|
|
{
|
|
|
unsigned nodeID = source.ReadUInt();
|
|
unsigned nodeID = source.ReadUInt();
|
|
|
- Node* newNode = CreateChild(rewriteIDs ? 0 : nodeID, nodeID < FIRST_LOCAL_ID ? REPLICATED : LOCAL);
|
|
|
|
|
|
|
+ Node* newNode = CreateChild(rewriteIDs ? 0 : nodeID, (mode == REPLICATED && nodeID < FIRST_LOCAL_ID) ? REPLICATED :
|
|
|
|
|
+ LOCAL);
|
|
|
resolver.AddNode(nodeID, newNode);
|
|
resolver.AddNode(nodeID, newNode);
|
|
|
- if (!newNode->Load(source, resolver, readChildren, rewriteIDs))
|
|
|
|
|
|
|
+ if (!newNode->Load(source, resolver, readChildren, rewriteIDs, mode))
|
|
|
return false;
|
|
return false;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
return true;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-bool Node::LoadXML(const XMLElement& source, SceneResolver& resolver, bool readChildren, bool rewriteIDs)
|
|
|
|
|
|
|
+bool Node::LoadXML(const XMLElement& source, SceneResolver& resolver, bool readChildren, bool rewriteIDs, CreateMode mode)
|
|
|
{
|
|
{
|
|
|
// Remove all children and components first in case this is not a fresh load
|
|
// Remove all children and components first in case this is not a fresh load
|
|
|
RemoveAllChildren();
|
|
RemoveAllChildren();
|
|
@@ -1077,8 +1079,8 @@ bool Node::LoadXML(const XMLElement& source, SceneResolver& resolver, bool readC
|
|
|
{
|
|
{
|
|
|
String typeName = compElem.GetString("type");
|
|
String typeName = compElem.GetString("type");
|
|
|
unsigned compID = compElem.GetInt("id");
|
|
unsigned compID = compElem.GetInt("id");
|
|
|
- Component* newComponent = CreateComponent(ShortStringHash(typeName), rewriteIDs ? 0 : compID, compID < FIRST_LOCAL_ID ?
|
|
|
|
|
- REPLICATED : LOCAL);
|
|
|
|
|
|
|
+ Component* newComponent = CreateComponent(ShortStringHash(typeName), rewriteIDs ? 0 : compID, (mode == REPLICATED &&
|
|
|
|
|
+ compID < FIRST_LOCAL_ID) ? REPLICATED : LOCAL);
|
|
|
if (newComponent)
|
|
if (newComponent)
|
|
|
{
|
|
{
|
|
|
resolver.AddComponent(compID, newComponent);
|
|
resolver.AddComponent(compID, newComponent);
|
|
@@ -1096,9 +1098,10 @@ bool Node::LoadXML(const XMLElement& source, SceneResolver& resolver, bool readC
|
|
|
while (childElem)
|
|
while (childElem)
|
|
|
{
|
|
{
|
|
|
unsigned nodeID = childElem.GetInt("id");
|
|
unsigned nodeID = childElem.GetInt("id");
|
|
|
- Node* newNode = CreateChild(rewriteIDs ? 0 : nodeID, nodeID < FIRST_LOCAL_ID ? REPLICATED : LOCAL);
|
|
|
|
|
|
|
+ Node* newNode = CreateChild(rewriteIDs ? 0 : nodeID, (mode == REPLICATED && nodeID < FIRST_LOCAL_ID) ? REPLICATED :
|
|
|
|
|
+ LOCAL);
|
|
|
resolver.AddNode(nodeID, newNode);
|
|
resolver.AddNode(nodeID, newNode);
|
|
|
- if (!newNode->LoadXML(childElem, resolver, readChildren, rewriteIDs))
|
|
|
|
|
|
|
+ if (!newNode->LoadXML(childElem, resolver, readChildren, rewriteIDs, mode))
|
|
|
return false;
|
|
return false;
|
|
|
|
|
|
|
|
childElem = childElem.GetNext("node");
|
|
childElem = childElem.GetNext("node");
|