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); }
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 ); }
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; }