From 8aaed004f1cd8301b5587c73502c6799beac5de2 Mon Sep 17 00:00:00 2001 From: Marc Chapman Date: Thu, 27 Jul 2017 01:41:40 +0100 Subject: [PATCH] Collision events --- Engine/source/T3D/shapeBase.cpp | 26 ++++++++++++++++++++++++++ Engine/source/T3D/shapeBase.h | 12 ++++++++++++ 2 files changed, 38 insertions(+) diff --git a/Engine/source/T3D/shapeBase.cpp b/Engine/source/T3D/shapeBase.cpp index 53f4509ed..5f71a7eb9 100644 --- a/Engine/source/T3D/shapeBase.cpp +++ b/Engine/source/T3D/shapeBase.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 "T3D/shapeBase.h" @@ -3722,6 +3723,31 @@ void ShapeBase::setCurrentWaterObject( WaterObject *obj ) mCurrentWaterObject = obj; } +void ShapeBase::notifyCollisionCallbacks(SceneObject* obj, const VectorF& vel) +{ + for (S32 i = 0; i < collision_callbacks.size(); i++) + if (collision_callbacks[i]) + collision_callbacks[i]->collisionNotify(this, obj, vel); +} + +void ShapeBase::registerCollisionCallback(CollisionEventCallback* ce_cb) +{ + for (S32 i = 0; i < collision_callbacks.size(); i++) + if (collision_callbacks[i] == ce_cb) + return; + + collision_callbacks.push_back(ce_cb); +} + +void ShapeBase::unregisterCollisionCallback(CollisionEventCallback* ce_cb) +{ + for (S32 i = 0; i < collision_callbacks.size(); i++) + if (collision_callbacks[i] == ce_cb) + { + collision_callbacks.erase(i); + return; + } +} //-------------------------------------------------------------------------- //---------------------------------------------------------------------------- DefineEngineMethod( ShapeBase, setHidden, void, ( bool show ),, diff --git a/Engine/source/T3D/shapeBase.h b/Engine/source/T3D/shapeBase.h index 9276cfb98..067ef7cbf 100644 --- a/Engine/source/T3D/shapeBase.h +++ b/Engine/source/T3D/shapeBase.h @@ -1860,6 +1860,18 @@ public: protected: DECLARE_CALLBACK( F32, validateCameraFov, (F32 fov) ); +public: + class CollisionEventCallback + { + public: + virtual void collisionNotify(SceneObject* shape0, SceneObject* shape1, const VectorF& vel)=0; + }; +private: + Vector collision_callbacks; + void notifyCollisionCallbacks(SceneObject*, const VectorF& vel); +public: + void registerCollisionCallback(CollisionEventCallback*); + void unregisterCollisionCallback(CollisionEventCallback*); protected: enum {