From 86dd8a8cf71a5d66050119672ce301154e5905a0 Mon Sep 17 00:00:00 2001 From: Areloch Date: Sat, 30 Apr 2016 23:32:10 -0500 Subject: [PATCH] Adds a onPostAdd callback to simObject so we can do handling AFTER the object and it's children have been added successfully. --- Engine/source/console/compiledEval.cpp | 4 ++++ Engine/source/console/simObject.h | 4 ++++ 2 files changed, 8 insertions(+) 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