コード例 #1
0
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 );
}
コード例 #2
0
ファイル: RigidBody2d.cpp プロジェクト: JacopoV/MoonCraft
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);
}
コード例 #3
0
ファイル: Rigidbody.cpp プロジェクト: Mannilie/GameEngine_EV
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);
}
コード例 #4
0
ファイル: RigidBody.cpp プロジェクト: zwagoth/PhysX.net
void RigidBody::AddTorque(Vector3 force)
{
    AddTorque(force, ForceMode::Force, true);
}
コード例 #5
0
ファイル: Rigidbody.cpp プロジェクト: Mannilie/GameEngine_EV
void Rigidbody::AddForceAtPosition(vec3 _force, vec3 _position) {
	vec3 torque = glm::cross(_position - transform->position, _force);
	totalForce += _force;
	AddTorque(torque);
}