Fix crash in MissingScript if script is still missing after deserialization
#1924
This commit is contained in:
@@ -42,24 +42,7 @@ public:
|
||||
/// <summary>
|
||||
/// Field for assigning new script to transfer data to.
|
||||
/// </summary>
|
||||
API_PROPERTY() void SetReferenceScript(const ScriptingObjectReference<Script>& value)
|
||||
{
|
||||
_referenceScript = value;
|
||||
if (Data.IsEmpty())
|
||||
return;
|
||||
rapidjson_flax::Document document;
|
||||
document.Parse(Data.ToStringAnsi().GetText());
|
||||
|
||||
auto modifier = Cache::ISerializeModifier.Get();
|
||||
_referenceScript->Deserialize(document, modifier.Value);
|
||||
|
||||
DeleteObject();
|
||||
}
|
||||
API_PROPERTY() void SetReferenceScript(const ScriptingObjectReference<Script>& value);
|
||||
};
|
||||
|
||||
inline MissingScript::MissingScript(const SpawnParams& params)
|
||||
: Script(params)
|
||||
{
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
@@ -19,6 +19,28 @@
|
||||
#include "Engine/Threading/Threading.h"
|
||||
#endif
|
||||
|
||||
MissingScript::MissingScript(const SpawnParams& params)
|
||||
: Script(params)
|
||||
{
|
||||
}
|
||||
|
||||
void MissingScript::SetReferenceScript(const ScriptingObjectReference<Script>& value)
|
||||
{
|
||||
if (_referenceScript == value)
|
||||
return;
|
||||
_referenceScript = value;
|
||||
if (Data.IsEmpty() || !_referenceScript)
|
||||
return;
|
||||
rapidjson_flax::Document document;
|
||||
document.Parse(Data.ToStringAnsi().GetText());
|
||||
auto modifier = Cache::ISerializeModifier.Get();
|
||||
const auto idsMapping = Scripting::ObjectsLookupIdMapping.Get();
|
||||
if (idsMapping)
|
||||
modifier->IdsMapping = *idsMapping;
|
||||
_referenceScript->Deserialize(document, modifier.Value);
|
||||
DeleteObject();
|
||||
}
|
||||
|
||||
SceneObjectsFactory::Context::Context(ISerializeModifier* modifier)
|
||||
: Modifier(modifier)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user