Difference: 274 NANOSECONDS (that's 0.000 000 274s) per iteration.
Code:
#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <rose>
public plugin_init()
{
register_plugin("Dumb", "1.0", "[ --{-@ ]");
register_clcmd("dumb", "dumb_handler");
}
public dumb_handler(id)
{
new hTimerFakemeta = TimerStart();
for ( new i = 0 ; i < 1000000 ; i++ )
fakemeta_dumb(id);
TimerStop(hTimerFakemeta);
new hTimerEngine = TimerStart();
for ( new i = 0 ; i < 1000000 ; i++ )
engine_dumb(id);
TimerStop(hTimerEngine);
TimerServerPrint(hTimerFakemeta, _, _, "Fakemeta: %t");
TimerServerPrint(hTimerEngine, _, _, "Engine: %t");
}
fakemeta_dumb(client)
{
new Float:client_origin[3], Float:client_angle[3];
pev(client, pev_origin, client_origin);
pev(client, pev_v_angle, client_angle);
new Float:futur_origin[3];
velocity_by_aim(client, 16, futur_origin);
calcVec(futur_origin, =, futur_origin, +, client_origin);
new trace_handle = create_tr2();
engfunc(EngFunc_TraceLine, client_origin, futur_origin, DONT_IGNORE_MONSTERS, client, trace_handle);
get_tr2(trace_handle, TR_vecEndPos, futur_origin);
if(get_distance_f(client_origin, futur_origin) <= 17.0)
{
engfunc(EngFunc_MakeVectors, client_angle);
new Float:forward_vector[3];
global_get(glb_v_forward, forward_vector);
set_pev(client, pev_velocity, client_angle);
}
}
engine_dumb(client)
{
new Float:client_origin[3], Float:client_angle[3];
entity_get_vector(client, EV_VEC_origin, client_origin);
entity_get_vector(client, EV_VEC_v_angle, client_angle);
new Float:futur_origin[3];
velocity_by_aim(client, 16, futur_origin);
calcVec(futur_origin, =, futur_origin, +, client_origin);
trace_line(client, client_origin, futur_origin, futur_origin);
if(get_distance_f(client_origin, futur_origin) <= 17.0)
{
engfunc(EngFunc_MakeVectors, client_angle); // No replacement
new Float:forward_vector[3];
get_global_vector(GL_v_forward, forward_vector);
entity_set_vector(client, EV_VEC_velocity, client_angle);
}
}