Collision events

This commit is contained in:
Marc Chapman 2017-07-27 01:41:40 +01:00
parent 2a96c946b7
commit 8aaed004f1
2 changed files with 38 additions and 0 deletions

View file

@ -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 ),,

View file

@ -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<CollisionEventCallback*> collision_callbacks;
void notifyCollisionCallbacks(SceneObject*, const VectorF& vel);
public:
void registerCollisionCallback(CollisionEventCallback*);
void unregisterCollisionCallback(CollisionEventCallback*);
protected:
enum {