void Bench_SetViewOrigin( Vector& vieworigin, float frametime ) { float dt; float frac; float offset_amt = BENCH_BALL_VIEWDRIFT; float drift; Vector ang, right; Vector move; if ( !Bench_InStage( SECOND_STAGE ) ) return; dt = gHUD.m_flTime - g_flStartTime; if ( dt < 0 ) return; frac = dt / BENCH_VIEW_CYCLE_TIME; frac *= 2 * M_PI; drift = sin( frac ) * offset_amt; ang = vec3_origin; AngleVectors( ang, NULL, &right, NULL ); // offset along right axis move = right * drift; vieworigin = vieworigin + move; }
void Bench_CheckEntity( int type, struct cl_entity_s *ent, const char *modelname ) { if ( Bench_InStage( THIRD_STAGE ) && !stricmp( modelname, "*3" ) ) { model_t *pmod; vec3_t v; pmod = (model_t *)( ent->model ); VectorAdd( pmod->mins, pmod->maxs, v ); VectorScale( v, 0.5, v ); VectorAdd( v, ent->origin, g_aimorg ); } if ( Bench_InStage( THIRD_STAGE ) && strstr( modelname, "ppdemodot" ) ) { Bench_SetDotAdded( 1 ); VectorCopy( ent->origin, g_dotorg ); // Adjust end position if ( Bench_Active() && Bench_InStage( THIRD_STAGE ) ) { static float fZAdjust = 0.0; static float fLastTime; float dt; float fRate = Bench_GetPowerPlay() ? 4.0 : 8.0; float fBounds = Bench_GetPowerPlay() ? 8.0 : 15.0; dt = gHUD.m_flTime - fLastTime; if ( dt > 0.0 && dt < 1.0 ) { fZAdjust += gEngfuncs.pfnRandomFloat( -fRate, fRate ); fZAdjust = min( fBounds, fZAdjust ); fZAdjust = max( -fBounds, fZAdjust ); ent->origin[2] += fZAdjust; g_fZAdjust = fZAdjust; } fLastTime = gHUD.m_flTime; } } }
void Bench_AddObjects( void ) { if ( Bench_GetDotAdded() ) { Bench_SpotPosition( g_dotorg, g_aimorg ); Bench_SetDotAdded( 0 ); } if ( Bench_InStage( SECOND_STAGE ) ) { HUD_CreateBenchObjects( v_origin ); } }
void Bench_CheckEntity( int type, cl_entity_t *ent, const char *modelname ) { if ( Bench_InStage( THIRD_STAGE ) && !stricmp( modelname, "*3" ) ) { model_t *pmod = ent->model; const Vector v = ( pmod->mins + pmod->maxs ) * 0.5; g_aimorg = v + ent->origin; } if ( Bench_InStage( THIRD_STAGE ) && strstr( modelname, "ppdemodot" ) ) { Bench_SetDotAdded( 1 ); g_dotorg = ent->origin; // Adjust end position if ( Bench_Active() && Bench_InStage( THIRD_STAGE ) ) { static float fZAdjust = 0.0; static float fLastTime; float dt; float fRate = Bench_GetPowerPlay() ? 4.0 : 8.0; float fBounds = Bench_GetPowerPlay() ? 8.0 : 15.0; dt = gHUD.m_flTime - fLastTime; if ( dt > 0.0 && dt < 1.0 ) { fZAdjust += gEngfuncs.pfnRandomFloat( -fRate, fRate ); fZAdjust = min( fBounds, fZAdjust ); fZAdjust = max( -fBounds, fZAdjust ); ent->origin[2] += fZAdjust; g_fZAdjust = fZAdjust; } fLastTime = gHUD.m_flTime; } } }
void Bench_SetViewAngles( int recalc_wander, Vector& viewangles, float frametime, usercmd_t *cmd ) { if ( !Bench_Active() ) return; // Clear stochastic offset between runs if ( Bench_InStage( FIRST_STAGE ) ) { v_stochastic = vec3_origin; } if ( Bench_InStage( SECOND_STAGE ) || Bench_InStage( THIRD_STAGE ) ) { Vector lookdir = g_aimorg - v_origin; lookdir = lookdir.Normalize(); VectorAngles( lookdir, viewangles ); viewangles[0] = -viewangles[0]; /* if ( recalc_wander ) { float fmag = 2.0; if ( Bench_GetPowerPlay() ) { fmag = 10.0; } for ( i = 0; i < 2; i++ ) { v_stochastic[ i ] += frametime * gEngfuncs.pfnRandomFloat( -fmag, fmag ); v_stochastic[ i ] = max( -15.0, v_stochastic[ i ] ); v_stochastic[ i ] = min( 15.0, v_stochastic[ i ] ); } v_stochastic[ 2 ] = 0.0; } */ viewangles = viewangles + v_stochastic; NormalizeAngles( viewangles ); } else { viewangles = vec3_origin; if ( Bench_InStage( FIRST_STAGE ) ) { viewangles[ 1 ] = -90; } } if ( cmd ) { if ( Bench_InStage( THIRD_STAGE ) ) { cmd->buttons = IN_ATTACK; } else { cmd->buttons = 0; } } }
bool CHudBenchmark::Draw( float flTime ) { char sz[ 256 ]; int x, y; if ( m_fDrawTime < flTime || !Bench_Active() ) { m_iFlags &= ~HUD_ACTIVE; return true; } x = 10; y = 25; //480 - 150; sprintf( sz, "%s: %s", g_title , pp_strings[ Bench_GetPowerPlay() ? 0 : 1]); gHUD.DrawHudString( x, y, 320, sz, 251, 237, 7);// , 200, 200); //255, 255, 255 ); y += 20; // sprintf( sz, pp_strings[ Bench_GetPowerPlay() ? 0 : 1 ] ); // gHUD.DrawHudString( x, y, 320, sz, 31, 200, 200 ); // y += 20; if ( Bench_InStage( FIRST_STAGE) /*|| Bench_InStage( SECOND_STAGE ) || Bench_InStage( THIRD_STAGE )*/ || Bench_InStage( FOURTH_STAGE ) ) { if ( m_fReceiveTime && m_nSentFinish ) { sprintf( sz, g_stage1[1], Bench_ScoreForValue( FIRST_STAGE, m_StoredLatency )); } else { strcpy( sz, g_stage1[0] ); } gHUD.DrawHudString( x, y, 320, sz, 255, 255, 255 ); y += 20; } if ( Bench_InStage( SECOND_STAGE )/* || Bench_InStage( THIRD_STAGE )*/ || Bench_InStage( FOURTH_STAGE ) ) { float avg = 0.0; if ( m_nFPSCount > 0 ) { avg = m_fAverageFT / (float)m_nFPSCount; m_fAvgFrameRate = 1.0 / avg; } if ( m_nSentFinish /* Bench_InStage( THIRD_STAGE ) */|| Bench_InStage( FOURTH_STAGE ) ) { sprintf( sz, g_stage2[1], Bench_ScoreForValue( SECOND_STAGE, m_fAvgFrameRate ) ); } else { strcpy( sz, g_stage2[0] ); } gHUD.DrawHudString( x, y, 320, sz, 255, 255, 255 ); y += 20; } if ( Bench_InStage( THIRD_STAGE ) || Bench_InStage( FOURTH_STAGE ) ) { if ( m_nSentFinish || Bench_InStage( FOURTH_STAGE ) ) { sprintf( sz, g_stage3[1], Bench_ScoreForValue( THIRD_STAGE, m_fAvgScore ) ); } else { strcpy( sz, g_stage3[0] ); } gHUD.DrawHudString( x, y, 320, sz, 255, 255, 255 ); y += 20; } if ( Bench_InStage( FOURTH_STAGE ) ) { sprintf( sz, g_stage4, m_nCompositeScore ); gHUD.DrawHudString( x, y, 320, sz, 31, 200, 200 ); } m_fDrawTime = gHUD.m_flTime + BENCH_TIME; return true; }
void CHudBenchmark::Think( void ) { if ( !Bench_Active() ) return; Trace_Think(); if ( started ) { started = 0; // Clear variable m_fReceiveTime = 0.0; m_nFPSCount = 0; m_fAverageFT = 0.0; m_nSentFinish = 0; m_StoredLatency = 0.0; m_StoredPacketLoss = 0.0; m_nStoredHopCount = 0; m_nTraceDone = 0; m_nObjects = 0; m_nScoreComputed = 0; m_nCompositeScore = 0; m_fAvgScore = 0; m_fDrawScore = 0.0; m_fAvgFrameRate = 0.0; } if ( gHUD.m_flTime > g_benchSwitchTime ) { Bench_SetStage( Bench_GetStage() + 1 ); StartNextSection( Bench_GetStage() ); } if ( Bench_InStage( FIRST_STAGE ) ) { // Assume 1000 ms lag is the max and that would take all but 2 seconds of this interval to traverse if ( m_fReceiveTime ) { float latency = 2.0 * m_StoredLatency; float switch_time; float total_time; latency = max( 0.0f, latency ); latency = min( 1.0f, latency ); total_time = Bench_GetSwitchTime(); total_time -= 2.0; switch_time = m_fStageStarted + latency * total_time; switch_time += 1.0; if ( gHUD.m_flTime >= switch_time ) { if ( !m_nSentFinish ) { g_benchSwitchTime = gHUD.m_flTime + 1.0 + SCORE_TIME_UP; ServerCmd( "ppdemo 1 finish\n" ); m_nSentFinish = 1; } } else { g_benchSwitchTime = gHUD.m_flTime + 10.0; } } } if ( Bench_InStage( SECOND_STAGE ) ) { // frametime static float lasttime; float elapsed; float total; float frac; float switch_time; // added by minman if ( lasttime ) { float dt; dt = gHUD.m_flTime - lasttime; if ( dt > 0 ) { CountFrame( dt ); } } lasttime = gHUD.m_flTime; elapsed = gHUD.m_flTime - m_fStageStarted; total = Bench_GetSwitchTime(); if ( total ) { frac = elapsed / total; // Only takes 1/2 time to get up to maximum speed frac *= 2.0; frac = max( 0.0f, frac ); frac = min( 1.0f, frac ); m_nObjects = (int)(NUM_BENCH_OBJ * frac); } switch_time = m_fStageStarted + total; /* BELOW ADDED BY minman */ if (gHUD.m_flTime >= switch_time) { if ( !m_nSentFinish) { g_benchSwitchTime = gHUD.m_flTime + SCORE_TIME_UP; m_nSentFinish = 1; } } else g_benchSwitchTime = gHUD.m_flTime + 10.0; } /* BELOW ADDED BY minman */ if ( Bench_InStage (THIRD_STAGE)) { float switch_time = m_fStageStarted + Bench_GetSwitchTime(); if (gHUD.m_flTime >= switch_time) { if ( !m_nSentFinish) { g_benchSwitchTime = gHUD.m_flTime + SCORE_TIME_UP; m_nSentFinish = 1; } } else g_benchSwitchTime = gHUD.m_flTime + 10.0; } if ( Bench_InStage( FOURTH_STAGE ) ) { if ( !m_nScoreComputed ) { m_nScoreComputed = 1; gHUD.m_Benchmark.SetCompositeScore(); } } if ( Bench_GetStage() > LAST_STAGE ) { m_iFlags &= ~HUD_ACTIVE; EngineClientCmd( "quit\n" ); } }
void Bench_SetViewAngles( int recalc_wander, float *viewangles, float frametime, struct usercmd_s *cmd ) { if ( !Bench_Active() ) return; int i; vec3_t lookdir; // Clear stochastic offset between runs if ( Bench_InStage( FIRST_STAGE ) ) { VectorCopy( vec3_origin, v_stochastic ); } if ( Bench_InStage( SECOND_STAGE ) || Bench_InStage( THIRD_STAGE ) ) { VectorSubtract( g_aimorg, v_origin, lookdir ); VectorNormalize( lookdir ); VectorAngles( (float *)&lookdir, viewangles ); viewangles[0] = -viewangles[0]; /* if ( recalc_wander ) { float fmag = 2.0; if ( Bench_GetPowerPlay() ) { fmag = 10.0; } for ( i = 0; i < 2; i++ ) { v_stochastic[ i ] += frametime * gEngfuncs.pfnRandomFloat( -fmag, fmag ); v_stochastic[ i ] = max( -15.0, v_stochastic[ i ] ); v_stochastic[ i ] = min( 15.0, v_stochastic[ i ] ); } v_stochastic[ 2 ] = 0.0; } */ VectorAdd( viewangles, v_stochastic, viewangles ); for ( i = 0; i < 3; i++ ) { if ( viewangles[ i ] > 180 ) viewangles[ i ] -= 360; if ( viewangles[ i ] < -180 ) viewangles[ i ] += 360; } } else { VectorCopy( vec3_origin, viewangles ) if ( Bench_InStage( FIRST_STAGE ) ) { viewangles[ 1 ] = -90; } } if ( cmd ) { if ( Bench_InStage( THIRD_STAGE ) ) { cmd->buttons = IN_ATTACK; } else { cmd->buttons = 0; } } }