Commit to Dennis

This commit is contained in:
Robin Engman 2014-02-07 13:09:44 +01:00
parent b225c53611
commit 1633129a2c
3 changed files with 24 additions and 22 deletions

View File

@ -353,7 +353,7 @@ void GameState::readKeyInput(InputClass* KeyInput)
}
//send delta mouse movement
if (KeyInput->IsMousePressed())
//if (KeyInput->IsMousePressed())
{
camera->Yaw(-KeyInput->GetYaw());
camera->Pitch(KeyInput->GetPitch());

View File

@ -375,20 +375,21 @@ float API_Impl::GetFrameTimeLength() const
void API_Impl::Update()
{ /** @todo TODO: Update is a temporary solution .*/
::std::vector<ICustomBody*> updateList;
auto proto = this->worldScene.Sample( Universe(), updateList ).begin();
this->worldScene.Sample( Universe(), updateList );
ICustomBody::State state;
for( ; proto != updateList.end(); ++proto )
for( int i = 0; i < updateList.size(); i++ )
{
auto proto = updateList[i];
// Step 1: Apply Gravity
Float4 gravityImpulse = Float4::null;
(*proto)->GetState( state );
for( ::std::vector<Gravity>::size_type i = 0; i < this->gravity.size(); ++i )
proto->GetState( state );
for( int j = 0; j < this->gravity.size(); ++j )
{
switch( this->gravity[i].gravityType )
switch( this->gravity[j].gravityType )
{
case Gravity::GravityType_Well:
{
Float4 d = Float4( this->gravity[i].well.position, 1.0f ) - Float4( state.GetCenterPosition(), 1.0f );
Float4 d = Float4( this->gravity[j].well.position, 1.0f ) - Float4( state.GetCenterPosition(), 1.0f );
Float rSquared = d.Dot( d );
if( rSquared != 0.0 )
{
@ -402,7 +403,7 @@ void API_Impl::Update()
break;
}
case Gravity::GravityType_Directed:
gravityImpulse += Float4( this->gravity[i].directed.impulse, 0.0f );
gravityImpulse += Float4( this->gravity[j].directed.impulse, 0.0f );
break;
// case Gravity::GravityType_DirectedField:
// //this->gravity[i].directedField.
@ -419,20 +420,21 @@ void API_Impl::Update()
{
state.ApplyLinearImpulse( gravityImpulse.xyz );
state.SetGravityNormal( gravityImpulse.GetNormalized().xyz );
(*proto)->SetState( state );
proto->SetState( state );
}
if(state.GetMass() == 70)
{
const char *breakpoint = "STOP";
}
// Step 2: Apply Collision Response
this->worldScene.Visit( *proto, OnPossibleCollision );
this->worldScene.Visit( proto, OnPossibleCollision );
}
proto = updateList.begin();
for( ; proto != updateList.end(); ++proto )
for( int i = 0; i < updateList.size(); i++ )
{
(*proto)->GetState( state );
auto proto = updateList[i];
proto->GetState( state );
Float3 lM = state.GetLinearMomentum();
//LinearAlgebra3D::InterpolateAxisYToNormal_UsingNlerp(state.SetOrientation(, Float4(state.GetGravityNormal(), 0.0f), 1.0f);
@ -451,13 +453,13 @@ void API_Impl::Update()
state.linearMomentum.z = 0;
}
(*proto)->SetState( state );
proto->SetState( state );
switch( (*proto)->Update(this->updateFrameLength) )
switch( proto->Update(this->updateFrameLength) )
{
case UpdateState_altered:
this->worldScene.SetAsAltered( this->worldScene.GetTemporaryReferenceOf(*proto) );
(*proto)->CallSubscription_Move();
this->worldScene.SetAsAltered( this->worldScene.GetTemporaryReferenceOf(proto) );
proto->CallSubscription_Move();
case UpdateState_resting:
default:
break;

View File

@ -51,8 +51,8 @@ void RigidBody::Update_LeapFrog( Float updateFrameLength )
// updating the linear
//Decrease momentum with 1% as "fall-off"
//! HACK: @todo Add real solution with fluid drag
//this->momentum_Linear = this->momentum_Linear*0.99f;
//this->momentum_Angular = this->momentum_Angular*0.99f;
this->momentum_Linear = this->momentum_Linear*0.99f;
this->momentum_Angular = this->momentum_Angular*0.99f;
// ds = dt * Formula::LinearVelocity( m, avg_G ) = dt * avg_G / m = (dt / m) * avg_G
Float3 delta = AverageWithDelta( this->momentum_Linear, this->impulse_Linear );
@ -66,14 +66,14 @@ void RigidBody::Update_LeapFrog( Float updateFrameLength )
// updating the angular
// dO = dt * Formula::AngularVelocity( (RI)^-1, avg_H ) = dt * (RI)^-1 * avg_H
//this->axis += updateFrameLength * this->momentOfInertiaTensor.CalculateAngularVelocity( this->rotation, AverageWithDelta(this->momentum_Angular, this->impulse_Angular) );
//this->rotation = Rotation( this->axis );
this->axis += updateFrameLength * this->momentOfInertiaTensor.CalculateAngularVelocity( this->rotation, AverageWithDelta(this->momentum_Angular, this->impulse_Angular) );
this->rotation = Rotation( this->axis );
// update momentums and clear impulse_Linear and impulse_Angular
this->momentum_Linear += this->impulse_Linear;
this->impulse_Linear = Float4::null;
//this->momentum_Angular += this->impulse_Angular; //! HACK: @todo Rotation temporary disabled
this->momentum_Angular += this->impulse_Angular; //! HACK: @todo Rotation temporary disabled
this->impulse_Angular = Float4::null;
}