diff --git a/Engine/source/console/compiledEval.cpp b/Engine/source/console/compiledEval.cpp index 38f1ec589..1d872df8a 100644 --- a/Engine/source/console/compiledEval.cpp +++ b/Engine/source/console/compiledEval.cpp @@ -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(parent); + if (parent_db) + { + SimDataBlock* currentNewObject_db = dynamic_cast(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; diff --git a/Engine/source/console/simObject.h b/Engine/source/console/simObject.h index 0585eda45..1261afd55 100644 --- a/Engine/source/console/simObject.h +++ b/Engine/source/console/simObject.h @@ -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() { } };