diff --git a/Code/GamePhysics/Implementation/PhysicsAPI_Impl.cpp b/Code/GamePhysics/Implementation/PhysicsAPI_Impl.cpp index bfef1a61..d3650f66 100644 --- a/Code/GamePhysics/Implementation/PhysicsAPI_Impl.cpp +++ b/Code/GamePhysics/Implementation/PhysicsAPI_Impl.cpp @@ -31,8 +31,8 @@ namespace ICustomBody::State protoState; proto->GetState( protoState ); ICustomBody::State deuterState; deuter->GetState( deuterState ); - Float4 protoG = protoState.GetLinearMomentum( worldPointOfContact ), - deuterG = deuterState.GetLinearMomentum( worldPointOfContact ); + Float4 protoG = protoState.GetLinearMomentum( worldPointOfContact.xyz ), + deuterG = deuterState.GetLinearMomentum( worldPointOfContact.xyz ); // calc from perspective of deuter Float4 normal; deuter->GetNormalAt( worldPointOfContact, normal ); @@ -40,7 +40,7 @@ namespace deuterG_Magnitude = deuterG.Dot( normal ); // if they are not relatively moving towards eachother, there is no collision - Float deltaPos = normal.Dot( deuterState.GetCenterPosition() - protoState.GetCenterPosition() ); + Float deltaPos = normal.Dot( Float4(deuterState.GetCenterPosition(), 1) - Float4(protoState.GetCenterPosition(), 1) ); if( deltaPos < 0.0f ) { if( protoG_Magnitude >= deuterG_Magnitude ) @@ -95,13 +95,13 @@ namespace // } - Float kineticEnergyPBefore = Oyster::Physics3D::Formula::LinearKineticEnergy( protoState.GetMass(), protoState.GetLinearMomentum().xyz/protoState.GetMass() ); + Float kineticEnergyPBefore = Oyster::Physics3D::Formula::LinearKineticEnergy( protoState.GetMass(), protoState.GetLinearMomentum()/protoState.GetMass() ); // protoState.ApplyForwarding( forwardedDeltaPos, forwardedDeltaAxis ); - protoState.ApplyImpulse( bounce, worldPointOfContact, normal ); + protoState.ApplyImpulse( bounce.xyz, worldPointOfContact.xyz, normal.xyz ); proto->SetState( protoState ); - Float kineticEnergyPAFter = Oyster::Physics3D::Formula::LinearKineticEnergy( protoState.GetMass(), (protoState.GetLinearMomentum().xyz + protoState.GetLinearImpulse().xyz)/protoState.GetMass() ); + Float kineticEnergyPAFter = Oyster::Physics3D::Formula::LinearKineticEnergy( protoState.GetMass(), (protoState.GetLinearMomentum() + protoState.GetLinearImpulse())/protoState.GetMass() ); proto->CallSubscription_CollisionResponse( deuter, kineticEnergyPBefore - kineticEnergyPAFter ); @@ -179,7 +179,7 @@ void API_Impl::Update() { case Gravity::GravityType_Well: { - Float4 d = Float4( this->gravity[i].well.position, 1.0f ) - state.GetCenterPosition(); + Float4 d = Float4( this->gravity[i].well.position, 1.0f ) - Float4( state.GetCenterPosition(), 1.0f ); Float rSquared = d.Dot( d ); if( rSquared != 0.0 ) { @@ -201,7 +201,7 @@ void API_Impl::Update() if( gravityImpulse != Float4::null ) { - state.ApplyLinearImpulse( gravityImpulse ); + state.ApplyLinearImpulse( gravityImpulse.xyz ); (*proto)->SetGravityNormal( gravityImpulse.GetNormalized().xyz ); (*proto)->SetState( state ); } diff --git a/Code/GamePhysics/Implementation/SimpleRigidBody.cpp b/Code/GamePhysics/Implementation/SimpleRigidBody.cpp index 5a9bf53f..2f6a6c0c 100644 --- a/Code/GamePhysics/Implementation/SimpleRigidBody.cpp +++ b/Code/GamePhysics/Implementation/SimpleRigidBody.cpp @@ -56,7 +56,7 @@ SimpleRigidBody::SimpleRigidBody() SimpleRigidBody::SimpleRigidBody( const API::SimpleBodyDescription &desc ) { - this->rigid.SetRotation( desc.rotation ); + //this->rigid.SetRotation( desc.rotation ); this->rigid.centerPos = desc.centerPosition; this->rigid.SetSize( desc.size ); this->rigid.SetMass_KeepMomentum( desc.mass ); @@ -143,8 +143,8 @@ void SimpleRigidBody::SetState( const SimpleRigidBody::State &state ) if( state.IsForwarded() ) { - this->deltaPos += state.GetForward_DeltaPos(); - this->deltaAxis += state.GetForward_DeltaAxis(); + this->deltaPos += Float4(state.GetForward_DeltaPos(), 0); + this->deltaAxis += Float4(state.GetForward_DeltaAxis(), 0); this->isForwarded; } @@ -205,7 +205,7 @@ Sphere & SimpleRigidBody::GetBoundingSphere( Sphere &targetMem ) const Float4 & SimpleRigidBody::GetNormalAt( const Float4 &worldPos, Float4 &targetMem ) const { - Float4 offset = worldPos - this->rigid.centerPos; + Float4 offset = worldPos.xyz - this->rigid.centerPos; Float distance = offset.Dot( offset ); Float3 normal = Float3::null; @@ -295,7 +295,7 @@ UpdateState SimpleRigidBody::Update( Float timeStepLength ) { if( this->isForwarded ) { - this->rigid.Move( this->deltaPos, this->deltaAxis ); + this->rigid.Move( this->deltaPos.xyz, this->deltaAxis.xyz ); this->deltaPos = Float4::null; this->deltaAxis = Float4::null; this->isForwarded = false; @@ -310,7 +310,7 @@ UpdateState SimpleRigidBody::Update( Float timeStepLength ) void SimpleRigidBody::Predict( Float4 &outDeltaPos, Float4 &outDeltaAxis, const Float4 &actingLinearImpulse, const Float4 &actingAngularImpulse, Float deltaTime ) { - this->rigid.Predict_LeapFrog( outDeltaPos, outDeltaAxis, actingLinearImpulse, actingAngularImpulse, deltaTime ); + this->rigid.Predict_LeapFrog( outDeltaPos.xyz, outDeltaAxis.xyz, actingLinearImpulse.xyz, actingAngularImpulse.xyz, deltaTime ); } void SimpleRigidBody::SetScene( void *scene ) diff --git a/Code/GamePhysics/Implementation/SphericalRigidBody.cpp b/Code/GamePhysics/Implementation/SphericalRigidBody.cpp index bb497851..a164cbe1 100644 --- a/Code/GamePhysics/Implementation/SphericalRigidBody.cpp +++ b/Code/GamePhysics/Implementation/SphericalRigidBody.cpp @@ -24,7 +24,7 @@ SphericalRigidBody::SphericalRigidBody() SphericalRigidBody::SphericalRigidBody( const API::SphericalBodyDescription &desc ) { this->rigid = RigidBody(); - this->rigid.SetRotation( desc.rotation ); + //this->rigid.SetRotation( desc.rotation ); this->rigid.centerPos = desc.centerPosition; this->rigid.boundingReach = Float4( desc.radius, desc.radius, desc.radius, 0.0f ); this->rigid.SetMass_KeepMomentum( desc.mass ); @@ -108,8 +108,8 @@ void SphericalRigidBody::SetState( const SphericalRigidBody::State &state ) if( state.IsForwarded() ) { - this->deltaPos += state.GetForward_DeltaPos(); - this->deltaAxis += state.GetForward_DeltaAxis(); + this->deltaPos += Float4(state.GetForward_DeltaPos(), 0); + this->deltaAxis += Float4(state.GetForward_DeltaAxis()); this->isForwarded = false; } @@ -171,7 +171,7 @@ Sphere & SphericalRigidBody::GetBoundingSphere( Sphere &targetMem ) const Float4 & SphericalRigidBody::GetNormalAt( const Float4 &worldPos, Float4 &targetMem ) const { - targetMem = worldPos - this->rigid.centerPos; + targetMem = worldPos.xyz - this->rigid.centerPos; Float magnitude = targetMem.GetMagnitude(); if( magnitude != 0.0f ) { // sanity check @@ -220,7 +220,7 @@ UpdateState SphericalRigidBody::Update( Float timeStepLength ) { if( this->isForwarded ) { - this->rigid.Move( this->deltaPos, this->deltaAxis ); + this->rigid.Move( this->deltaPos.xyz, this->deltaAxis.xyz ); this->deltaPos = Float4::null; this->deltaAxis = Float4::null; this->isForwarded = false; @@ -235,7 +235,7 @@ UpdateState SphericalRigidBody::Update( Float timeStepLength ) void SphericalRigidBody::Predict( ::Oyster::Math::Float4 &outDeltaPos, ::Oyster::Math::Float4 &outDeltaAxis, const ::Oyster::Math::Float4 &actingLinearImpulse, const ::Oyster::Math::Float4 &actingAngularImpulse, ::Oyster::Math::Float deltaTime ) { - this->rigid.Predict_LeapFrog( outDeltaPos, outDeltaAxis, actingLinearImpulse, actingAngularImpulse, deltaTime ); + this->rigid.Predict_LeapFrog( outDeltaPos.xyz, outDeltaAxis.xyz, actingLinearImpulse.xyz, actingAngularImpulse.xyz, deltaTime ); } void SphericalRigidBody::SetSubscription( ICustomBody::EventAction_Collision functionPointer ) diff --git a/Code/GamePhysics/PhysicsStructs-Impl.h b/Code/GamePhysics/PhysicsStructs-Impl.h index 3fd430ff..fa5533fa 100644 --- a/Code/GamePhysics/PhysicsStructs-Impl.h +++ b/Code/GamePhysics/PhysicsStructs-Impl.h @@ -13,8 +13,8 @@ namespace Oyster inline SimpleBodyDescription::SimpleBodyDescription() { this->rotation = ::Oyster::Math::Float4x4::identity; - this->centerPosition = ::Oyster::Math::Float4::standard_unit_w; - this->size = ::Oyster::Math::Float4( 1.0f ); + this->centerPosition = ::Oyster::Math::Float3::null; + this->size = ::Oyster::Math::Float3( 1.0f ); this->mass = 12.0f; this->restitutionCoeff = 1.0f; this->frictionCoeff_Dynamic = 0.5f; @@ -29,7 +29,7 @@ namespace Oyster inline SphericalBodyDescription::SphericalBodyDescription() { this->rotation = ::Oyster::Math::Float4x4::identity; - this->centerPosition = ::Oyster::Math::Float4::standard_unit_w; + this->centerPosition = ::Oyster::Math::Float3::null; this->radius = 0.5f; this->mass = 10.0f; this->restitutionCoeff = 1.0f; @@ -41,7 +41,7 @@ namespace Oyster this->ignoreGravity = false; } - inline CustomBodyState::CustomBodyState( ::Oyster::Math::Float mass, ::Oyster::Math::Float restitutionCoeff, ::Oyster::Math::Float staticFrictionCoeff, ::Oyster::Math::Float kineticFrictionCoeff, const ::Oyster::Physics3D::MomentOfInertia &inertiaTensor, const ::Oyster::Math::Float4 &reach, const ::Oyster::Math::Float4 ¢erPos, const ::Oyster::Math::Float4 &rotation, const ::Oyster::Math::Float4 &linearMomentum, const ::Oyster::Math::Float4 &angularMomentum, const ::Oyster::Math::Float4 &gravityNormal ) + inline CustomBodyState::CustomBodyState( ::Oyster::Math::Float mass, ::Oyster::Math::Float restitutionCoeff, ::Oyster::Math::Float staticFrictionCoeff, ::Oyster::Math::Float kineticFrictionCoeff, const ::Oyster::Physics3D::MomentOfInertia &inertiaTensor, const ::Oyster::Math::Float3 &reach, const ::Oyster::Math::Float3 ¢erPos, const ::Oyster::Math::Float3 &rotation, const ::Oyster::Math::Float3 &linearMomentum, const ::Oyster::Math::Float3 &angularMomentum, const ::Oyster::Math::Float3 &gravityNormal ) { this->mass = mass; this->restitutionCoeff = restitutionCoeff; @@ -53,8 +53,8 @@ namespace Oyster this->angularAxis = rotation; this->linearMomentum = linearMomentum; this->angularMomentum = angularMomentum; - this->linearImpulse = this->angularImpulse = ::Oyster::Math::Float4::null; - this->deltaPos = this->deltaAxis = ::Oyster::Math::Float4::null; + this->linearImpulse = this->angularImpulse = ::Oyster::Math::Float3::null; + this->deltaPos = this->deltaAxis = ::Oyster::Math::Float3::null; this->isSpatiallyAltered = this->isDisturbed = this->isForwarded = false; this->gravityNormal = gravityNormal; } @@ -107,87 +107,87 @@ namespace Oyster return this->inertiaTensor; } - inline const ::Oyster::Math::Float4 & CustomBodyState::GetReach() const + inline const ::Oyster::Math::Float3 & CustomBodyState::GetReach() const { return this->reach; } - inline ::Oyster::Math::Float4 CustomBodyState::GetSize() const + inline ::Oyster::Math::Float3 CustomBodyState::GetSize() const { return 2.0f * this->GetReach(); } - inline const ::Oyster::Math::Float4 & CustomBodyState::GetCenterPosition() const + inline const ::Oyster::Math::Float3 & CustomBodyState::GetCenterPosition() const { return this->centerPos; } - inline const ::Oyster::Math::Float4 & CustomBodyState::GetAngularAxis() const + inline const ::Oyster::Math::Float3 & CustomBodyState::GetAngularAxis() const { return this->angularAxis; } inline ::Oyster::Math::Float4x4 CustomBodyState::GetRotation() const { - return ::Oyster::Math3D::RotationMatrix( this->GetAngularAxis().xyz ); + return ::Oyster::Math3D::RotationMatrix( this->GetAngularAxis() ); } inline ::Oyster::Math::Float4x4 CustomBodyState::GetOrientation() const { - return ::Oyster::Math3D::OrientationMatrix( this->angularAxis.xyz, this->centerPos.xyz ); + return ::Oyster::Math3D::OrientationMatrix( this->angularAxis, this->centerPos ); } - inline ::Oyster::Math::Float4x4 CustomBodyState::GetOrientation( const ::Oyster::Math::Float4 &offset ) const + inline ::Oyster::Math::Float4x4 CustomBodyState::GetOrientation( const ::Oyster::Math::Float3 &offset ) const { - return ::Oyster::Math3D::OrientationMatrix( this->angularAxis.xyz, (this->centerPos + offset).xyz ); + return ::Oyster::Math3D::OrientationMatrix( this->angularAxis, (this->centerPos + offset) ); } inline ::Oyster::Math::Float4x4 CustomBodyState::GetView() const { - return ::Oyster::Math3D::ViewMatrix( this->angularAxis.xyz, this->centerPos.xyz ); + return ::Oyster::Math3D::ViewMatrix( this->angularAxis, this->centerPos ); } - inline ::Oyster::Math::Float4x4 CustomBodyState::GetView( const ::Oyster::Math::Float4 &offset ) const + inline ::Oyster::Math::Float4x4 CustomBodyState::GetView( const ::Oyster::Math::Float3 &offset ) const { - return ::Oyster::Math3D::ViewMatrix( this->angularAxis.xyz, (this->centerPos + offset).xyz ); + return ::Oyster::Math3D::ViewMatrix( this->angularAxis, (this->centerPos + offset) ); } - inline const ::Oyster::Math::Float4 & CustomBodyState::GetLinearMomentum() const + inline const ::Oyster::Math::Float3 & CustomBodyState::GetLinearMomentum() const { return this->linearMomentum; } - inline ::Oyster::Math::Float4 CustomBodyState::GetLinearMomentum( const ::Oyster::Math::Float4 &at ) const + inline ::Oyster::Math::Float3 CustomBodyState::GetLinearMomentum( const ::Oyster::Math::Float3 &at ) const { return this->linearMomentum + ::Oyster::Physics3D::Formula::TangentialLinearMomentum( this->angularMomentum, at - this->centerPos ); } - inline const ::Oyster::Math::Float4 & CustomBodyState::GetAngularMomentum() const + inline const ::Oyster::Math::Float3 & CustomBodyState::GetAngularMomentum() const { return this->angularMomentum; } - inline const ::Oyster::Math::Float4 & CustomBodyState::GetLinearImpulse() const + inline const ::Oyster::Math::Float3 & CustomBodyState::GetLinearImpulse() const { return this->linearImpulse; } - inline const ::Oyster::Math::Float4 & CustomBodyState::GetAngularImpulse() const + inline const ::Oyster::Math::Float3 & CustomBodyState::GetAngularImpulse() const { return this->angularImpulse; } - inline const ::Oyster::Math::Float4 & CustomBodyState::GetForward_DeltaPos() const + inline const ::Oyster::Math::Float3 & CustomBodyState::GetForward_DeltaPos() const { return this->deltaPos; } - inline const ::Oyster::Math::Float4 & CustomBodyState::GetForward_DeltaAxis() const + inline const ::Oyster::Math::Float3 & CustomBodyState::GetForward_DeltaAxis() const { return this->deltaAxis; } - inline const ::Oyster::Math::Float4 & CustomBodyState::GetGravityNormal() const + inline const ::Oyster::Math::Float3 & CustomBodyState::GetGravityNormal() const { return this->gravityNormal; } @@ -227,39 +227,39 @@ namespace Oyster inline void CustomBodyState::SetMomentOfInertia_KeepVelocity( const ::Oyster::Physics3D::MomentOfInertia &tensor ) { ::Oyster::Math::Quaternion rotation = ::Oyster::Math3D::Rotation(this->angularAxis); - ::Oyster::Math::Float4 w = this->inertiaTensor.CalculateAngularVelocity( rotation, this->angularMomentum ); + ::Oyster::Math::Float3 w = this->inertiaTensor.CalculateAngularVelocity( rotation, this->angularMomentum ); this->inertiaTensor = tensor; this->angularMomentum = this->inertiaTensor.CalculateAngularMomentum( rotation, w ); } - inline void CustomBodyState::SetSize( const ::Oyster::Math::Float4 &size ) + inline void CustomBodyState::SetSize( const ::Oyster::Math::Float3 &size ) { this->SetReach( 0.5f * size ); } - inline void CustomBodyState::SetReach( const ::Oyster::Math::Float4 &halfSize ) + inline void CustomBodyState::SetReach( const ::Oyster::Math::Float3 &halfSize ) { - this->reach.xyz = halfSize; - this->reach = ::Utility::Value::Max( this->reach, ::Oyster::Math::Float4::null ); + this->reach = halfSize; + this->reach = ::Utility::Value::Max( this->reach, ::Oyster::Math::Float3::null ); this->isSpatiallyAltered = this->isDisturbed = true; } - inline void CustomBodyState::SetCenterPosition( const ::Oyster::Math::Float4 ¢erPos ) + inline void CustomBodyState::SetCenterPosition( const ::Oyster::Math::Float3 ¢erPos ) { - this->centerPos.xyz = centerPos; + this->centerPos = centerPos; this->isSpatiallyAltered = this->isDisturbed = true; } - inline void CustomBodyState::SetRotation( const ::Oyster::Math::Float4 &angularAxis ) + inline void CustomBodyState::SetRotation( const ::Oyster::Math::Float3 &angularAxis ) { - this->angularAxis.xyz = angularAxis; + this->angularAxis = angularAxis; this->isSpatiallyAltered = this->isDisturbed = true; } inline void CustomBodyState::SetOrientation( const ::Oyster::Math::Float3 &angularAxis, const ::Oyster::Math::Float3 &translation ) { - this->angularAxis.xyz = angularAxis ; - this->centerPos.xyz = translation; + this->angularAxis = angularAxis ; + this->centerPos = translation; this->isSpatiallyAltered = this->isDisturbed = true; } @@ -276,70 +276,70 @@ namespace Oyster - inline void CustomBodyState::SetLinearMomentum( const ::Oyster::Math::Float4 &g ) + inline void CustomBodyState::SetLinearMomentum( const ::Oyster::Math::Float3 &g ) { - this->linearMomentum.xyz = g; + this->linearMomentum = g; this->isDisturbed = true; } - inline void CustomBodyState::SetAngularMomentum( const ::Oyster::Math::Float4 &h ) + inline void CustomBodyState::SetAngularMomentum( const ::Oyster::Math::Float3 &h ) { - this->angularMomentum.xyz = h; + this->angularMomentum = h; this->isDisturbed = true; } - inline void CustomBodyState::SetLinearImpulse( const ::Oyster::Math::Float4 &j ) + inline void CustomBodyState::SetLinearImpulse( const ::Oyster::Math::Float3 &j ) { - this->linearImpulse.xyz = j; + this->linearImpulse = j; this->isDisturbed = true; } - inline void CustomBodyState::SetAngularImpulse( const ::Oyster::Math::Float4 &j ) + inline void CustomBodyState::SetAngularImpulse( const ::Oyster::Math::Float3 &j ) { - this->angularImpulse.xyz = j; + this->angularImpulse = j; this->isDisturbed = true; } - inline void CustomBodyState::SetGravityNormal( const ::Oyster::Math::Float4 &gravityNormal ) + inline void CustomBodyState::SetGravityNormal( const ::Oyster::Math::Float3 &gravityNormal ) { this->gravityNormal = gravityNormal; } - inline void CustomBodyState::AddRotation( const ::Oyster::Math::Float4 &angularAxis ) + inline void CustomBodyState::AddRotation( const ::Oyster::Math::Float3 &angularAxis ) { this->angularAxis += angularAxis; this->isSpatiallyAltered = this->isDisturbed = true; } - inline void CustomBodyState::AddTranslation( const ::Oyster::Math::Float4 &deltaPos ) + inline void CustomBodyState::AddTranslation( const ::Oyster::Math::Float3 &deltaPos ) { this->centerPos += deltaPos; this->isSpatiallyAltered = this->isDisturbed = true; } - inline void CustomBodyState::ApplyLinearImpulse( const ::Oyster::Math::Float4 &j ) + inline void CustomBodyState::ApplyLinearImpulse( const ::Oyster::Math::Float3 &j ) { this->linearImpulse += j; this->isDisturbed = true; } - inline void CustomBodyState::ApplyAngularImpulse( const ::Oyster::Math::Float4 &j ) + inline void CustomBodyState::ApplyAngularImpulse( const ::Oyster::Math::Float3 &j ) { this->angularImpulse += j; this->isDisturbed = true; } - inline void CustomBodyState::ApplyImpulse( const ::Oyster::Math::Float4 &j, const ::Oyster::Math::Float4 &at, const ::Oyster::Math::Float4 &normal ) + inline void CustomBodyState::ApplyImpulse( const ::Oyster::Math::Float3 &j, const ::Oyster::Math::Float3 &at, const ::Oyster::Math::Float3 &normal ) { - ::Oyster::Math::Float4 offset = at - this->centerPos; - ::Oyster::Math::Float4 deltaAngularImpulse = ::Oyster::Physics3D::Formula::AngularMomentum( j, offset ); + ::Oyster::Math::Float3 offset = at - this->centerPos; + ::Oyster::Math::Float3 deltaAngularImpulse = ::Oyster::Physics3D::Formula::AngularMomentum( j, offset ); this->linearImpulse += j - ::Oyster::Physics3D::Formula::TangentialLinearMomentum( deltaAngularImpulse, offset ); this->angularImpulse += deltaAngularImpulse; this->isDisturbed = true; } - inline void CustomBodyState::ApplyForwarding( const ::Oyster::Math::Float4 &deltaPos, const ::Oyster::Math::Float4 &deltaAxis ) + inline void CustomBodyState::ApplyForwarding( const ::Oyster::Math::Float3 &deltaPos, const ::Oyster::Math::Float3 &deltaAxis ) { this->deltaPos += deltaPos; this->deltaAxis += deltaAxis; diff --git a/Code/GamePhysics/PhysicsStructs.h b/Code/GamePhysics/PhysicsStructs.h index 00b382c5..49cf6993 100644 --- a/Code/GamePhysics/PhysicsStructs.h +++ b/Code/GamePhysics/PhysicsStructs.h @@ -12,8 +12,8 @@ namespace Oyster { namespace Physics struct SimpleBodyDescription { ::Oyster::Math::Float4x4 rotation; - ::Oyster::Math::Float4 centerPosition; - ::Oyster::Math::Float4 size; + ::Oyster::Math::Float3 centerPosition; + ::Oyster::Math::Float3 size; ::Oyster::Math::Float mass; ::Oyster::Math::Float restitutionCoeff; ::Oyster::Math::Float frictionCoeff_Static; @@ -30,7 +30,7 @@ namespace Oyster { namespace Physics struct SphericalBodyDescription { ::Oyster::Math::Float4x4 rotation; - ::Oyster::Math::Float4 centerPosition; + ::Oyster::Math::Float3 centerPosition; ::Oyster::Math::Float radius; ::Oyster::Math::Float mass; ::Oyster::Math::Float restitutionCoeff; @@ -52,12 +52,12 @@ namespace Oyster { namespace Physics ::Oyster::Math::Float staticFrictionCoeff = 1.0f, ::Oyster::Math::Float kineticFrictionCoeff = 1.0f, const ::Oyster::Physics3D::MomentOfInertia &inertiaTensor = ::Oyster::Physics3D::MomentOfInertia(), - const ::Oyster::Math::Float4 &reach = ::Oyster::Math::Float4::null, - const ::Oyster::Math::Float4 ¢erPos = ::Oyster::Math::Float4::standard_unit_w, - const ::Oyster::Math::Float4 &rotation = ::Oyster::Math::Float4::null, - const ::Oyster::Math::Float4 &linearMomentum = ::Oyster::Math::Float4::null, - const ::Oyster::Math::Float4 &angularMomentum = ::Oyster::Math::Float4::null, - const ::Oyster::Math::Float4 &gravityNormal = ::Oyster::Math::Float4::null); + const ::Oyster::Math::Float3 &reach = ::Oyster::Math::Float3::null, + const ::Oyster::Math::Float3 ¢erPos = ::Oyster::Math::Float3::null, + const ::Oyster::Math::Float3 &rotation = ::Oyster::Math::Float3::null, + const ::Oyster::Math::Float3 &linearMomentum = ::Oyster::Math::Float3::null, + const ::Oyster::Math::Float3 &angularMomentum = ::Oyster::Math::Float3::null, + const ::Oyster::Math::Float3 &gravityNormal = ::Oyster::Math::Float3::null); CustomBodyState & operator = ( const CustomBodyState &state ); @@ -66,23 +66,23 @@ namespace Oyster { namespace Physics const ::Oyster::Math::Float GetFrictionCoeff_Static() const; const ::Oyster::Math::Float GetFrictionCoeff_Kinetic() const; const ::Oyster::Physics3D::MomentOfInertia & GetMomentOfInertia() const; - const ::Oyster::Math::Float4 & GetReach() const; - ::Oyster::Math::Float4 GetSize() const; - const ::Oyster::Math::Float4 & GetCenterPosition() const; - const ::Oyster::Math::Float4 & GetAngularAxis() const; + const ::Oyster::Math::Float3 & GetReach() const; + ::Oyster::Math::Float3 GetSize() const; + const ::Oyster::Math::Float3 & GetCenterPosition() const; + const ::Oyster::Math::Float3 & GetAngularAxis() const; ::Oyster::Math::Float4x4 GetRotation() const; ::Oyster::Math::Float4x4 GetOrientation() const; - ::Oyster::Math::Float4x4 GetOrientation( const ::Oyster::Math::Float4 &offset ) const; + ::Oyster::Math::Float4x4 GetOrientation( const ::Oyster::Math::Float3 &offset ) const; ::Oyster::Math::Float4x4 GetView() const; - ::Oyster::Math::Float4x4 GetView( const ::Oyster::Math::Float4 &offset ) const; - const ::Oyster::Math::Float4 & GetLinearMomentum() const; - ::Oyster::Math::Float4 GetLinearMomentum( const ::Oyster::Math::Float4 &at ) const; - const ::Oyster::Math::Float4 & GetAngularMomentum() const; - const ::Oyster::Math::Float4 & GetLinearImpulse() const; - const ::Oyster::Math::Float4 & GetAngularImpulse() const; - const ::Oyster::Math::Float4 & GetForward_DeltaPos() const; - const ::Oyster::Math::Float4 & GetForward_DeltaAxis() const; - const ::Oyster::Math::Float4 & GetGravityNormal() const; + ::Oyster::Math::Float4x4 GetView( const ::Oyster::Math::Float3 &offset ) const; + const ::Oyster::Math::Float3 & GetLinearMomentum() const; + ::Oyster::Math::Float3 GetLinearMomentum( const ::Oyster::Math::Float3 &at ) const; + const ::Oyster::Math::Float3 & GetAngularMomentum() const; + const ::Oyster::Math::Float3 & GetLinearImpulse() const; + const ::Oyster::Math::Float3 & GetAngularImpulse() const; + const ::Oyster::Math::Float3 & GetForward_DeltaPos() const; + const ::Oyster::Math::Float3 & GetForward_DeltaAxis() const; + const ::Oyster::Math::Float3 & GetGravityNormal() const; void SetMass_KeepMomentum( ::Oyster::Math::Float m ); void SetMass_KeepVelocity( ::Oyster::Math::Float m ); @@ -90,26 +90,26 @@ namespace Oyster { namespace Physics void SetFrictionCoeff( ::Oyster::Math::Float staticU, ::Oyster::Math::Float kineticU ); void SetMomentOfInertia_KeepMomentum( const ::Oyster::Physics3D::MomentOfInertia &tensor ); void SetMomentOfInertia_KeepVelocity( const ::Oyster::Physics3D::MomentOfInertia &tensor ); - void SetSize( const ::Oyster::Math::Float4 &size ); - void SetReach( const ::Oyster::Math::Float4 &halfSize ); - void SetCenterPosition( const ::Oyster::Math::Float4 ¢erPos ); - void SetRotation( const ::Oyster::Math::Float4 &angularAxis ); + void SetSize( const ::Oyster::Math::Float3 &size ); + void SetReach( const ::Oyster::Math::Float3 &halfSize ); + void SetCenterPosition( const ::Oyster::Math::Float3 ¢erPos ); + void SetRotation( const ::Oyster::Math::Float3 &angularAxis ); //void SetRotation( const ::Oyster::Math::Float4x4 &rotation ); //void SetOrientation( const ::Oyster::Math::Float4x4 &orientation ); void SetOrientation( const ::Oyster::Math::Float3 &angularAxis, const ::Oyster::Math::Float3 &translation ); - void SetLinearMomentum( const ::Oyster::Math::Float4 &g ); - void SetAngularMomentum( const ::Oyster::Math::Float4 &h ); - void SetLinearImpulse( const ::Oyster::Math::Float4 &j ); - void SetAngularImpulse( const ::Oyster::Math::Float4 &j ); - void SetGravityNormal( const ::Oyster::Math::Float4 &gravityNormal ); + void SetLinearMomentum( const ::Oyster::Math::Float3 &g ); + void SetAngularMomentum( const ::Oyster::Math::Float3 &h ); + void SetLinearImpulse( const ::Oyster::Math::Float3 &j ); + void SetAngularImpulse( const ::Oyster::Math::Float3 &j ); + void SetGravityNormal( const ::Oyster::Math::Float3 &gravityNormal ); - void AddRotation( const ::Oyster::Math::Float4 &angularAxis ); - void AddTranslation( const ::Oyster::Math::Float4 &deltaPos ); + void AddRotation( const ::Oyster::Math::Float3 &angularAxis ); + void AddTranslation( const ::Oyster::Math::Float3 &deltaPos ); - void ApplyLinearImpulse( const ::Oyster::Math::Float4 &j ); - void ApplyAngularImpulse( const ::Oyster::Math::Float4 &j ); - void ApplyImpulse( const ::Oyster::Math::Float4 &j, const ::Oyster::Math::Float4 &at, const ::Oyster::Math::Float4 &normal ); - void ApplyForwarding( const ::Oyster::Math::Float4 &deltaPos, const ::Oyster::Math::Float4 &deltaAxis ); + void ApplyLinearImpulse( const ::Oyster::Math::Float3 &j ); + void ApplyAngularImpulse( const ::Oyster::Math::Float3 &j ); + void ApplyImpulse( const ::Oyster::Math::Float3 &j, const ::Oyster::Math::Float3 &at, const ::Oyster::Math::Float3 &normal ); + void ApplyForwarding( const ::Oyster::Math::Float3 &deltaPos, const ::Oyster::Math::Float3 &deltaAxis ); bool IsSpatiallyAltered() const; bool IsDisturbed() const; @@ -118,11 +118,11 @@ namespace Oyster { namespace Physics private: ::Oyster::Math::Float mass, restitutionCoeff, staticFrictionCoeff, kineticFrictionCoeff; ::Oyster::Physics3D::MomentOfInertia inertiaTensor; - ::Oyster::Math::Float4 reach, centerPos, angularAxis; - ::Oyster::Math::Float4 linearMomentum, angularMomentum; - ::Oyster::Math::Float4 linearImpulse, angularImpulse; - ::Oyster::Math::Float4 deltaPos, deltaAxis; // Forwarding data sum - ::Oyster::Math::Float4 gravityNormal; + ::Oyster::Math::Float3 reach, centerPos, angularAxis; + ::Oyster::Math::Float3 linearMomentum, angularMomentum; + ::Oyster::Math::Float3 linearImpulse, angularImpulse; + ::Oyster::Math::Float3 deltaPos, deltaAxis; // Forwarding data sum + ::Oyster::Math::Float3 gravityNormal; bool isSpatiallyAltered, isDisturbed, isForwarded; };