From 8ecb474a6758233601e964e38d3b1f876c0d9c89 Mon Sep 17 00:00:00 2001 From: AzaezelX Date: Sat, 13 Jun 2020 12:12:52 -0500 Subject: [PATCH] fixes for trigger onenter/onleave 1- corrects onleavetrigger for deletions 2-adds a testObjects to trip onenter when creating or moving a trigger itself so that that will list objects already there as opposed to only going off when something moves into it --- Engine/source/T3D/trigger.cpp | 22 ++++++++++++++++++++-- Engine/source/T3D/trigger.h | 1 + 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/Engine/source/T3D/trigger.cpp b/Engine/source/T3D/trigger.cpp index 52d6898eb..76e0e5555 100644 --- a/Engine/source/T3D/trigger.cpp +++ b/Engine/source/T3D/trigger.cpp @@ -389,6 +389,20 @@ bool Trigger::setTickCmd(void *object, const char *index, const char *data) return true; // to update the actual field } +//------------------------------------------------------------------------------ + +void Trigger::testObjects() +{ + Vector foundobjs; + gServerContainer.findObjectList(getWorldBox(), 0xFFFFFFFF, &foundobjs); + for (S32 i = 0; i < foundobjs.size(); ++i) + { + GameBase* so = dynamic_cast(foundobjs[i]); + if (so) + potentialEnterObject(so); + } +} + //-------------------------------------------------------------------------- bool Trigger::onAdd() @@ -405,7 +419,9 @@ bool Trigger::onAdd() if (isServerObject()) scriptOnAdd(); - + + testObjects(); + return true; } @@ -441,7 +457,7 @@ void Trigger::onDeleteNotify( SimObject *obj ) { mObjects.erase(i); if (mDataBlock) - mDataBlock->onLeaveTrigger_callback( this, pScene ); + mDataBlock->onLeaveTrigger_callback( this, NULL ); break; } } @@ -517,6 +533,8 @@ void Trigger::setTransform(const MatrixF & mat) setMaskBits(TransformMask | ScaleMask); } + + testObjects(); } void Trigger::prepRenderImage( SceneRenderState *state ) diff --git a/Engine/source/T3D/trigger.h b/Engine/source/T3D/trigger.h index ee3cbdf02..179f4af7a 100644 --- a/Engine/source/T3D/trigger.h +++ b/Engine/source/T3D/trigger.h @@ -123,6 +123,7 @@ class Trigger : public GameBase static void consoleInit(); static void initPersistFields(); + void testObjects(); bool onAdd(); void onRemove(); void onDeleteNotify(SimObject*);