diff --git a/Engine/source/console/compiledEval.cpp b/Engine/source/console/compiledEval.cpp index bd4a7a5d9..a989826b4 100644 --- a/Engine/source/console/compiledEval.cpp +++ b/Engine/source/console/compiledEval.cpp @@ -994,6 +994,7 @@ breakContinue: // This error is usually caused by failing to call Parent::initPersistFields in the class' initPersistFields(). Con::warnf(ConsoleLogEntry::General, "%s: Register object failed for object %s of class %s.", getFileLine(ip), currentNewObject->getName(), currentNewObject->getClassName()); delete currentNewObject; + currentNewObject = NULL; ip = failJump; // Prevent stack value corruption CSTK.popFrame(); @@ -1094,6 +1095,9 @@ breakContinue: case OP_FINISH_OBJECT: { + if (currentNewObject) + currentNewObject->onPostAdd(); + //Assert( objectCreationStackIndex >= 0 ); // Restore the object info from the stack [7/9/2007 Black] currentNewObject = objectCreationStack[ --objectCreationStackIndex ].newObject; diff --git a/Engine/source/console/simObject.h b/Engine/source/console/simObject.h index eb6f3f0e0..8a38e8675 100644 --- a/Engine/source/console/simObject.h +++ b/Engine/source/console/simObject.h @@ -606,6 +606,10 @@ class SimObject: public ConsoleObject, public TamlCallbacks /// Called when the object's name is changed. virtual void onNameChange(const char *name); + /// Called when the adding of the object to the sim is complete, all sub-objects have been processed as well + // This is a special-case function that only really gets used with Entities/BehaviorObjects. + virtual void onPostAdd() {} + /// /// Specifically, these are called by setDataField /// when a static or dynamic field is modified, see