示例#1
0
double time_sort(uint64_t *arr, size_t len, int_sort_fn sort) {
    double start_time = float_time();
    sort(arr,len);
    double end_time = float_time();
    assert(is_sorted(arr, len));
    return (end_time - start_time);
}
示例#2
0
void CBPGameMovement::FlyMove( void )
{
	int			i;
	Vector		wishvel;
	//float		fmove, smove;
	Vector		wishdir;
	float		wishspeed;
	Vector forward, right, up;
	
	AngleVectors (mv->m_vecViewAngles, &forward, &right, &up);  // Determine movement angles

	// Zero out z components of movement vectors
	//float flSpeed = 50;

	/*wishvel = forward * flSpeed*/;
	wishvel.Init();

	//bool bOnGround = player->GetGroundEntity() != NULL;

#if 1

	// LEFT WING
	{
		// Launch up
		m_flLFlapAmount -= (bp_mv_flapdecay.GetFloat() * gpGlobals->frametime);
		m_flLFlapAmount = max( 0, max ( m_flLFlapAmount, ( (mv->m_nButtons & IN_JUMP) ? 1 : m_flLTriggerDiff ) ) );

		// Grav
		float flGravity = RemapValClamped( m_flLTriggerAvg, 0, 1, bp_mv_gravity.GetFloat(), bp_mv_gravity_soar.GetFloat() );
		//flGravity *= RemapValClamped( flGravity, 0, 100, 0.1, 1 );
		
		// Smooth out the gravity, use the average over the last 2 sec.
		m_flLInterpGravity.AddToTail( float_time( flGravity, gpGlobals->curtime ) );	
		float flGravityAvg = 0;
		for ( int i = 0; i < m_flLInterpGravity.Count(); i++ )
			flGravityAvg += m_flLInterpGravity[i].m_flValue;
		flGravityAvg /= m_flLInterpGravity.Count();
	
		int iCount = m_flLInterpGravity.Count();
		for ( int i = iCount-1; i >= 0; i-- )
		{
			if ( m_flLInterpGravity[i].m_flTime < gpGlobals->curtime-BIRD_GRAV_SAMPLETIME )
				m_flLInterpGravity.Remove(i);
		}
	
		// Combine the two
		m_flLUpForce = max( m_flLUpForce, m_flLFlapAmount * bp_mv_flapforce.GetFloat() );
		m_flLUpForce -= flGravityAvg;
	}
	
	// RIGHT WING
	{
		// Launch up
		m_flRFlapAmount -= (bp_mv_flapdecay.GetFloat() * gpGlobals->frametime);
		m_flRFlapAmount = max( 0, max ( m_flRFlapAmount, ( (mv->m_nButtons & IN_JUMP) ? 1 : m_flRTriggerDiff )  ) );

		// Grav
		float flGravity = RemapValClamped( m_flRTriggerAvg, 0, 1, bp_mv_gravity.GetFloat(), bp_mv_gravity_soar.GetFloat() );
		//flGravity *= RemapValClamped( flGravity, 0, 100, 0.1, 1 );
		
		// Smooth out the gravity, use the average over the last 2 sec.
		m_flRInterpGravity.AddToTail( float_time( flGravity, gpGlobals->curtime ) );	
		float flGravityAvg = 0;
		for ( int i = 0; i < m_flRInterpGravity.Count(); i++ )
			flGravityAvg += m_flRInterpGravity[i].m_flValue;
		flGravityAvg /= m_flRInterpGravity.Count();
	
		int iCount = m_flRInterpGravity.Count();
		for ( int i = iCount-1; i >= 0; i-- )
		{
			if ( m_flRInterpGravity[i].m_flTime < gpGlobals->curtime-BIRD_GRAV_SAMPLETIME )
				m_flRInterpGravity.Remove(i);
		}
	
		// Combine the two
		m_flRUpForce = max( m_flRUpForce, m_flRFlapAmount * bp_mv_flapforce.GetFloat() );
		m_flRUpForce -= flGravityAvg;
	}

	// Forward movement
	float flSoarAmt = ( m_flRTriggerAvg * 0.5 ) + ( m_flLTriggerAvg * 0.5 );
	flSoarAmt = Bias( flSoarAmt, 0.75 );

	m_flForwardForce -= RemapValClamped( flSoarAmt, 0, 1, bp_mv_flightdecay.GetFloat(), bp_mv_flightdecay_soar.GetFloat() ) * gpGlobals->frametime;
	m_flForwardForce = max( 0.25, max( m_flForwardForce, max( m_flLTriggerDiff, m_flRTriggerDiff ) ) );

	wishvel = forward * ( m_flForwardForce * bp_mv_flightspeed.GetFloat() ); 
	wishvel.z = (m_flRUpForce+m_flLUpForce)/2;

	// Calc turn rate from diff between wing avgs.
	/*GetBPPlayer()->m_flTurnRate = (
		RemapValClamped( m_flRUpForce, 0, bp_mv_flapforce.GetFloat(), 0, 1 ) - 
		RemapValClamped( m_flLUpForce, 0, bp_mv_flapforce.GetFloat(), 0, 1 )
		);
		
	GetBPPlayer()->m_flTurnRate *= abs(GetBPPlayer()->m_flTurnRate);*/

	GetBPPlayer()->m_flTurnRate = bpmv->m_flRTrigger - bpmv->m_flLTrigger;
	GetBPPlayer()->m_flTurnRate *= abs(GetBPPlayer()->m_flTurnRate);
	GetBPPlayer()->m_flTurnRate *= abs(GetBPPlayer()->m_flTurnRate);

	GetBPPlayer()->m_flTurnRate *= bp_mv_turnrate.GetFloat();

#else

	if ( mv->m_nButtons & IN_FORWARD )
		m_flLastForward = gpGlobals->curtime;

	float m_flTimeSinceFlap = gpGlobals->curtime - m_flLastForward;
	wishvel = forward * ( Bias( RemapValClamped( m_flTimeSinceFlap, 0, 5, 1, 0 ), 0.1 ) * bp_mv_flapforce.GetFloat() ); 

	//m_flLastATime

#endif

	VectorCopy (wishvel, wishdir);   // Determine maginitude of speed of move
	wishspeed = VectorNormalize(wishdir);

	//engine->Con_NPrintf( 2, "Flap Force:        %.2f %.2f", m_flLFlapAmount, m_flRFlapAmount );
	//engine->Con_NPrintf( 3, "Gravity:           %.2f %.2f", flGravity );
	//engine->Con_NPrintf( 4, "Vertical Force:    %.2f %.2f", m_flLUpForce, m_flRUpForce );
	//engine->Con_NPrintf( 5, "Forward Force:     %.2f", m_flForwardForce );

	//
	// clamp to server defined max speed
	//
	/*if ( wishspeed != 0 && (wishspeed > mv->m_flMaxSpeed))
	{
		VectorScale (wishvel, mv->m_flMaxSpeed/wishspeed, wishvel);
		wishspeed = mv->m_flMaxSpeed;
	}*/
	
	//engine->Con_NPrintf( 6, "Speed:    %.2f", wishspeed );

	//AirAccelerate( wishdir, wishspeed, sv_airaccelerate.GetFloat() );
	
	for (i=0 ; i<3 ; i++)
	{
		mv->m_vecVelocity[i] = wishspeed * wishdir[i];
		mv->m_outWishVel[i] = wishspeed * wishdir[i];
	}

	// Add in any base velocity to the current velocity.
	VectorAdd(mv->m_vecVelocity, player->GetBaseVelocity(), mv->m_vecVelocity );

	TryPlayerMove();

	// Now pull the base velocity back out.   Base velocity is set if you are on a moving object, like a conveyor (or maybe another monster?)
	VectorSubtract( mv->m_vecVelocity, player->GetBaseVelocity(), mv->m_vecVelocity );
}
示例#3
0
void CBPGameMovement::ProcessMovement( CBasePlayer *pPlayer, CMoveData *pMove )
{
	Assert( pMove && pPlayer );

	float flStoreFrametime = gpGlobals->frametime;

	//!!HACK HACK: Adrian - slow down all player movement by this factor.
	//!!Blame Yahn for this one.
	gpGlobals->frametime *= pPlayer->GetLaggedMovementValue();

	ResetGetPointContentsCache();

	Assert( player == pPlayer );
	player = pPlayer;

	mv = pMove;
	bpmv = (CBPMoveData*) pMove ;
	mv->m_flMaxSpeed = pPlayer->GetPlayerMaxSpeed();

	// Add trigger to history for interp stuff
	m_flInterpLTrigger.AddToTail( float_time( bpmv->m_flLTrigger, gpGlobals->curtime ) );
	m_flInterpRTrigger.AddToTail( float_time( bpmv->m_flRTrigger, gpGlobals->curtime ) );

	m_flLTriggerAvg = 0;
	for ( int i = 0; i < m_flInterpLTrigger.Count(); i++ )
		m_flLTriggerAvg += m_flInterpLTrigger[i].m_flValue;
	m_flLTriggerAvg /= m_flInterpLTrigger.Count();
	m_flLTriggerDiff = bpmv->m_flLTrigger - m_flLTriggerAvg;

	//DevMsg("Diff = %.2f - %.2f = %.2f\n",bpmv->m_flLTrigger,lDiff, m_flLTriggerDiff,m_flLTriggerDiff);
	
	m_flRTriggerAvg = 0;
	for ( int i = 0; i < m_flInterpRTrigger.Count(); i++ )
		m_flRTriggerAvg += m_flInterpRTrigger[i].m_flValue;
	m_flRTriggerAvg /= m_flInterpRTrigger.Count();
	m_flRTriggerDiff = bpmv->m_flRTrigger - m_flRTriggerAvg;


	int iCount = m_flInterpLTrigger.Count();
	for ( int i = iCount-1; i >= 0; i-- )
	{
		if ( m_flInterpLTrigger[i].m_flTime < gpGlobals->curtime-0.15 )
			m_flInterpLTrigger.Remove(i);
	}
	
	iCount = m_flInterpRTrigger.Count();
	for ( int i = iCount-1; i >= 0; i-- )
	{
		if ( m_flInterpRTrigger[i].m_flTime < gpGlobals->curtime-0.15 )
			m_flInterpRTrigger.Remove(i);
	}

	DiffPrint( "start %f %f %f", mv->GetAbsOrigin().x, mv->GetAbsOrigin().y, mv->GetAbsOrigin().z );

	// Run the command.
	PlayerMove();

	FinishMove();

	DiffPrint( "end %f %f %f", mv->GetAbsOrigin().x, mv->GetAbsOrigin().y, mv->GetAbsOrigin().z );

	//This is probably not needed, but just in case.
	gpGlobals->frametime = flStoreFrametime;
}