diff --git a/Code/GamePhysics/Implementation/NullBody.cpp b/Code/GamePhysics/Implementation/NullBody.cpp index be555148..82c75a78 100644 --- a/Code/GamePhysics/Implementation/NullBody.cpp +++ b/Code/GamePhysics/Implementation/NullBody.cpp @@ -28,11 +28,6 @@ bool NullBody::Intersects( const ICollideable &shape ) const return false; } -unsigned int NullBody::GetReference() const -{ - return not_a_reference; -} - Sphere & NullBody::GetBoundingSphere( Sphere &targetMem ) const { return targetMem = Sphere( Float3::null, 0.0f ); diff --git a/Code/GamePhysics/Implementation/PhysicsAPI_Impl.cpp b/Code/GamePhysics/Implementation/PhysicsAPI_Impl.cpp index c555a77b..9bb764fc 100644 --- a/Code/GamePhysics/Implementation/PhysicsAPI_Impl.cpp +++ b/Code/GamePhysics/Implementation/PhysicsAPI_Impl.cpp @@ -71,86 +71,78 @@ void API_Impl::Update() /** @todo TODO: Fix this function.*/ } -bool API_Impl::IsInLimbo( unsigned int objRef ) +bool API_Impl::IsInLimbo( const ICustomBody* objRef ) { //! @todo TODO: implement stub return true; } -void API_Impl::MoveToLimbo( unsigned int objRef ) +void API_Impl::MoveToLimbo( const ICustomBody* objRef ) { /** @todo TODO: Fix this function.*/ } -void API_Impl::ReleaseFromLimbo( unsigned int objRef ) +void API_Impl::ReleaseFromLimbo( const ICustomBody* objRef ) { /** @todo TODO: Fix this function.*/ } -unsigned int API_Impl::AddObject( ::Utility::DynamicMemory::UniquePointer handle ) +void API_Impl::AddObject( ::Utility::DynamicMemory::UniquePointer handle ) { /** @todo TODO: Fix this function.*/ - - return 0; } -::Utility::DynamicMemory::UniquePointer API_Impl::ExtractObject( unsigned int objRef ) +::Utility::DynamicMemory::UniquePointer API_Impl::ExtractObject( const ICustomBody* objRef ) { //! @todo TODO: implement stub return NULL; } -void API_Impl::DestroyObject( unsigned int objRef ) +void API_Impl::DestroyObject( const ICustomBody* objRef ) { /** @todo TODO: Fix this function.*/ } -const ICustomBody & API_Impl::Peek( unsigned int objRef ) const -{ - //! @todo TODO: implement stub - return Error::nobody; -} - -void API_Impl::ApplyForceAt( unsigned int objRef, const Float3 &worldPos, const Float3 &worldF ) +void API_Impl::ApplyForceAt( const ICustomBody* objRef, const Float3 &worldPos, const Float3 &worldF ) { //! @todo TODO: implement stub } -void API_Impl::ApplyCollisionResponse( unsigned int objRefA, unsigned int objRefB, Float &deltaWhen, Float3 &worldPointOfContact ) +void API_Impl::ApplyCollisionResponse( const ICustomBody* objRefA, const ICustomBody* objRefB, Float &deltaWhen, Float3 &worldPointOfContact ) { //! @todo TODO: implement stub } -void API_Impl::SetMomentOfInertiaTensor_KeepVelocity( unsigned int objRef, const Float4x4 &localI ) +void API_Impl::SetMomentOfInertiaTensor_KeepVelocity( const ICustomBody* objRef, const Float4x4 &localI ) { //! @todo TODO: implement stub } -void API_Impl::SetMomentOfInertiaTensor_KeepMomentum( unsigned int objRef, const Float4x4 &localI ) +void API_Impl::SetMomentOfInertiaTensor_KeepMomentum( const ICustomBody* objRef, const Float4x4 &localI ) { //! @todo TODO: implement stub } -void API_Impl::SetMass_KeepVelocity( unsigned int objRef, Float m ) +void API_Impl::SetMass_KeepVelocity( const ICustomBody* objRef, Float m ) { //! @todo TODO: implement stub } -void API_Impl::SetMass_KeepMomentum( unsigned int objRef, Float m ) +void API_Impl::SetMass_KeepMomentum( const ICustomBody* objRef, Float m ) { //! @todo TODO: implement stub } -void API_Impl::SetCenter( unsigned int objRef, const Float3 &worldPos ) +void API_Impl::SetCenter( const ICustomBody* objRef, const Float3 &worldPos ) { //! @todo TODO: implement stub } -void API_Impl::SetRotation( unsigned int objRef, const Float4x4 &rotation ) +void API_Impl::SetRotation( const ICustomBody* objRef, const Float4x4 &rotation ) { //! @todo TODO: implement stub } -void API_Impl::SetOrientation( unsigned int objRef, const Float4x4 &orientation ) +void API_Impl::SetOrientation( const ICustomBody* objRef, const Float4x4 &orientation ) { //! @todo TODO: implement stub } diff --git a/Code/GamePhysics/Implementation/PhysicsAPI_Impl.h b/Code/GamePhysics/Implementation/PhysicsAPI_Impl.h index 3b1f217c..2cec91a9 100644 --- a/Code/GamePhysics/Implementation/PhysicsAPI_Impl.h +++ b/Code/GamePhysics/Implementation/PhysicsAPI_Impl.h @@ -20,26 +20,24 @@ namespace Oyster void Update(); - bool IsInLimbo( unsigned int objRef ); - void MoveToLimbo( unsigned int objRef ); - void ReleaseFromLimbo( unsigned int objRef ); + bool IsInLimbo( const ICustomBody* objRef ); + void MoveToLimbo( const ICustomBody* objRef ); + void ReleaseFromLimbo( const ICustomBody* objRef ); - unsigned int AddObject( ::Utility::DynamicMemory::UniquePointer handle ); - ::Utility::DynamicMemory::UniquePointer ExtractObject( unsigned int objRef ); - void DestroyObject( unsigned int objRef ); + void AddObject( ::Utility::DynamicMemory::UniquePointer handle ); + ::Utility::DynamicMemory::UniquePointer ExtractObject( const ICustomBody* objRef ); + void DestroyObject( const ICustomBody* objRef ); - const ICustomBody & Peek( unsigned int objRef ) const; + void ApplyForceAt( const ICustomBody* objRef, const ::Oyster::Math::Float3 &worldPos, const ::Oyster::Math::Float3 &worldF ); + void ApplyCollisionResponse( const ICustomBody* objRefA, const ICustomBody* objRefB, ::Oyster::Math::Float &deltaWhen, ::Oyster::Math::Float3 &worldPointOfContact ); - void ApplyForceAt( unsigned int objRef, const ::Oyster::Math::Float3 &worldPos, const ::Oyster::Math::Float3 &worldF ); - void ApplyCollisionResponse( unsigned int objRefA, unsigned int objRefB, ::Oyster::Math::Float &deltaWhen, ::Oyster::Math::Float3 &worldPointOfContact ); - - void SetMomentOfInertiaTensor_KeepVelocity( unsigned int objRef, const ::Oyster::Math::Float4x4 &localI ); - void SetMomentOfInertiaTensor_KeepMomentum( unsigned int objRef, const ::Oyster::Math::Float4x4 &localI ); - void SetMass_KeepVelocity( unsigned int objRef, ::Oyster::Math::Float m ); - void SetMass_KeepMomentum( unsigned int objRef, ::Oyster::Math::Float m ); - void SetCenter( unsigned int objRef, const ::Oyster::Math::Float3 &worldPos ); - void SetRotation( unsigned int objRef, const ::Oyster::Math::Float4x4 &rotation ); - void SetOrientation( unsigned int objRef, const ::Oyster::Math::Float4x4 &orientation ); + void SetMomentOfInertiaTensor_KeepVelocity( const ICustomBody* objRef, const ::Oyster::Math::Float4x4 &localI ); + void SetMomentOfInertiaTensor_KeepMomentum( const ICustomBody* objRef, const ::Oyster::Math::Float4x4 &localI ); + void SetMass_KeepVelocity( const ICustomBody* objRef, ::Oyster::Math::Float m ); + void SetMass_KeepMomentum( const ICustomBody* objRef, ::Oyster::Math::Float m ); + void SetCenter( const ICustomBody* objRef, const ::Oyster::Math::Float3 &worldPos ); + void SetRotation( const ICustomBody* objRef, const ::Oyster::Math::Float4x4 &rotation ); + void SetOrientation( const ICustomBody* objRef, const ::Oyster::Math::Float4x4 &orientation ); ::Utility::DynamicMemory::UniquePointer CreateSimpleRigidBody() const; }; diff --git a/Code/GamePhysics/Implementation/SimpleRigidBody.cpp b/Code/GamePhysics/Implementation/SimpleRigidBody.cpp index 59d501b4..00f456aa 100644 --- a/Code/GamePhysics/Implementation/SimpleRigidBody.cpp +++ b/Code/GamePhysics/Implementation/SimpleRigidBody.cpp @@ -38,12 +38,6 @@ bool SimpleRigidBody::Intersects( const ICollideable &shape ) const return false; } -unsigned int SimpleRigidBody::GetReference() const -{ - //! @todo TODO: implement stub - return Error::not_a_reference; -} - Sphere & SimpleRigidBody::GetBoundingSphere( Sphere &targetMem ) const { //! @todo TODO: implement stub diff --git a/Code/GamePhysics/Implementation/SimpleRigidBody.h b/Code/GamePhysics/Implementation/SimpleRigidBody.h index dd6531e6..ebedcb6a 100644 --- a/Code/GamePhysics/Implementation/SimpleRigidBody.h +++ b/Code/GamePhysics/Implementation/SimpleRigidBody.h @@ -17,7 +17,6 @@ namespace Oyster { namespace Physics bool Intersects( const ICustomBody &object, ::Oyster::Math::Float &deltaWhen, ::Oyster::Math::Float3 &worldPointOfContact ) const; bool Intersects( const ::Oyster::Collision3D::ICollideable &shape ) const; - unsigned int GetReference() const; ::Oyster::Collision3D::Sphere & GetBoundingSphere( ::Oyster::Collision3D::Sphere &targetMem = ::Oyster::Collision3D::Sphere() ) const; ::Oyster::Math::Float3 & GetNormalAt( const ::Oyster::Math::Float3 &worldPos, ::Oyster::Math::Float3 &targetMem = ::Oyster::Math::Float3() ) const; ::Oyster::Math::Float3 & GetCenter( ::Oyster::Math::Float3 &targetMem = ::Oyster::Math::Float3() ) const; diff --git a/Code/GamePhysics/PhysicsAPI.h b/Code/GamePhysics/PhysicsAPI.h index 72f29f17..9bec064a 100644 --- a/Code/GamePhysics/PhysicsAPI.h +++ b/Code/GamePhysics/PhysicsAPI.h @@ -80,123 +80,115 @@ namespace Oyster /******************************************************** * An object in limbo state will be ignored during the physics frame Update. - * @param objRef: Provided by API::AddObject(...) & ICustomBody::GetReference() + * @param objRef: A pointer to the ICustomBody representing a physical object. * @return true if object is in limbo state. ********************************************************/ - virtual bool IsInLimbo( unsigned int objRef ) = 0; + virtual bool IsInLimbo( const ICustomBody* objRef ) = 0; /******************************************************** * An object in limbo state will be ignored during the physics frame Update. * This will put an object in Limbo state. - * @param objRef: Provided by API::AddObject(...) & ICustomBody::GetReference() + * @param objRef: A pointer to the ICustomBody representing a physical object. ********************************************************/ - virtual void MoveToLimbo( unsigned int objRef ) = 0; + virtual void MoveToLimbo( const ICustomBody* objRef ) = 0; /******************************************************** * An object in limbo state will be ignored during the physics frame Update. * This will clear the accumulated force/torque and remove the Limbo state. - * @param objRef: Provided by API::AddObject(...) & ICustomBody::GetReference() + * @param objRef: A pointer to the ICustomBody representing a physical object. ********************************************************/ - virtual void ReleaseFromLimbo( unsigned int objRef ) = 0; + virtual void ReleaseFromLimbo( const ICustomBody* objRef ) = 0; /******************************************************** * Introduces a new object into the engine. * @param handle: A pointer along with the responsibility to delete. - * @return an objectReference needed in most methods. Error::not_a_reference if faulty handle. ********************************************************/ - virtual unsigned int AddObject( ::Utility::DynamicMemory::UniquePointer handle ) = 0; + virtual void AddObject( ::Utility::DynamicMemory::UniquePointer handle ) = 0; /******************************************************** * Fetches and removes an object from the engine. * Will not call the provided EventAction_Destruction method. - * @param objRef: Provided by API::AddObject(...) & ICustomBody::GetReference() + * @param objRef: A pointer to the ICustomBody representing a physical object. * @return A pointer along with the responsibility to delete. NULL if faulty objRef. ********************************************************/ - virtual ::Utility::DynamicMemory::UniquePointer ExtractObject( unsigned int objRef ) = 0; + virtual ::Utility::DynamicMemory::UniquePointer ExtractObject( const ICustomBody* objRef ) = 0; /******************************************************** * Removes an object from the engine. * Will call the provided EventAction_Destruction method. Not if objRef is faulty. - * @param objRef: Provided by API::AddObject(...) & ICustomBody::GetReference() + * @param objRef: A pointer to the ICustomBody representing a physical object. ********************************************************/ - virtual void DestroyObject( unsigned int objRef ) = 0; - - /******************************************************** - * Peeks at object at objRef. - * @param objRef: Provided by API::AddObject(...) & ICustomBody::GetReference() - * @return the instance ofthe found object. Error::nobody if faulty objRef - ********************************************************/ - virtual const ICustomBody & Peek( unsigned int objRef ) const = 0; + virtual void DestroyObject( const ICustomBody* objRef ) = 0; /******************************************************** * Apply force on an object. - * @param objRef: Provided by API::AddObject(...) & ICustomBody::GetReference() + * @param objRef: A pointer to the ICustomBody representing a physical object. * @param worldPos: Relative to the world origo. (Not relative to object) [m] * @param worldF: Vector with the direction and magnitude of the force. [N] ********************************************************/ - virtual void ApplyForceAt( unsigned int objRef, const ::Oyster::Math::Float3 &worldPos, const ::Oyster::Math::Float3 &worldF ) = 0; + virtual void ApplyForceAt( const ICustomBody* objRef, const ::Oyster::Math::Float3 &worldPos, const ::Oyster::Math::Float3 &worldF ) = 0; /******************************************************** * Apply force on an object. - * @param objRefA: Provided by API::AddObject(...) & ICustomBody::GetReference() - * @param objRefB: Provided by API::AddObject(...) & ICustomBody::GetReference() + * @param objRefA: A pointer to the ICustomBody representing a physical object. + * @param objRefB: A pointer to the ICustomBody representing a physical object. * @param deltaWhen: The elapsed simulation time since last update frame. [s] * @param worldPointOfContact: Point of Collision, relative to the world origo. (Not relative to the objects) [m] ********************************************************/ - virtual void ApplyCollisionResponse( unsigned int objRefA, unsigned int objRefB, ::Oyster::Math::Float &deltaWhen, ::Oyster::Math::Float3 &worldPointOfContact ) = 0; + virtual void ApplyCollisionResponse( const ICustomBody* objRefA, const ICustomBody* objRefB, ::Oyster::Math::Float &deltaWhen, ::Oyster::Math::Float3 &worldPointOfContact ) = 0; /******************************************************** * Sets the MomentOfInertia tensor matrix of an object without changing it's angular velocity. * Noticeable effect: The angular momentum will change. Changing the amount of kinetic energy. - * @param objRef: Provided by API::AddObject(...) & ICustomBody::GetReference() + * @param objRef: A pointer to the ICustomBody representing a physical object. * @param localI: The tensor matrix relative to the axises of the object. @see MomentOfInertia namespace. ********************************************************/ - virtual void SetMomentOfInertiaTensor_KeepVelocity( unsigned int objRef, const ::Oyster::Math::Float4x4 &localI ) = 0; + virtual void SetMomentOfInertiaTensor_KeepVelocity( const ICustomBody* objRef, const ::Oyster::Math::Float4x4 &localI ) = 0; /******************************************************** * Sets the MomentOfInertia tensor matrix of an object without changing it's angular momentum. * Noticeable effect: The angular velocity will change. Can be used to create slow effects. - * @param objRef: Provided by API::AddObject(...) & ICustomBody::GetReference() + * @param objRef: A pointer to the ICustomBody representing a physical object. * @param localI: The tensor matrix relative to the axises of the object. @see MomentOfInertia namespace. ********************************************************/ - virtual void SetMomentOfInertiaTensor_KeepMomentum( unsigned int objRef, const ::Oyster::Math::Float4x4 &localI ) = 0; + virtual void SetMomentOfInertiaTensor_KeepMomentum( const ICustomBody* objRef, const ::Oyster::Math::Float4x4 &localI ) = 0; /******************************************************** * Sets the mass of an object without changing it's linear velocity. * Noticeable effect: The linear momentum will change. Changing the amount of kinetic energy. - * @param objRef: Provided by API::AddObject(...) & ICustomBody::GetReference() + * @param objRef: A pointer to the ICustomBody representing a physical object. * @param m: [kg] ********************************************************/ - virtual void SetMass_KeepVelocity( unsigned int objRef, ::Oyster::Math::Float m ) = 0; + virtual void SetMass_KeepVelocity( const ICustomBody* objRef, ::Oyster::Math::Float m ) = 0; /******************************************************** * Sets the mass of an object without changing it's linear velocity. * Noticeable effect: The linear velocity will change. Can be used to create slow effects. - * @param objRef: Provided by API::AddObject(...) & ICustomBody::GetReference() + * @param objRef: A pointer to the ICustomBody representing a physical object. * @param m: [kg] ********************************************************/ - virtual void SetMass_KeepMomentum( unsigned int objRef, ::Oyster::Math::Float m ) = 0; + virtual void SetMass_KeepMomentum( const ICustomBody* objRef, ::Oyster::Math::Float m ) = 0; /******************************************************** * Instantly moves an object. - * @param objRef: Provided by API::AddObject(...) & ICustomBody::GetReference() + * @param objRef: A pointer to the ICustomBody representing a physical object. * @param worldPos: Relative to the world origo. (Not relative to object) [m] ********************************************************/ - virtual void SetCenter( unsigned int objRef, const ::Oyster::Math::Float3 &worldPos ) = 0; + virtual void SetCenter( const ICustomBody* objRef, const ::Oyster::Math::Float3 &worldPos ) = 0; /******************************************************** * Instantly redirects object. - * @param objRef: Provided by API::AddObject(...) & ICustomBody::GetReference() + * @param objRef: A pointer to the ICustomBody representing a physical object. * @param rotation: New rotation. ********************************************************/ - virtual void SetRotation( unsigned int objRef, const ::Oyster::Math::Float4x4 &rotation ) = 0; + virtual void SetRotation( const ICustomBody* objRef, const ::Oyster::Math::Float4x4 &rotation ) = 0; /******************************************************** * Instantly moves and redirects object. - * @param objRef: Provided by API::AddObject(...) & ICustomBody::GetReference() + * @param objRef: A pointer to the ICustomBody representing a physical object. * @param orientation: New orientation. ********************************************************/ - virtual void SetOrientation( unsigned int objRef, const ::Oyster::Math::Float4x4 &orientation ) = 0; + virtual void SetOrientation( const ICustomBody* objRef, const ::Oyster::Math::Float4x4 &orientation ) = 0; /******************************************************** * Creates a new dynamically allocated object that can be used as a component for more complex ICustomBodies. @@ -219,7 +211,6 @@ namespace Oyster virtual bool Intersects( const ICustomBody &object, ::Oyster::Math::Float &deltaWhen, ::Oyster::Math::Float3 &worldPointOfContact ) const = 0; virtual bool Intersects( const ::Oyster::Collision3D::ICollideable &shape ) const = 0; - virtual unsigned int GetReference() const = 0; virtual ::Oyster::Collision3D::Sphere & GetBoundingSphere( ::Oyster::Collision3D::Sphere &targetMem = ::Oyster::Collision3D::Sphere() ) const = 0; virtual ::Oyster::Math::Float3 & GetNormalAt( const ::Oyster::Math::Float3 &worldPos, ::Oyster::Math::Float3 &targetMem = ::Oyster::Math::Float3() ) const = 0; virtual ::Oyster::Math::Float3 & GetCenter( ::Oyster::Math::Float3 &targetMem = ::Oyster::Math::Float3() ) const = 0; @@ -240,7 +231,6 @@ namespace Oyster namespace Error { //! The content in here is used as API return errorvalues. - const unsigned int not_a_reference = ::Utility::Value::numeric_limits::max(); class NullBody : public ICustomBody {