Changed float4 to float3
This commit is contained in:
parent
018d6e3c5a
commit
f96c5a9f7e
|
@ -31,8 +31,8 @@ namespace
|
||||||
ICustomBody::State protoState; proto->GetState( protoState );
|
ICustomBody::State protoState; proto->GetState( protoState );
|
||||||
ICustomBody::State deuterState; deuter->GetState( deuterState );
|
ICustomBody::State deuterState; deuter->GetState( deuterState );
|
||||||
|
|
||||||
Float4 protoG = protoState.GetLinearMomentum( worldPointOfContact ),
|
Float4 protoG = protoState.GetLinearMomentum( worldPointOfContact.xyz ),
|
||||||
deuterG = deuterState.GetLinearMomentum( worldPointOfContact );
|
deuterG = deuterState.GetLinearMomentum( worldPointOfContact.xyz );
|
||||||
|
|
||||||
// calc from perspective of deuter
|
// calc from perspective of deuter
|
||||||
Float4 normal; deuter->GetNormalAt( worldPointOfContact, normal );
|
Float4 normal; deuter->GetNormalAt( worldPointOfContact, normal );
|
||||||
|
@ -40,7 +40,7 @@ namespace
|
||||||
deuterG_Magnitude = deuterG.Dot( normal );
|
deuterG_Magnitude = deuterG.Dot( normal );
|
||||||
|
|
||||||
// if they are not relatively moving towards eachother, there is no collision
|
// 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( deltaPos < 0.0f )
|
||||||
{
|
{
|
||||||
if( protoG_Magnitude >= deuterG_Magnitude )
|
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.ApplyForwarding( forwardedDeltaPos, forwardedDeltaAxis );
|
||||||
protoState.ApplyImpulse( bounce, worldPointOfContact, normal );
|
protoState.ApplyImpulse( bounce.xyz, worldPointOfContact.xyz, normal.xyz );
|
||||||
proto->SetState( protoState );
|
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 );
|
proto->CallSubscription_CollisionResponse( deuter, kineticEnergyPBefore - kineticEnergyPAFter );
|
||||||
|
|
||||||
|
@ -179,7 +179,7 @@ void API_Impl::Update()
|
||||||
{
|
{
|
||||||
case Gravity::GravityType_Well:
|
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 );
|
Float rSquared = d.Dot( d );
|
||||||
if( rSquared != 0.0 )
|
if( rSquared != 0.0 )
|
||||||
{
|
{
|
||||||
|
@ -201,7 +201,7 @@ void API_Impl::Update()
|
||||||
|
|
||||||
if( gravityImpulse != Float4::null )
|
if( gravityImpulse != Float4::null )
|
||||||
{
|
{
|
||||||
state.ApplyLinearImpulse( gravityImpulse );
|
state.ApplyLinearImpulse( gravityImpulse.xyz );
|
||||||
(*proto)->SetGravityNormal( gravityImpulse.GetNormalized().xyz );
|
(*proto)->SetGravityNormal( gravityImpulse.GetNormalized().xyz );
|
||||||
(*proto)->SetState( state );
|
(*proto)->SetState( state );
|
||||||
}
|
}
|
||||||
|
|
|
@ -56,7 +56,7 @@ SimpleRigidBody::SimpleRigidBody()
|
||||||
|
|
||||||
SimpleRigidBody::SimpleRigidBody( const API::SimpleBodyDescription &desc )
|
SimpleRigidBody::SimpleRigidBody( const API::SimpleBodyDescription &desc )
|
||||||
{
|
{
|
||||||
this->rigid.SetRotation( desc.rotation );
|
//this->rigid.SetRotation( desc.rotation );
|
||||||
this->rigid.centerPos = desc.centerPosition;
|
this->rigid.centerPos = desc.centerPosition;
|
||||||
this->rigid.SetSize( desc.size );
|
this->rigid.SetSize( desc.size );
|
||||||
this->rigid.SetMass_KeepMomentum( desc.mass );
|
this->rigid.SetMass_KeepMomentum( desc.mass );
|
||||||
|
@ -143,8 +143,8 @@ void SimpleRigidBody::SetState( const SimpleRigidBody::State &state )
|
||||||
|
|
||||||
if( state.IsForwarded() )
|
if( state.IsForwarded() )
|
||||||
{
|
{
|
||||||
this->deltaPos += state.GetForward_DeltaPos();
|
this->deltaPos += Float4(state.GetForward_DeltaPos(), 0);
|
||||||
this->deltaAxis += state.GetForward_DeltaAxis();
|
this->deltaAxis += Float4(state.GetForward_DeltaAxis(), 0);
|
||||||
this->isForwarded;
|
this->isForwarded;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -205,7 +205,7 @@ Sphere & SimpleRigidBody::GetBoundingSphere( Sphere &targetMem ) const
|
||||||
|
|
||||||
Float4 & SimpleRigidBody::GetNormalAt( const Float4 &worldPos, Float4 &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 );
|
Float distance = offset.Dot( offset );
|
||||||
Float3 normal = Float3::null;
|
Float3 normal = Float3::null;
|
||||||
|
|
||||||
|
@ -295,7 +295,7 @@ UpdateState SimpleRigidBody::Update( Float timeStepLength )
|
||||||
{
|
{
|
||||||
if( this->isForwarded )
|
if( this->isForwarded )
|
||||||
{
|
{
|
||||||
this->rigid.Move( this->deltaPos, this->deltaAxis );
|
this->rigid.Move( this->deltaPos.xyz, this->deltaAxis.xyz );
|
||||||
this->deltaPos = Float4::null;
|
this->deltaPos = Float4::null;
|
||||||
this->deltaAxis = Float4::null;
|
this->deltaAxis = Float4::null;
|
||||||
this->isForwarded = false;
|
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 )
|
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 )
|
void SimpleRigidBody::SetScene( void *scene )
|
||||||
|
|
|
@ -24,7 +24,7 @@ SphericalRigidBody::SphericalRigidBody()
|
||||||
SphericalRigidBody::SphericalRigidBody( const API::SphericalBodyDescription &desc )
|
SphericalRigidBody::SphericalRigidBody( const API::SphericalBodyDescription &desc )
|
||||||
{
|
{
|
||||||
this->rigid = RigidBody();
|
this->rigid = RigidBody();
|
||||||
this->rigid.SetRotation( desc.rotation );
|
//this->rigid.SetRotation( desc.rotation );
|
||||||
this->rigid.centerPos = desc.centerPosition;
|
this->rigid.centerPos = desc.centerPosition;
|
||||||
this->rigid.boundingReach = Float4( desc.radius, desc.radius, desc.radius, 0.0f );
|
this->rigid.boundingReach = Float4( desc.radius, desc.radius, desc.radius, 0.0f );
|
||||||
this->rigid.SetMass_KeepMomentum( desc.mass );
|
this->rigid.SetMass_KeepMomentum( desc.mass );
|
||||||
|
@ -108,8 +108,8 @@ void SphericalRigidBody::SetState( const SphericalRigidBody::State &state )
|
||||||
|
|
||||||
if( state.IsForwarded() )
|
if( state.IsForwarded() )
|
||||||
{
|
{
|
||||||
this->deltaPos += state.GetForward_DeltaPos();
|
this->deltaPos += Float4(state.GetForward_DeltaPos(), 0);
|
||||||
this->deltaAxis += state.GetForward_DeltaAxis();
|
this->deltaAxis += Float4(state.GetForward_DeltaAxis());
|
||||||
this->isForwarded = false;
|
this->isForwarded = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -171,7 +171,7 @@ Sphere & SphericalRigidBody::GetBoundingSphere( Sphere &targetMem ) const
|
||||||
|
|
||||||
Float4 & SphericalRigidBody::GetNormalAt( const Float4 &worldPos, Float4 &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();
|
Float magnitude = targetMem.GetMagnitude();
|
||||||
if( magnitude != 0.0f )
|
if( magnitude != 0.0f )
|
||||||
{ // sanity check
|
{ // sanity check
|
||||||
|
@ -220,7 +220,7 @@ UpdateState SphericalRigidBody::Update( Float timeStepLength )
|
||||||
{
|
{
|
||||||
if( this->isForwarded )
|
if( this->isForwarded )
|
||||||
{
|
{
|
||||||
this->rigid.Move( this->deltaPos, this->deltaAxis );
|
this->rigid.Move( this->deltaPos.xyz, this->deltaAxis.xyz );
|
||||||
this->deltaPos = Float4::null;
|
this->deltaPos = Float4::null;
|
||||||
this->deltaAxis = Float4::null;
|
this->deltaAxis = Float4::null;
|
||||||
this->isForwarded = false;
|
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 )
|
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 )
|
void SphericalRigidBody::SetSubscription( ICustomBody::EventAction_Collision functionPointer )
|
||||||
|
|
|
@ -13,8 +13,8 @@ namespace Oyster
|
||||||
inline SimpleBodyDescription::SimpleBodyDescription()
|
inline SimpleBodyDescription::SimpleBodyDescription()
|
||||||
{
|
{
|
||||||
this->rotation = ::Oyster::Math::Float4x4::identity;
|
this->rotation = ::Oyster::Math::Float4x4::identity;
|
||||||
this->centerPosition = ::Oyster::Math::Float4::standard_unit_w;
|
this->centerPosition = ::Oyster::Math::Float3::null;
|
||||||
this->size = ::Oyster::Math::Float4( 1.0f );
|
this->size = ::Oyster::Math::Float3( 1.0f );
|
||||||
this->mass = 12.0f;
|
this->mass = 12.0f;
|
||||||
this->restitutionCoeff = 1.0f;
|
this->restitutionCoeff = 1.0f;
|
||||||
this->frictionCoeff_Dynamic = 0.5f;
|
this->frictionCoeff_Dynamic = 0.5f;
|
||||||
|
@ -29,7 +29,7 @@ namespace Oyster
|
||||||
inline SphericalBodyDescription::SphericalBodyDescription()
|
inline SphericalBodyDescription::SphericalBodyDescription()
|
||||||
{
|
{
|
||||||
this->rotation = ::Oyster::Math::Float4x4::identity;
|
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->radius = 0.5f;
|
||||||
this->mass = 10.0f;
|
this->mass = 10.0f;
|
||||||
this->restitutionCoeff = 1.0f;
|
this->restitutionCoeff = 1.0f;
|
||||||
|
@ -41,7 +41,7 @@ namespace Oyster
|
||||||
this->ignoreGravity = false;
|
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->mass = mass;
|
||||||
this->restitutionCoeff = restitutionCoeff;
|
this->restitutionCoeff = restitutionCoeff;
|
||||||
|
@ -53,8 +53,8 @@ namespace Oyster
|
||||||
this->angularAxis = rotation;
|
this->angularAxis = rotation;
|
||||||
this->linearMomentum = linearMomentum;
|
this->linearMomentum = linearMomentum;
|
||||||
this->angularMomentum = angularMomentum;
|
this->angularMomentum = angularMomentum;
|
||||||
this->linearImpulse = this->angularImpulse = ::Oyster::Math::Float4::null;
|
this->linearImpulse = this->angularImpulse = ::Oyster::Math::Float3::null;
|
||||||
this->deltaPos = this->deltaAxis = ::Oyster::Math::Float4::null;
|
this->deltaPos = this->deltaAxis = ::Oyster::Math::Float3::null;
|
||||||
this->isSpatiallyAltered = this->isDisturbed = this->isForwarded = false;
|
this->isSpatiallyAltered = this->isDisturbed = this->isForwarded = false;
|
||||||
this->gravityNormal = gravityNormal;
|
this->gravityNormal = gravityNormal;
|
||||||
}
|
}
|
||||||
|
@ -107,87 +107,87 @@ namespace Oyster
|
||||||
return this->inertiaTensor;
|
return this->inertiaTensor;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline const ::Oyster::Math::Float4 & CustomBodyState::GetReach() const
|
inline const ::Oyster::Math::Float3 & CustomBodyState::GetReach() const
|
||||||
{
|
{
|
||||||
return this->reach;
|
return this->reach;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline ::Oyster::Math::Float4 CustomBodyState::GetSize() const
|
inline ::Oyster::Math::Float3 CustomBodyState::GetSize() const
|
||||||
{
|
{
|
||||||
return 2.0f * this->GetReach();
|
return 2.0f * this->GetReach();
|
||||||
}
|
}
|
||||||
|
|
||||||
inline const ::Oyster::Math::Float4 & CustomBodyState::GetCenterPosition() const
|
inline const ::Oyster::Math::Float3 & CustomBodyState::GetCenterPosition() const
|
||||||
{
|
{
|
||||||
return this->centerPos;
|
return this->centerPos;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline const ::Oyster::Math::Float4 & CustomBodyState::GetAngularAxis() const
|
inline const ::Oyster::Math::Float3 & CustomBodyState::GetAngularAxis() const
|
||||||
{
|
{
|
||||||
return this->angularAxis;
|
return this->angularAxis;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline ::Oyster::Math::Float4x4 CustomBodyState::GetRotation() const
|
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
|
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
|
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;
|
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 );
|
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;
|
return this->angularMomentum;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline const ::Oyster::Math::Float4 & CustomBodyState::GetLinearImpulse() const
|
inline const ::Oyster::Math::Float3 & CustomBodyState::GetLinearImpulse() const
|
||||||
{
|
{
|
||||||
return this->linearImpulse;
|
return this->linearImpulse;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline const ::Oyster::Math::Float4 & CustomBodyState::GetAngularImpulse() const
|
inline const ::Oyster::Math::Float3 & CustomBodyState::GetAngularImpulse() const
|
||||||
{
|
{
|
||||||
return this->angularImpulse;
|
return this->angularImpulse;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline const ::Oyster::Math::Float4 & CustomBodyState::GetForward_DeltaPos() const
|
inline const ::Oyster::Math::Float3 & CustomBodyState::GetForward_DeltaPos() const
|
||||||
{
|
{
|
||||||
return this->deltaPos;
|
return this->deltaPos;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline const ::Oyster::Math::Float4 & CustomBodyState::GetForward_DeltaAxis() const
|
inline const ::Oyster::Math::Float3 & CustomBodyState::GetForward_DeltaAxis() const
|
||||||
{
|
{
|
||||||
return this->deltaAxis;
|
return this->deltaAxis;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline const ::Oyster::Math::Float4 & CustomBodyState::GetGravityNormal() const
|
inline const ::Oyster::Math::Float3 & CustomBodyState::GetGravityNormal() const
|
||||||
{
|
{
|
||||||
return this->gravityNormal;
|
return this->gravityNormal;
|
||||||
}
|
}
|
||||||
|
@ -227,39 +227,39 @@ namespace Oyster
|
||||||
inline void CustomBodyState::SetMomentOfInertia_KeepVelocity( const ::Oyster::Physics3D::MomentOfInertia &tensor )
|
inline void CustomBodyState::SetMomentOfInertia_KeepVelocity( const ::Oyster::Physics3D::MomentOfInertia &tensor )
|
||||||
{
|
{
|
||||||
::Oyster::Math::Quaternion rotation = ::Oyster::Math3D::Rotation(this->angularAxis);
|
::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->inertiaTensor = tensor;
|
||||||
this->angularMomentum = this->inertiaTensor.CalculateAngularMomentum( rotation, w );
|
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 );
|
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 = halfSize;
|
||||||
this->reach = ::Utility::Value::Max( this->reach, ::Oyster::Math::Float4::null );
|
this->reach = ::Utility::Value::Max( this->reach, ::Oyster::Math::Float3::null );
|
||||||
this->isSpatiallyAltered = this->isDisturbed = true;
|
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;
|
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;
|
this->isSpatiallyAltered = this->isDisturbed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void CustomBodyState::SetOrientation( const ::Oyster::Math::Float3 &angularAxis, const ::Oyster::Math::Float3 &translation )
|
inline void CustomBodyState::SetOrientation( const ::Oyster::Math::Float3 &angularAxis, const ::Oyster::Math::Float3 &translation )
|
||||||
{
|
{
|
||||||
this->angularAxis.xyz = angularAxis ;
|
this->angularAxis = angularAxis ;
|
||||||
this->centerPos.xyz = translation;
|
this->centerPos = translation;
|
||||||
this->isSpatiallyAltered = this->isDisturbed = true;
|
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;
|
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;
|
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;
|
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;
|
this->isDisturbed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void CustomBodyState::SetGravityNormal( const ::Oyster::Math::Float4 &gravityNormal )
|
inline void CustomBodyState::SetGravityNormal( const ::Oyster::Math::Float3 &gravityNormal )
|
||||||
{
|
{
|
||||||
this->gravityNormal = 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->angularAxis += angularAxis;
|
||||||
this->isSpatiallyAltered = this->isDisturbed = true;
|
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->centerPos += deltaPos;
|
||||||
this->isSpatiallyAltered = this->isDisturbed = true;
|
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->linearImpulse += j;
|
||||||
this->isDisturbed = true;
|
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->angularImpulse += j;
|
||||||
this->isDisturbed = true;
|
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::Float3 offset = at - this->centerPos;
|
||||||
::Oyster::Math::Float4 deltaAngularImpulse = ::Oyster::Physics3D::Formula::AngularMomentum( j, offset );
|
::Oyster::Math::Float3 deltaAngularImpulse = ::Oyster::Physics3D::Formula::AngularMomentum( j, offset );
|
||||||
this->linearImpulse += j - ::Oyster::Physics3D::Formula::TangentialLinearMomentum( deltaAngularImpulse, offset );
|
this->linearImpulse += j - ::Oyster::Physics3D::Formula::TangentialLinearMomentum( deltaAngularImpulse, offset );
|
||||||
this->angularImpulse += deltaAngularImpulse;
|
this->angularImpulse += deltaAngularImpulse;
|
||||||
|
|
||||||
this->isDisturbed = true;
|
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->deltaPos += deltaPos;
|
||||||
this->deltaAxis += deltaAxis;
|
this->deltaAxis += deltaAxis;
|
||||||
|
|
|
@ -12,8 +12,8 @@ namespace Oyster { namespace Physics
|
||||||
struct SimpleBodyDescription
|
struct SimpleBodyDescription
|
||||||
{
|
{
|
||||||
::Oyster::Math::Float4x4 rotation;
|
::Oyster::Math::Float4x4 rotation;
|
||||||
::Oyster::Math::Float4 centerPosition;
|
::Oyster::Math::Float3 centerPosition;
|
||||||
::Oyster::Math::Float4 size;
|
::Oyster::Math::Float3 size;
|
||||||
::Oyster::Math::Float mass;
|
::Oyster::Math::Float mass;
|
||||||
::Oyster::Math::Float restitutionCoeff;
|
::Oyster::Math::Float restitutionCoeff;
|
||||||
::Oyster::Math::Float frictionCoeff_Static;
|
::Oyster::Math::Float frictionCoeff_Static;
|
||||||
|
@ -30,7 +30,7 @@ namespace Oyster { namespace Physics
|
||||||
struct SphericalBodyDescription
|
struct SphericalBodyDescription
|
||||||
{
|
{
|
||||||
::Oyster::Math::Float4x4 rotation;
|
::Oyster::Math::Float4x4 rotation;
|
||||||
::Oyster::Math::Float4 centerPosition;
|
::Oyster::Math::Float3 centerPosition;
|
||||||
::Oyster::Math::Float radius;
|
::Oyster::Math::Float radius;
|
||||||
::Oyster::Math::Float mass;
|
::Oyster::Math::Float mass;
|
||||||
::Oyster::Math::Float restitutionCoeff;
|
::Oyster::Math::Float restitutionCoeff;
|
||||||
|
@ -52,12 +52,12 @@ namespace Oyster { namespace Physics
|
||||||
::Oyster::Math::Float staticFrictionCoeff = 1.0f,
|
::Oyster::Math::Float staticFrictionCoeff = 1.0f,
|
||||||
::Oyster::Math::Float kineticFrictionCoeff = 1.0f,
|
::Oyster::Math::Float kineticFrictionCoeff = 1.0f,
|
||||||
const ::Oyster::Physics3D::MomentOfInertia &inertiaTensor = ::Oyster::Physics3D::MomentOfInertia(),
|
const ::Oyster::Physics3D::MomentOfInertia &inertiaTensor = ::Oyster::Physics3D::MomentOfInertia(),
|
||||||
const ::Oyster::Math::Float4 &reach = ::Oyster::Math::Float4::null,
|
const ::Oyster::Math::Float3 &reach = ::Oyster::Math::Float3::null,
|
||||||
const ::Oyster::Math::Float4 ¢erPos = ::Oyster::Math::Float4::standard_unit_w,
|
const ::Oyster::Math::Float3 ¢erPos = ::Oyster::Math::Float3::null,
|
||||||
const ::Oyster::Math::Float4 &rotation = ::Oyster::Math::Float4::null,
|
const ::Oyster::Math::Float3 &rotation = ::Oyster::Math::Float3::null,
|
||||||
const ::Oyster::Math::Float4 &linearMomentum = ::Oyster::Math::Float4::null,
|
const ::Oyster::Math::Float3 &linearMomentum = ::Oyster::Math::Float3::null,
|
||||||
const ::Oyster::Math::Float4 &angularMomentum = ::Oyster::Math::Float4::null,
|
const ::Oyster::Math::Float3 &angularMomentum = ::Oyster::Math::Float3::null,
|
||||||
const ::Oyster::Math::Float4 &gravityNormal = ::Oyster::Math::Float4::null);
|
const ::Oyster::Math::Float3 &gravityNormal = ::Oyster::Math::Float3::null);
|
||||||
|
|
||||||
CustomBodyState & operator = ( const CustomBodyState &state );
|
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_Static() const;
|
||||||
const ::Oyster::Math::Float GetFrictionCoeff_Kinetic() const;
|
const ::Oyster::Math::Float GetFrictionCoeff_Kinetic() const;
|
||||||
const ::Oyster::Physics3D::MomentOfInertia & GetMomentOfInertia() const;
|
const ::Oyster::Physics3D::MomentOfInertia & GetMomentOfInertia() const;
|
||||||
const ::Oyster::Math::Float4 & GetReach() const;
|
const ::Oyster::Math::Float3 & GetReach() const;
|
||||||
::Oyster::Math::Float4 GetSize() const;
|
::Oyster::Math::Float3 GetSize() const;
|
||||||
const ::Oyster::Math::Float4 & GetCenterPosition() const;
|
const ::Oyster::Math::Float3 & GetCenterPosition() const;
|
||||||
const ::Oyster::Math::Float4 & GetAngularAxis() const;
|
const ::Oyster::Math::Float3 & GetAngularAxis() const;
|
||||||
::Oyster::Math::Float4x4 GetRotation() const;
|
::Oyster::Math::Float4x4 GetRotation() const;
|
||||||
::Oyster::Math::Float4x4 GetOrientation() 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::Float4x4 GetView( const ::Oyster::Math::Float4 &offset ) const;
|
::Oyster::Math::Float4x4 GetView( const ::Oyster::Math::Float3 &offset ) const;
|
||||||
const ::Oyster::Math::Float4 & GetLinearMomentum() const;
|
const ::Oyster::Math::Float3 & GetLinearMomentum() const;
|
||||||
::Oyster::Math::Float4 GetLinearMomentum( const ::Oyster::Math::Float4 &at ) const;
|
::Oyster::Math::Float3 GetLinearMomentum( const ::Oyster::Math::Float3 &at ) const;
|
||||||
const ::Oyster::Math::Float4 & GetAngularMomentum() const;
|
const ::Oyster::Math::Float3 & GetAngularMomentum() const;
|
||||||
const ::Oyster::Math::Float4 & GetLinearImpulse() const;
|
const ::Oyster::Math::Float3 & GetLinearImpulse() const;
|
||||||
const ::Oyster::Math::Float4 & GetAngularImpulse() const;
|
const ::Oyster::Math::Float3 & GetAngularImpulse() const;
|
||||||
const ::Oyster::Math::Float4 & GetForward_DeltaPos() const;
|
const ::Oyster::Math::Float3 & GetForward_DeltaPos() const;
|
||||||
const ::Oyster::Math::Float4 & GetForward_DeltaAxis() const;
|
const ::Oyster::Math::Float3 & GetForward_DeltaAxis() const;
|
||||||
const ::Oyster::Math::Float4 & GetGravityNormal() const;
|
const ::Oyster::Math::Float3 & GetGravityNormal() const;
|
||||||
|
|
||||||
void SetMass_KeepMomentum( ::Oyster::Math::Float m );
|
void SetMass_KeepMomentum( ::Oyster::Math::Float m );
|
||||||
void SetMass_KeepVelocity( ::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 SetFrictionCoeff( ::Oyster::Math::Float staticU, ::Oyster::Math::Float kineticU );
|
||||||
void SetMomentOfInertia_KeepMomentum( const ::Oyster::Physics3D::MomentOfInertia &tensor );
|
void SetMomentOfInertia_KeepMomentum( const ::Oyster::Physics3D::MomentOfInertia &tensor );
|
||||||
void SetMomentOfInertia_KeepVelocity( const ::Oyster::Physics3D::MomentOfInertia &tensor );
|
void SetMomentOfInertia_KeepVelocity( const ::Oyster::Physics3D::MomentOfInertia &tensor );
|
||||||
void SetSize( const ::Oyster::Math::Float4 &size );
|
void SetSize( const ::Oyster::Math::Float3 &size );
|
||||||
void SetReach( const ::Oyster::Math::Float4 &halfSize );
|
void SetReach( const ::Oyster::Math::Float3 &halfSize );
|
||||||
void SetCenterPosition( const ::Oyster::Math::Float4 ¢erPos );
|
void SetCenterPosition( const ::Oyster::Math::Float3 ¢erPos );
|
||||||
void SetRotation( const ::Oyster::Math::Float4 &angularAxis );
|
void SetRotation( const ::Oyster::Math::Float3 &angularAxis );
|
||||||
//void SetRotation( const ::Oyster::Math::Float4x4 &rotation );
|
//void SetRotation( const ::Oyster::Math::Float4x4 &rotation );
|
||||||
//void SetOrientation( const ::Oyster::Math::Float4x4 &orientation );
|
//void SetOrientation( const ::Oyster::Math::Float4x4 &orientation );
|
||||||
void SetOrientation( const ::Oyster::Math::Float3 &angularAxis, const ::Oyster::Math::Float3 &translation );
|
void SetOrientation( const ::Oyster::Math::Float3 &angularAxis, const ::Oyster::Math::Float3 &translation );
|
||||||
void SetLinearMomentum( const ::Oyster::Math::Float4 &g );
|
void SetLinearMomentum( const ::Oyster::Math::Float3 &g );
|
||||||
void SetAngularMomentum( const ::Oyster::Math::Float4 &h );
|
void SetAngularMomentum( const ::Oyster::Math::Float3 &h );
|
||||||
void SetLinearImpulse( const ::Oyster::Math::Float4 &j );
|
void SetLinearImpulse( const ::Oyster::Math::Float3 &j );
|
||||||
void SetAngularImpulse( const ::Oyster::Math::Float4 &j );
|
void SetAngularImpulse( const ::Oyster::Math::Float3 &j );
|
||||||
void SetGravityNormal( const ::Oyster::Math::Float4 &gravityNormal );
|
void SetGravityNormal( const ::Oyster::Math::Float3 &gravityNormal );
|
||||||
|
|
||||||
void AddRotation( const ::Oyster::Math::Float4 &angularAxis );
|
void AddRotation( const ::Oyster::Math::Float3 &angularAxis );
|
||||||
void AddTranslation( const ::Oyster::Math::Float4 &deltaPos );
|
void AddTranslation( const ::Oyster::Math::Float3 &deltaPos );
|
||||||
|
|
||||||
void ApplyLinearImpulse( const ::Oyster::Math::Float4 &j );
|
void ApplyLinearImpulse( const ::Oyster::Math::Float3 &j );
|
||||||
void ApplyAngularImpulse( const ::Oyster::Math::Float4 &j );
|
void ApplyAngularImpulse( const ::Oyster::Math::Float3 &j );
|
||||||
void ApplyImpulse( const ::Oyster::Math::Float4 &j, const ::Oyster::Math::Float4 &at, const ::Oyster::Math::Float4 &normal );
|
void ApplyImpulse( const ::Oyster::Math::Float3 &j, const ::Oyster::Math::Float3 &at, const ::Oyster::Math::Float3 &normal );
|
||||||
void ApplyForwarding( const ::Oyster::Math::Float4 &deltaPos, const ::Oyster::Math::Float4 &deltaAxis );
|
void ApplyForwarding( const ::Oyster::Math::Float3 &deltaPos, const ::Oyster::Math::Float3 &deltaAxis );
|
||||||
|
|
||||||
bool IsSpatiallyAltered() const;
|
bool IsSpatiallyAltered() const;
|
||||||
bool IsDisturbed() const;
|
bool IsDisturbed() const;
|
||||||
|
@ -118,11 +118,11 @@ namespace Oyster { namespace Physics
|
||||||
private:
|
private:
|
||||||
::Oyster::Math::Float mass, restitutionCoeff, staticFrictionCoeff, kineticFrictionCoeff;
|
::Oyster::Math::Float mass, restitutionCoeff, staticFrictionCoeff, kineticFrictionCoeff;
|
||||||
::Oyster::Physics3D::MomentOfInertia inertiaTensor;
|
::Oyster::Physics3D::MomentOfInertia inertiaTensor;
|
||||||
::Oyster::Math::Float4 reach, centerPos, angularAxis;
|
::Oyster::Math::Float3 reach, centerPos, angularAxis;
|
||||||
::Oyster::Math::Float4 linearMomentum, angularMomentum;
|
::Oyster::Math::Float3 linearMomentum, angularMomentum;
|
||||||
::Oyster::Math::Float4 linearImpulse, angularImpulse;
|
::Oyster::Math::Float3 linearImpulse, angularImpulse;
|
||||||
::Oyster::Math::Float4 deltaPos, deltaAxis; // Forwarding data sum
|
::Oyster::Math::Float3 deltaPos, deltaAxis; // Forwarding data sum
|
||||||
::Oyster::Math::Float4 gravityNormal;
|
::Oyster::Math::Float3 gravityNormal;
|
||||||
|
|
||||||
bool isSpatiallyAltered, isDisturbed, isForwarded;
|
bool isSpatiallyAltered, isDisturbed, isForwarded;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue