void astPlayerShip::Update( float timeStep ) { vsInput *input = core::GetGame()->GetInput(); //vsVector2D lStick = input->GetLeftStick(); float steering = input->GetLeftStick().x; AddTorque( m_object->GetAngularVelocity() * -6.0f * m_object->GetMomentOfInertia()); // angular damping AddTorque( DEGREES(1080.0f) * steering * m_object->GetMomentOfInertia() ); // rotation from attitude jets AddForce( m_object->GetVelocity() * -0.3f * m_object->GetMass() ); // damping //if ( lStick.y > 0.f ) if ( input->IsDown(CID_B) ) { float acceleration = 30.0f; AddForce( m_transform.GetAngle().GetForwardVector() * acceleration /* lStick.y*/ * m_object->GetMass() ); // thrust m_emitter->SetSpawnRate( 30.0f ); } else { m_emitter->SetSpawnRate(0.0f); } HandleSpawnTimer(timeStep); bool shooting = (!m_spawnInvulnerable && input->WasPressed(CID_A)); if ( shooting ) { for ( int i = 0; i < c_maxShots; i++ ) { if ( !m_shotList[i]->IsSpawned() ) { vsVector2D forwardVec = m_transform.GetAngle().GetForwardVector(); vsVector2D muzzlePos = GetPosition() + (forwardVec * 1.8f); vsVector2D shotVelocity = GetVelocity() + (forwardVec * 40.0f); m_shotList[i]->Spawn( muzzlePos, shotVelocity ); break; } } } HandleThrusters(timeStep); Parent::Update( timeStep ); vsVector2D forwardVec = m_transform.GetAngle().GetForwardVector(); m_emitter->SetSpawnPosition( GetPosition() - forwardVec * 3.0f, 1.0f ); m_emitter->SetSpawnColor( vsColor::Red ); if ( input->IsDown(CID_B) ) m_emitter->SetSpawnVelocity( forwardVec * -20.0f, 6.0f ); }
void RigidBody2D::AddForceAtPoint(const Vector2& i_force, const Vector2& i_pointInWorldCoordinate) { AddForce(i_force); const Vector2 cp = m_position - i_pointInWorldCoordinate; const Real torque = cp.X() * i_force.Y() - cp.Y() * i_force.X(); AddTorque(torque); }
void Rigidbody::PhysicsUpdate(float _timeStep) { if (gameObject->isStatic) { return; } CalculateMomentOfInertia(); AddForce( (useGravity ? CoreEngine::physics->gravity * mass : vec3(0))); vec3 frictionForce = -mass * dynamicFriction * velocity; AddForce(frictionForce); vec3 frictionTorque = (-momentOfInertia * dynamicFriction * angularVelocity); AddTorque(frictionTorque); vec3 acceleration = totalForce / mass; vec3 angularAcceleration = totalTorque / momentOfInertia; OldPosition = transform->position; //keep our old position for collision response velocity += acceleration * _timeStep; transform->position += velocity * _timeStep; totalForce = vec3(0); totalTorque = vec3(0); }
void RigidBody::AddTorque(Vector3 force) { AddTorque(force, ForceMode::Force, true); }
void Rigidbody::AddForceAtPosition(vec3 _force, vec3 _position) { vec3 torque = glm::cross(_position - transform->position, _force); totalForce += _force; AddTorque(torque); }