Browse Source

Added setInstanceDefault parameter also to binary serialization.
Comments cleanup.

Lasse Öörni 12 years ago
parent
commit
3dac8c7a59

+ 48 - 48
Docs/ScriptAPI.dox

@@ -1317,7 +1317,7 @@ Serializable
 
 Methods:<br>
 - void SendEvent(const String&, VariantMap& arg1 = VariantMap ( ))
-- bool Load(File@)
+- bool Load(File@, bool arg1 = false)
 - bool Save(File@)
 - bool LoadXML(const XMLElement&, bool arg1 = false)
 - bool SaveXML(XMLElement&)
@@ -1341,7 +1341,7 @@ Component
 
 Methods:<br>
 - void SendEvent(const String&, VariantMap& arg1 = VariantMap ( ))
-- bool Load(File@)
+- bool Load(File@, bool arg1 = false)
 - bool Save(File@)
 - bool LoadXML(const XMLElement&, bool arg1 = false)
 - bool SaveXML(XMLElement&)
@@ -1372,7 +1372,7 @@ Node
 
 Methods:<br>
 - void SendEvent(const String&, VariantMap& arg1 = VariantMap ( ))
-- bool Load(File@)
+- bool Load(File@, bool arg1 = false)
 - bool Save(File@)
 - bool LoadXML(const XMLElement&, bool arg1 = false)
 - bool SaveXML(XMLElement&)
@@ -1464,7 +1464,7 @@ SmoothedTransform
 
 Methods:<br>
 - void SendEvent(const String&, VariantMap& arg1 = VariantMap ( ))
-- bool Load(File@)
+- bool Load(File@, bool arg1 = false)
 - bool Save(File@)
 - bool LoadXML(const XMLElement&, bool arg1 = false)
 - bool SaveXML(XMLElement&)
@@ -1501,7 +1501,7 @@ Scene
 
 Methods:<br>
 - void SendEvent(const String&, VariantMap& arg1 = VariantMap ( ))
-- bool Load(File@)
+- bool Load(File@, bool arg1 = false)
 - bool Save(File@)
 - bool LoadXML(const XMLElement&, bool arg1 = false)
 - bool SaveXML(XMLElement&)
@@ -1639,7 +1639,7 @@ DebugRenderer
 
 Methods:<br>
 - void SendEvent(const String&, VariantMap& arg1 = VariantMap ( ))
-- bool Load(File@)
+- bool Load(File@, bool arg1 = false)
 - bool Save(File@)
 - bool LoadXML(const XMLElement&, bool arg1 = false)
 - bool SaveXML(XMLElement&)
@@ -1677,7 +1677,7 @@ Camera
 
 Methods:<br>
 - void SendEvent(const String&, VariantMap& arg1 = VariantMap ( ))
-- bool Load(File@)
+- bool Load(File@, bool arg1 = false)
 - bool Save(File@)
 - bool LoadXML(const XMLElement&, bool arg1 = false)
 - bool SaveXML(XMLElement&)
@@ -2070,7 +2070,7 @@ Drawable
 
 Methods:<br>
 - void SendEvent(const String&, VariantMap& arg1 = VariantMap ( ))
-- bool Load(File@)
+- bool Load(File@, bool arg1 = false)
 - bool Save(File@)
 - bool LoadXML(const XMLElement&, bool arg1 = false)
 - bool SaveXML(XMLElement&)
@@ -2135,7 +2135,7 @@ Light
 
 Methods:<br>
 - void SendEvent(const String&, VariantMap& arg1 = VariantMap ( ))
-- bool Load(File@)
+- bool Load(File@, bool arg1 = false)
 - bool Save(File@)
 - bool LoadXML(const XMLElement&, bool arg1 = false)
 - bool SaveXML(XMLElement&)
@@ -2197,7 +2197,7 @@ Zone
 
 Methods:<br>
 - void SendEvent(const String&, VariantMap& arg1 = VariantMap ( ))
-- bool Load(File@)
+- bool Load(File@, bool arg1 = false)
 - bool Save(File@)
 - bool LoadXML(const XMLElement&, bool arg1 = false)
 - bool SaveXML(XMLElement&)
@@ -2252,7 +2252,7 @@ StaticModel
 
 Methods:<br>
 - void SendEvent(const String&, VariantMap& arg1 = VariantMap ( ))
-- bool Load(File@)
+- bool Load(File@, bool arg1 = false)
 - bool Save(File@)
 - bool LoadXML(const XMLElement&, bool arg1 = false)
 - bool SaveXML(XMLElement&)
@@ -2303,7 +2303,7 @@ Skybox
 
 Methods:<br>
 - void SendEvent(const String&, VariantMap& arg1 = VariantMap ( ))
-- bool Load(File@)
+- bool Load(File@, bool arg1 = false)
 - bool Save(File@)
 - bool LoadXML(const XMLElement&, bool arg1 = false)
 - bool SaveXML(XMLElement&)
@@ -2372,7 +2372,7 @@ AnimatedModel
 
 Methods:<br>
 - void SendEvent(const String&, VariantMap& arg1 = VariantMap ( ))
-- bool Load(File@)
+- bool Load(File@, bool arg1 = false)
 - bool Save(File@)
 - bool LoadXML(const XMLElement&, bool arg1 = false)
 - bool SaveXML(XMLElement&)
@@ -2441,7 +2441,7 @@ AnimationController
 
 Methods:<br>
 - void SendEvent(const String&, VariantMap& arg1 = VariantMap ( ))
-- bool Load(File@)
+- bool Load(File@, bool arg1 = false)
 - bool Save(File@)
 - bool LoadXML(const XMLElement&, bool arg1 = false)
 - bool SaveXML(XMLElement&)
@@ -2509,7 +2509,7 @@ BillboardSet
 
 Methods:<br>
 - void SendEvent(const String&, VariantMap& arg1 = VariantMap ( ))
-- bool Load(File@)
+- bool Load(File@, bool arg1 = false)
 - bool Save(File@)
 - bool LoadXML(const XMLElement&, bool arg1 = false)
 - bool SaveXML(XMLElement&)
@@ -2562,7 +2562,7 @@ ParticleEmitter
 
 Methods:<br>
 - void SendEvent(const String&, VariantMap& arg1 = VariantMap ( ))
-- bool Load(File@)
+- bool Load(File@, bool arg1 = false)
 - bool Save(File@)
 - bool LoadXML(const XMLElement&, bool arg1 = false)
 - bool SaveXML(XMLElement&)
@@ -2616,7 +2616,7 @@ CustomGeometry
 
 Methods:<br>
 - void SendEvent(const String&, VariantMap& arg1 = VariantMap ( ))
-- bool Load(File@)
+- bool Load(File@, bool arg1 = false)
 - bool Save(File@)
 - bool LoadXML(const XMLElement&, bool arg1 = false)
 - bool SaveXML(XMLElement&)
@@ -2673,7 +2673,7 @@ DecalSet
 
 Methods:<br>
 - void SendEvent(const String&, VariantMap& arg1 = VariantMap ( ))
-- bool Load(File@)
+- bool Load(File@, bool arg1 = false)
 - bool Save(File@)
 - bool LoadXML(const XMLElement&, bool arg1 = false)
 - bool SaveXML(XMLElement&)
@@ -2727,7 +2727,7 @@ TerrainPatch
 
 Methods:<br>
 - void SendEvent(const String&, VariantMap& arg1 = VariantMap ( ))
-- bool Load(File@)
+- bool Load(File@, bool arg1 = false)
 - bool Save(File@)
 - bool LoadXML(const XMLElement&, bool arg1 = false)
 - bool SaveXML(XMLElement&)
@@ -2771,7 +2771,7 @@ Terrain
 
 Methods:<br>
 - void SendEvent(const String&, VariantMap& arg1 = VariantMap ( ))
-- bool Load(File@)
+- bool Load(File@, bool arg1 = false)
 - bool Save(File@)
 - bool LoadXML(const XMLElement&, bool arg1 = false)
 - bool SaveXML(XMLElement&)
@@ -2832,7 +2832,7 @@ Octree
 
 Methods:<br>
 - void SendEvent(const String&, VariantMap& arg1 = VariantMap ( ))
-- bool Load(File@)
+- bool Load(File@, bool arg1 = false)
 - bool Save(File@)
 - bool LoadXML(const XMLElement&, bool arg1 = false)
 - bool SaveXML(XMLElement&)
@@ -3039,7 +3039,7 @@ SoundListener
 
 Methods:<br>
 - void SendEvent(const String&, VariantMap& arg1 = VariantMap ( ))
-- bool Load(File@)
+- bool Load(File@, bool arg1 = false)
 - bool Save(File@)
 - bool LoadXML(const XMLElement&, bool arg1 = false)
 - bool SaveXML(XMLElement&)
@@ -3070,7 +3070,7 @@ SoundSource
 
 Methods:<br>
 - void SendEvent(const String&, VariantMap& arg1 = VariantMap ( ))
-- bool Load(File@)
+- bool Load(File@, bool arg1 = false)
 - bool Save(File@)
 - bool LoadXML(const XMLElement&, bool arg1 = false)
 - bool SaveXML(XMLElement&)
@@ -3115,7 +3115,7 @@ SoundSource3D
 
 Methods:<br>
 - void SendEvent(const String&, VariantMap& arg1 = VariantMap ( ))
-- bool Load(File@)
+- bool Load(File@, bool arg1 = false)
 - bool Save(File@)
 - bool LoadXML(const XMLElement&, bool arg1 = false)
 - bool SaveXML(XMLElement&)
@@ -3206,7 +3206,7 @@ UIElement
 
 Methods:<br>
 - void SendEvent(const String&, VariantMap& arg1 = VariantMap ( ))
-- bool Load(File@)
+- bool Load(File@, bool arg1 = false)
 - bool Save(File@)
 - bool LoadXML(const XMLElement&, bool arg1 = false)
 - bool SaveXML(XMLElement&)
@@ -3322,7 +3322,7 @@ BorderImage
 
 Methods:<br>
 - void SendEvent(const String&, VariantMap& arg1 = VariantMap ( ))
-- bool Load(File@)
+- bool Load(File@, bool arg1 = false)
 - bool Save(File@)
 - bool LoadXML(const XMLElement&, bool arg1 = false)
 - bool SaveXML(XMLElement&)
@@ -3446,7 +3446,7 @@ Sprite
 
 Methods:<br>
 - void SendEvent(const String&, VariantMap& arg1 = VariantMap ( ))
-- bool Load(File@)
+- bool Load(File@, bool arg1 = false)
 - bool Save(File@)
 - bool LoadXML(const XMLElement&, bool arg1 = false)
 - bool SaveXML(XMLElement&)
@@ -3536,7 +3536,7 @@ Button
 
 Methods:<br>
 - void SendEvent(const String&, VariantMap& arg1 = VariantMap ( ))
-- bool Load(File@)
+- bool Load(File@, bool arg1 = false)
 - bool Save(File@)
 - bool LoadXML(const XMLElement&, bool arg1 = false)
 - bool SaveXML(XMLElement&)
@@ -3667,7 +3667,7 @@ CheckBox
 
 Methods:<br>
 - void SendEvent(const String&, VariantMap& arg1 = VariantMap ( ))
-- bool Load(File@)
+- bool Load(File@, bool arg1 = false)
 - bool Save(File@)
 - bool LoadXML(const XMLElement&, bool arg1 = false)
 - bool SaveXML(XMLElement&)
@@ -3794,7 +3794,7 @@ Cursor
 
 Methods:<br>
 - void SendEvent(const String&, VariantMap& arg1 = VariantMap ( ))
-- bool Load(File@)
+- bool Load(File@, bool arg1 = false)
 - bool Save(File@)
 - bool LoadXML(const XMLElement&, bool arg1 = false)
 - bool SaveXML(XMLElement&)
@@ -3920,7 +3920,7 @@ Slider
 
 Methods:<br>
 - void SendEvent(const String&, VariantMap& arg1 = VariantMap ( ))
-- bool Load(File@)
+- bool Load(File@, bool arg1 = false)
 - bool Save(File@)
 - bool LoadXML(const XMLElement&, bool arg1 = false)
 - bool SaveXML(XMLElement&)
@@ -4050,7 +4050,7 @@ ScrollBar
 
 Methods:<br>
 - void SendEvent(const String&, VariantMap& arg1 = VariantMap ( ))
-- bool Load(File@)
+- bool Load(File@, bool arg1 = false)
 - bool Save(File@)
 - bool LoadXML(const XMLElement&, bool arg1 = false)
 - bool SaveXML(XMLElement&)
@@ -4178,7 +4178,7 @@ ScrollView
 
 Methods:<br>
 - void SendEvent(const String&, VariantMap& arg1 = VariantMap ( ))
-- bool Load(File@)
+- bool Load(File@, bool arg1 = false)
 - bool Save(File@)
 - bool LoadXML(const XMLElement&, bool arg1 = false)
 - bool SaveXML(XMLElement&)
@@ -4304,7 +4304,7 @@ ListView
 
 Methods:<br>
 - void SendEvent(const String&, VariantMap& arg1 = VariantMap ( ))
-- bool Load(File@)
+- bool Load(File@, bool arg1 = false)
 - bool Save(File@)
 - bool LoadXML(const XMLElement&, bool arg1 = false)
 - bool SaveXML(XMLElement&)
@@ -4459,7 +4459,7 @@ Text
 
 Methods:<br>
 - void SendEvent(const String&, VariantMap& arg1 = VariantMap ( ))
-- bool Load(File@)
+- bool Load(File@, bool arg1 = false)
 - bool Save(File@)
 - bool LoadXML(const XMLElement&, bool arg1 = false)
 - bool SaveXML(XMLElement&)
@@ -4591,7 +4591,7 @@ Text3D
 
 Methods:<br>
 - void SendEvent(const String&, VariantMap& arg1 = VariantMap ( ))
-- bool Load(File@)
+- bool Load(File@, bool arg1 = false)
 - bool Save(File@)
 - bool LoadXML(const XMLElement&, bool arg1 = false)
 - bool SaveXML(XMLElement&)
@@ -4654,7 +4654,7 @@ LineEdit
 
 Methods:<br>
 - void SendEvent(const String&, VariantMap& arg1 = VariantMap ( ))
-- bool Load(File@)
+- bool Load(File@, bool arg1 = false)
 - bool Save(File@)
 - bool LoadXML(const XMLElement&, bool arg1 = false)
 - bool SaveXML(XMLElement&)
@@ -4789,7 +4789,7 @@ Menu
 
 Methods:<br>
 - void SendEvent(const String&, VariantMap& arg1 = VariantMap ( ))
-- bool Load(File@)
+- bool Load(File@, bool arg1 = false)
 - bool Save(File@)
 - bool LoadXML(const XMLElement&, bool arg1 = false)
 - bool SaveXML(XMLElement&)
@@ -4927,7 +4927,7 @@ DropDownList
 
 Methods:<br>
 - void SendEvent(const String&, VariantMap& arg1 = VariantMap ( ))
-- bool Load(File@)
+- bool Load(File@, bool arg1 = false)
 - bool Save(File@)
 - bool LoadXML(const XMLElement&, bool arg1 = false)
 - bool SaveXML(XMLElement&)
@@ -5076,7 +5076,7 @@ Window
 
 Methods:<br>
 - void SendEvent(const String&, VariantMap& arg1 = VariantMap ( ))
-- bool Load(File@)
+- bool Load(File@, bool arg1 = false)
 - bool Save(File@)
 - bool LoadXML(const XMLElement&, bool arg1 = false)
 - bool SaveXML(XMLElement&)
@@ -5281,7 +5281,7 @@ NetworkPriority
 
 Methods:<br>
 - void SendEvent(const String&, VariantMap& arg1 = VariantMap ( ))
-- bool Load(File@)
+- bool Load(File@, bool arg1 = false)
 - bool Save(File@)
 - bool LoadXML(const XMLElement&, bool arg1 = false)
 - bool SaveXML(XMLElement&)
@@ -5376,7 +5376,7 @@ CollisionShape
 
 Methods:<br>
 - void SendEvent(const String&, VariantMap& arg1 = VariantMap ( ))
-- bool Load(File@)
+- bool Load(File@, bool arg1 = false)
 - bool Save(File@)
 - bool LoadXML(const XMLElement&, bool arg1 = false)
 - bool SaveXML(XMLElement&)
@@ -5424,7 +5424,7 @@ RigidBody
 
 Methods:<br>
 - void SendEvent(const String&, VariantMap& arg1 = VariantMap ( ))
-- bool Load(File@)
+- bool Load(File@, bool arg1 = false)
 - bool Save(File@)
 - bool LoadXML(const XMLElement&, bool arg1 = false)
 - bool SaveXML(XMLElement&)
@@ -5489,7 +5489,7 @@ Constraint
 
 Methods:<br>
 - void SendEvent(const String&, VariantMap& arg1 = VariantMap ( ))
-- bool Load(File@)
+- bool Load(File@, bool arg1 = false)
 - bool Save(File@)
 - bool LoadXML(const XMLElement&, bool arg1 = false)
 - bool SaveXML(XMLElement&)
@@ -5542,7 +5542,7 @@ PhysicsWorld
 
 Methods:<br>
 - void SendEvent(const String&, VariantMap& arg1 = VariantMap ( ))
-- bool Load(File@)
+- bool Load(File@, bool arg1 = false)
 - bool Save(File@)
 - bool LoadXML(const XMLElement&, bool arg1 = false)
 - bool SaveXML(XMLElement&)
@@ -5585,7 +5585,7 @@ Navigable
 
 Methods:<br>
 - void SendEvent(const String&, VariantMap& arg1 = VariantMap ( ))
-- bool Load(File@)
+- bool Load(File@, bool arg1 = false)
 - bool Save(File@)
 - bool LoadXML(const XMLElement&, bool arg1 = false)
 - bool SaveXML(XMLElement&)
@@ -5617,7 +5617,7 @@ NavigationMesh
 
 Methods:<br>
 - void SendEvent(const String&, VariantMap& arg1 = VariantMap ( ))
-- bool Load(File@)
+- bool Load(File@, bool arg1 = false)
 - bool Save(File@)
 - bool LoadXML(const XMLElement&, bool arg1 = false)
 - bool SaveXML(XMLElement&)
@@ -5694,7 +5694,7 @@ ScriptInstance
 
 Methods:<br>
 - void SendEvent(const String&, VariantMap& arg1 = VariantMap ( ))
-- bool Load(File@)
+- bool Load(File@, bool arg1 = false)
 - bool Save(File@)
 - bool LoadXML(const XMLElement&, bool arg1 = false)
 - bool SaveXML(XMLElement&)

+ 4 - 4
Engine/Engine/APITemplates.h

@@ -350,10 +350,10 @@ static const AttributeInfo& SerializableGetAttributeInfo(unsigned index, Seriali
         return attributes->At(index);
 }
 
-static bool SerializableLoad(File* file, Serializable* ptr)
+static bool SerializableLoad(File* file, bool setInstanceDefault, Serializable* ptr)
 {
     if (file)
-        return ptr->Load(*file);
+        return ptr->Load(*file, setInstanceDefault);
     else
         return false;
 }
@@ -370,9 +370,9 @@ static bool SerializableSave(File* file, Serializable* ptr)
 template <class T> void RegisterSerializable(asIScriptEngine* engine, const char* className)
 {
     RegisterObject<T>(engine, className);
-    engine->RegisterObjectMethod(className, "bool Load(File@+)", asFUNCTION(SerializableLoad), asCALL_CDECL_OBJLAST);
+    engine->RegisterObjectMethod(className, "bool Load(File@+, bool setInstanceDefault = false)", asFUNCTION(SerializableLoad), asCALL_CDECL_OBJLAST);
     engine->RegisterObjectMethod(className, "bool Save(File@+)", asFUNCTION(SerializableSave), asCALL_CDECL_OBJLAST);
-    engine->RegisterObjectMethod(className, "bool LoadXML(const XMLElement&, bool arg1 = false)", asMETHODPR(T, LoadXML, (const XMLElement&, bool), bool), asCALL_THISCALL);
+    engine->RegisterObjectMethod(className, "bool LoadXML(const XMLElement&, bool setInstanceDefault = false)", asMETHODPR(T, LoadXML, (const XMLElement&, bool), bool), asCALL_THISCALL);
     engine->RegisterObjectMethod(className, "bool SaveXML(XMLElement&)", asMETHODPR(T, SaveXML, (XMLElement&), bool), asCALL_THISCALL);
     engine->RegisterObjectMethod(className, "void ApplyAttributes()", asMETHODPR(T, ApplyAttributes, (), void), asCALL_THISCALL);
     engine->RegisterObjectMethod(className, "bool SetAttribute(const String&in, const Variant&in)", asMETHODPR(T, SetAttribute, (const String&, const Variant&), bool), asCALL_THISCALL);

+ 2 - 2
Engine/Graphics/AnimatedModel.cpp

@@ -97,10 +97,10 @@ void AnimatedModel::RegisterObject(Context* context)
     REF_ACCESSOR_ATTRIBUTE(AnimatedModel, VAR_BUFFER, "Morphs", GetMorphsAttr, SetMorphsAttr, PODVector<unsigned char>, Variant::emptyBuffer, AM_DEFAULT | AM_NOEDIT);
 }
 
-bool AnimatedModel::Load(Deserializer& source)
+bool AnimatedModel::Load(Deserializer& source, bool setInstanceDefault)
 {
     loading_ = true;
-    bool success = Component::Load(source);
+    bool success = Component::Load(source, setInstanceDefault);
     loading_ = false;
 
     return success;

+ 1 - 1
Engine/Graphics/AnimatedModel.h

@@ -48,7 +48,7 @@ public:
     static void RegisterObject(Context* context);
 
     /// Load from binary data. Return true if successful.
-    virtual bool Load(Deserializer& source);
+    virtual bool Load(Deserializer& source, bool setInstanceDefault = false);
     /// Load from XML data. Return true if successful.
     virtual bool LoadXML(const XMLElement& source, bool setInstanceDefault = false);
     /// Apply attribute changes that can not be applied immediately. Called after scene load or a network update.

+ 1 - 1
Engine/Graphics/Light.cpp

@@ -159,7 +159,7 @@ void Light::OnSetAttribute(const AttributeInfo& attr, const Variant& src)
 
 void Light::ProcessRayQuery(const RayOctreeQuery& query, PODVector<RayQueryResult>& results)
 {
-    // Do not record a raycast result for a directional light, as they would overwhelm all other results
+    // Do not record a raycast result for a directional light, as it would block all other results
     if (lightType_ == LIGHT_DIRECTIONAL)
         return;
     

+ 1 - 1
Engine/Graphics/Skybox.cpp

@@ -53,7 +53,7 @@ void Skybox::RegisterObject(Context* context)
 
 void Skybox::ProcessRayQuery(const RayOctreeQuery& query, PODVector<RayQueryResult>& results)
 {
-    // Return no ray hits, as camera rays practically always originate within the bounding box, blocking any other results
+    // Do not record a raycast result for a skybox, as it would block all other results
 }
 
 void Skybox::UpdateBatches(const FrameInfo& frame)

+ 1 - 1
Engine/Scene/Node.cpp

@@ -86,7 +86,7 @@ void Node::OnSetAttribute(const AttributeInfo& attr, const Variant& src)
     MarkNetworkUpdate();
 }
 
-bool Node::Load(Deserializer& source)
+bool Node::Load(Deserializer& source, bool setInstanceDefault)
 {
     SceneResolver resolver;
 

+ 1 - 1
Engine/Scene/Node.h

@@ -61,7 +61,7 @@ public:
     /// Handle attribute write access.
     virtual void OnSetAttribute(const AttributeInfo& attr, const Variant& src);
     /// Load from binary data. Return true if successful.
-    virtual bool Load(Deserializer& source);
+    virtual bool Load(Deserializer& source, bool setInstanceDefault = false);
     /// Load from XML data. Return true if successful.
     virtual bool LoadXML(const XMLElement& source, bool setInstanceDefault = false);
     /// Save as binary data. Return true if successful.

+ 2 - 2
Engine/Scene/Scene.cpp

@@ -102,7 +102,7 @@ void Scene::RegisterObject(Context* context)
     REF_ACCESSOR_ATTRIBUTE(Scene, VAR_BUFFER, "Network Rotation", GetNetRotationAttr, SetNetRotationAttr, PODVector<unsigned char>, Variant::emptyBuffer, AM_NET | AM_LATESTDATA | AM_NOEDIT);
 }
 
-bool Scene::Load(Deserializer& source)
+bool Scene::Load(Deserializer& source, bool setInstanceDefault)
 {
     PROFILE(LoadScene);
 
@@ -120,7 +120,7 @@ bool Scene::Load(Deserializer& source)
     Clear();
 
     // Load the whole scene, then perform post-load if successfully loaded
-    if (Node::Load(source))
+    if (Node::Load(source, setInstanceDefault))
     {
         FinishLoading(&source);
         return true;

+ 1 - 1
Engine/Scene/Scene.h

@@ -71,7 +71,7 @@ public:
     static void RegisterObject(Context* context);
 
     /// Load from binary data. Return true if successful.
-    virtual bool Load(Deserializer& source);
+    virtual bool Load(Deserializer& source, bool setInstanceDefault = false);
     /// Save to binary data. Return true if successful.
     virtual bool Save(Serializer& dest);
     /// Load from XML data. Return true if successful.

+ 11 - 2
Engine/Scene/Serializable.cpp

@@ -238,7 +238,7 @@ const Vector<AttributeInfo>* Serializable::GetNetworkAttributes() const
     return networkState_ ? networkState_->attributes_ : context_->GetNetworkAttributes(GetType());
 }
 
-bool Serializable::Load(Deserializer& source)
+bool Serializable::Load(Deserializer& source, bool setInstanceDefault)
 {
     const Vector<AttributeInfo>* attributes = GetAttributes();
     if (!attributes)
@@ -256,7 +256,16 @@ bool Serializable::Load(Deserializer& source)
             return false;
         }
 
-        OnSetAttribute(attr, source.ReadVariant(attr.type_));
+        Variant varValue = source.ReadVariant(attr.type_);
+        OnSetAttribute(attr, varValue);
+        
+        if (setInstanceDefault)
+        {
+            // Allocate the instance level default value
+            if (!instanceDefaultValues_)
+                instanceDefaultValues_ = new VariantMap();
+            instanceDefaultValues_->operator[] (attr.name_) = varValue;
+        }
     }
 
     return true;

+ 2 - 2
Engine/Scene/Serializable.h

@@ -58,8 +58,8 @@ public:
     virtual const Vector<AttributeInfo>* GetAttributes() const;
     /// Return network replication attribute descriptions, or null if none defined.
     virtual const Vector<AttributeInfo>* GetNetworkAttributes() const;
-    /// Load from binary data. Return true if successful.
-    virtual bool Load(Deserializer& source);
+    /// Load from binary data. When setInstanceDefault is set to true, after setting the attribute value, store the value as instance's default value. Return true if successful.
+    virtual bool Load(Deserializer& source, bool setInstanceDefault = false);
     /// Save as binary data. Return true if successful.
     virtual bool Save(Serializer& dest);
     /// Load from XML data. When setInstanceDefault is set to true, after setting the attribute value, store the value as instance's default value. Return true if successful.