copy-on-reload -- The datablock copy op, ":" is modified to copy on reload as well as on creation.

reload-reset -- adds virtual method that is called when a datablock is reloaded.
This commit is contained in:
Marc Chapman 2017-07-26 21:40:27 +01:00
parent f9f05f154f
commit 39b62b1461
2 changed files with 35 additions and 0 deletions

View file

@ -24,6 +24,7 @@
// Arcane-FX for MIT Licensed Open Source version of Torque 3D from GarageGames
// Copyright (C) 2015 Faust Logic, Inc.
//~~~~~~~~~~~~~~~~~~~~//~~~~~~~~~~~~~~~~~~~~//~~~~~~~~~~~~~~~~~~~~//~~~~~~~~~~~~~~~~~~~~~//
#include "platform/platform.h"
#include "console/console.h"
@ -965,6 +966,38 @@ breakContinue:
currentNewObject->setModDynamicFields(true);
}
}
else
{
currentNewObject->reloadReset(); // AFX (reload-reset)
// Does it have a parent object? (ie, the copy constructor : syntax, not inheriance)
if(*objParent)
{
// Find it!
SimObject *parent;
if(Sim::findObject(objParent, parent))
{
// Con::printf(" - Parent object found: %s", parent->getClassName());
// temporarily block name change
SimObject::preventNameChanging = true;
currentNewObject->setCopySource( parent );
currentNewObject->assignFieldsFrom(parent);
// restore name changing
SimObject::preventNameChanging = false;
// copy any substitution statements
SimDataBlock* parent_db = dynamic_cast<SimDataBlock*>(parent);
if (parent_db)
{
SimDataBlock* currentNewObject_db = dynamic_cast<SimDataBlock*>(currentNewObject);
if (currentNewObject_db)
currentNewObject_db->copySubstitutionsFrom(parent_db);
}
}
else
Con::errorf(ConsoleLogEntry::General, "%d: Unable to find parent object %s for %s.", lineNumber, objParent, (const char*)callArgv[1]);
}
}
// Advance the IP past the create info...
ip += 7;

View file

@ -980,6 +980,8 @@ public:
/*C*/ SimObject(const SimObject&, bool = false);
bool isTempClone() const { return is_temp_clone; }
virtual bool allowSubstitutions() const { return false; }
public:
virtual void reloadReset() { }
};