Added visit function to API
Called with collideable and hit action
This commit is contained in:
parent
94f1c20817
commit
090d44b518
|
@ -108,7 +108,7 @@ std::vector<ICustomBody*>& Octree::Sample(const Oyster::Collision3D::ICollideabl
|
||||||
return updateList;
|
return updateList;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Octree::Visit(ICustomBody* customBodyRef, VistorAction hitAction )
|
void Octree::Visit(ICustomBody* customBodyRef, VisitorAction hitAction )
|
||||||
{
|
{
|
||||||
auto object = this->mapReferences.find(customBodyRef);
|
auto object = this->mapReferences.find(customBodyRef);
|
||||||
|
|
||||||
|
@ -128,13 +128,13 @@ void Octree::Visit(ICustomBody* customBodyRef, VistorAction hitAction )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Octree::Visit(const Oyster::Collision3D::ICollideable& collideable, VistorAction hitAction)
|
void Octree::Visit(const Oyster::Collision3D::ICollideable& collideable, VisitorActionCollideable hitAction)
|
||||||
{
|
{
|
||||||
for(unsigned int i = 0; i<this->leafData.size(); i++)
|
for(unsigned int i = 0; i<this->leafData.size(); i++)
|
||||||
{
|
{
|
||||||
if(this->leafData[i].container.Intersects(collideable))
|
if(collideable.Intersects(this->leafData[i].container))
|
||||||
{
|
{
|
||||||
//hitAction(*this, tempRef, i); // @todo TODO: Add typedef to handle function calls with ICollideable
|
hitAction(*this, i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,7 +17,8 @@ namespace Oyster
|
||||||
public:
|
public:
|
||||||
static const unsigned int invalid_ref;
|
static const unsigned int invalid_ref;
|
||||||
|
|
||||||
typedef void(*VistorAction)(Octree&, unsigned int, unsigned int);
|
typedef void(*VisitorAction)(Octree&, unsigned int, unsigned int);
|
||||||
|
typedef void(*VisitorActionCollideable)(Octree&, unsigned int);
|
||||||
|
|
||||||
struct Data
|
struct Data
|
||||||
{
|
{
|
||||||
|
@ -51,8 +52,8 @@ namespace Oyster
|
||||||
|
|
||||||
std::vector<ICustomBody*>& Sample(ICustomBody* customBodyRef, std::vector<ICustomBody*>& updateList);
|
std::vector<ICustomBody*>& Sample(ICustomBody* customBodyRef, std::vector<ICustomBody*>& updateList);
|
||||||
std::vector<ICustomBody*>& Sample(const Oyster::Collision3D::ICollideable& collideable, std::vector<ICustomBody*>& updateList);
|
std::vector<ICustomBody*>& Sample(const Oyster::Collision3D::ICollideable& collideable, std::vector<ICustomBody*>& updateList);
|
||||||
void Visit(ICustomBody* customBodyRef, VistorAction hitAction );
|
void Visit(ICustomBody* customBodyRef, VisitorAction hitAction );
|
||||||
void Visit(const Oyster::Collision3D::ICollideable& collideable, VistorAction hitAction );
|
void Visit(const Oyster::Collision3D::ICollideable& collideable, VisitorActionCollideable hitAction );
|
||||||
|
|
||||||
ICustomBody* GetCustomBody(const unsigned int tempRef);
|
ICustomBody* GetCustomBody(const unsigned int tempRef);
|
||||||
|
|
||||||
|
|
|
@ -268,6 +268,11 @@ void API_Impl::RemoveGravity( const API::Gravity &g )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void API_Impl::ApplyEffect( const Oyster::Collision3D::ICollideable& collideable, void(hitAction)(Octree&, unsigned int) )
|
||||||
|
{
|
||||||
|
this->worldScene.Visit(collideable, hitAction);
|
||||||
|
}
|
||||||
|
|
||||||
//void API_Impl::ApplyForceAt( const ICustomBody* objRef, const Float3 &worldPos, const Float3 &worldF )
|
//void API_Impl::ApplyForceAt( const ICustomBody* objRef, const Float3 &worldPos, const Float3 &worldF )
|
||||||
//{
|
//{
|
||||||
// unsigned int tempRef = this->worldScene.GetTemporaryReferenceOf( objRef );
|
// unsigned int tempRef = this->worldScene.GetTemporaryReferenceOf( objRef );
|
||||||
|
|
|
@ -35,6 +35,8 @@ namespace Oyster
|
||||||
void AddGravity( const API::Gravity &g );
|
void AddGravity( const API::Gravity &g );
|
||||||
void RemoveGravity( const API::Gravity &g );
|
void RemoveGravity( const API::Gravity &g );
|
||||||
|
|
||||||
|
void ApplyEffect( const Oyster::Collision3D::ICollideable& collideable, void(hitAction)(Octree&, unsigned int) );
|
||||||
|
|
||||||
//void ApplyForceAt( const ICustomBody* objRef, const ::Oyster::Math::Float3 &worldPos, const ::Oyster::Math::Float3 &worldF );
|
//void ApplyForceAt( const ICustomBody* objRef, const ::Oyster::Math::Float3 &worldPos, const ::Oyster::Math::Float3 &worldF );
|
||||||
|
|
||||||
//void SetMomentOfInertiaTensor_KeepVelocity( const ICustomBody* objRef, const ::Oyster::Math::Float4x4 &localI );
|
//void SetMomentOfInertiaTensor_KeepVelocity( const ICustomBody* objRef, const ::Oyster::Math::Float4x4 &localI );
|
||||||
|
|
|
@ -16,6 +16,7 @@ namespace Oyster
|
||||||
{
|
{
|
||||||
class API;
|
class API;
|
||||||
class ICustomBody;
|
class ICustomBody;
|
||||||
|
class Octree;
|
||||||
|
|
||||||
namespace Struct
|
namespace Struct
|
||||||
{
|
{
|
||||||
|
@ -136,6 +137,8 @@ namespace Oyster
|
||||||
********************************************************/
|
********************************************************/
|
||||||
virtual void RemoveGravity( const API::Gravity &g ) = 0;
|
virtual void RemoveGravity( const API::Gravity &g ) = 0;
|
||||||
|
|
||||||
|
virtual void ApplyEffect( const Oyster::Collision3D::ICollideable& collideable, void(hitAction)(Octree&, unsigned int) ) = 0;
|
||||||
|
|
||||||
///********************************************************
|
///********************************************************
|
||||||
// * Apply force on an object.
|
// * Apply force on an object.
|
||||||
// * @param objRef: A pointer to the ICustomBody representing a physical object.
|
// * @param objRef: A pointer to the ICustomBody representing a physical object.
|
||||||
|
|
Loading…
Reference in New Issue