Ejemplo n.º 1
0
//-----------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------
void CPlayerCar::ResetIfNeeded( void )
{
	if( m_bShouldReset )
	{
		m_bShouldReset = false;
		Reset();
		return;
	}

	//TODO: we shouldnt ask the renderer for this, but a logical representation of the world
	//bool bWaterEnabled = true;
	if( IsUnderWater() )
	{
		float timeUnderWater = gpGlobals->curtime - m_timeEnteredWater;
		if( m_bWasUnderWater && timeUnderWater > 2.0f )
			Reset();

		if( !m_bWasUnderWater )
		{
			m_timeEnteredWater = gpGlobals->curtime;
			m_bWasUnderWater = true;
		}		
	}
	else
		m_bWasUnderWater = false;
}
Ejemplo n.º 2
0
	void WaterManager::RenderUnderGodRay()
	{
		if (IsUnderWater())
		{
			Vec3 Position = Vec3::Zero;

			if (mWater)
				Position = Vec3(0, mWater->GetHeight(), 0);
			else if (mOcean)
				Position = mOcean->GetPosition();

			mGodRay->Render(Position);
		}
	}
Ejemplo n.º 3
0
//-----------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------
void CPlayerCar::Update( void )
{
	m_bJustResetted = false;


	//First check if we have to reset the car position
	ResetIfNeeded();

	//Calculate the new motor rpm
	float rpm = CalculateMotorRpm();
	if(rpm >= 0.0f)
	{
		if( rpm >= m_info.motorShiftUpRpm && m_engineGear < m_info.numberOfGears )
			m_engineGear++; //shift up
		else if( rpm < (USHORT)m_info.motorShiftDownRpm && m_engineGear > 1 )
			m_engineGear--; //shift down
	}
	else
	{
		m_engineGear = 1;
	}

	m_engineRpm = (USHORT)abs(CalculateMotorRpm());
	m_engineRpm = (USHORT)clamp<int>(m_engineRpm, (int)m_info.motorMinRpm, (int)m_info.motorMaxRpm);

	float fPossibleWheelForce = CalculateMotorForceAtWheels( m_engineRpm );

	//First calculate proper forward vector by multiplying the rotation matrix
	//with the untransformed forward-vector.
	Angle3d aCarDir = GetAngle();
	Matrix3 mCarRotMat;
	GetAngleMatrix3x3( aCarDir, mCarRotMat );
	Vector3f vForward = mCarRotMat * Vector3f(0,0,1);

	//update steering and gas
	if( m_pPhysVehicle )
	{
		m_pPhysVehicle->UpdateSteering(m_fInputSteer);

		float fVehSpeed = VectorDot( GetVelocity(), vForward );
		if( fVehSpeed > 2.0f && VectorDot( vForward, GetVelocity() ) < 0.0f )
			fVehSpeed = -fVehSpeed;

		bool bMovingBackward = fVehSpeed < -2.0f;
		bool bStandingStill = abs(fVehSpeed) <= 2.0f;

		float fGas = 0.0f;
		float fBreak = 0.0f;

		if( bStandingStill )
			fGas = m_fInputAccelerate;
		else if( bMovingBackward )
		{
			if( m_fInputAccelerate > 0.0f )
				fBreak = m_fInputAccelerate;
			else
				fGas = m_fInputAccelerate;
		}
		else
		{
			if( m_fInputAccelerate > 0.0f )
				fGas = m_fInputAccelerate;
			else
				fBreak = -m_fInputAccelerate;
		}

		//Disable gas if under water
		if(IsUnderWater())
			fGas = 0.0f;

		m_pPhysVehicle->UpdateGasBreak( fGas * fPossibleWheelForce, fBreak, m_fInputHandbrake );

		//singletons::g_pEvtMgr->AddEventToQueue( 
		//	new CCarMotorUpdateEvent( ev::CAR_MOTOR_UPDATE, this->GetIndex(), m_engineRpm, abs(fGas), m_engineGear ), RECIEVER_ID_ALL );
	}

	BaseClass::Update();
}
Ejemplo n.º 4
0
	void WaterManager::RenderUnderNoise(Texture * colorTex)
	{
		if (IsUnderWater())
			mNoise->Render(colorTex);
	}
Ejemplo n.º 5
0
	void WaterManager::RenderUnderFog(Texture * depthTex, Texture * colorTex)
	{
		if (IsUnderWater())
			mFog->Render(depthTex, colorTex);
	}
Ejemplo n.º 6
0
	void WaterManager::RenderUnderBubble()
	{
		if (IsUnderWater())
			mBubble->Render();
	}
Ejemplo n.º 7
0
	void WaterManager::RenderUnderCaustics(Texture * depthTex, Texture * colorTex)
	{
		if (IsUnderWater())
			mCaustics->Render(colorTex, depthTex);
	}