/* ================= EV_GetGunPosition Figure out the height of the gun ================= */ void EV_GetGunPosition( event_args_t *args, Vector& pos, const Vector& origin ) { int idx; Vector view_ofs; idx = args->entindex; view_ofs = 0; view_ofs[2] = DEFAULT_VIEWHEIGHT; if ( EV_IsPlayer( idx ) ) { // in spec mode use entity viewheigh, not own if ( EV_IsLocal( idx ) && !IS_FIRSTPERSON_SPEC() ) { // Grab predicted result for local player gEngfuncs.pEventAPI->EV_LocalPlayerViewheight( view_ofs ); } else if ( args->ducking == 1 ) { view_ofs = VEC_DUCK_VIEW; } } pos = origin + view_ofs; }
/* ================= EV_GetGunPosition Figure out the height of the gun ================= */ void EV_GetGunPosition( event_args_t *args, float *pos, float *origin ) { int idx; vec3_t view_ofs; idx = args->entindex; VectorClear( view_ofs ); view_ofs[2] = DEFAULT_VIEWHEIGHT; if ( EV_IsPlayer( idx ) ) { // in spec mode use entity viewheigh, not own if ( EV_IsLocal( idx ) && !IS_FIRSTPERSON_SPEC ) { // Grab predicted result for local player gEngfuncs.pEventAPI->EV_LocalPlayerViewheight( view_ofs ); } else if ( args->ducking == 1 ) { view_ofs[2] = VEC_DUCK_VIEW; } } VectorAdd( origin, view_ofs, pos ); }
/* ================= EV_GetDefaultShellInfo Determine where to eject shells from ================= */ void EV_GetDefaultShellInfo( event_args_t *args, float *origin, float *velocity, float *ShellVelocity, float *ShellOrigin, float *forward, float *right, float *up, float forwardScale, float upScale, float rightScale ) { int i; vec3_t view_ofs; float fR, fU; int idx; idx = args->entindex; VectorClear( view_ofs ); view_ofs[2] = DEFAULT_VIEWHEIGHT; if ( EV_IsPlayer( idx ) ) { if ( EV_IsLocal( idx ) ) { gEngfuncs.pEventAPI->EV_LocalPlayerViewheight( view_ofs ); } else if ( args->ducking == 1 ) { view_ofs[2] = VEC_DUCK_VIEW; } } fR = gEngfuncs.pfnRandomFloat( 50, 70 ); fU = gEngfuncs.pfnRandomFloat( 100, 150 ); for ( i = 0; i < 3; i++ ) { ShellVelocity[i] = velocity[i] + right[i] * fR + up[i] * fU + forward[i] * 25; ShellOrigin[i] = origin[i] + view_ofs[i] + up[i] * upScale + forward[i] * forwardScale + right[i] * rightScale; } }
//================= // EV_GetGunPosition //================= void EV_GetGunPosition( event_args_t *args, float *pos, float *origin ) { int idx; Vector view_ofs; idx = args->entindex; view_ofs = Vector( 0, 0, 0 ); view_ofs.z = DEFAULT_VIEWHEIGHT; if ( EV_IsPlayer( idx )) { // in spec mode use entity viewheigh, not own if ( EV_IsLocal( idx )) { // Grab predicted result for local player g_engfuncs.pEventAPI->EV_LocalPlayerViewheight( view_ofs ); } else if ( args->ducking == 1 ) { view_ofs[2] = VEC_DUCK_VIEW; } } pos[0] = origin[0] + view_ofs.x; pos[1] = origin[1] + view_ofs.y; pos[2] = origin[2] + view_ofs.z; }
/* ================= EV_GetDefaultShellInfo Determine where to eject shells from ================= */ void EV_GetDefaultShellInfo( event_args_t *args, float *origin, float *velocity, float *ShellVelocity, float *ShellOrigin, float *forward, float *right, float *up, float forwardScale, float upScale, float rightScale, bool bReverseDirection ) { int idx = args->entindex; vec3_t view_ofs = { 0, 0, DEFAULT_VIEWHEIGHT }; if ( EV_IsPlayer( idx ) ) { if ( EV_IsLocal( idx ) ) { gEngfuncs.pEventAPI->EV_LocalPlayerViewheight( view_ofs ); } else if ( args->ducking == 1 ) { view_ofs[2] = VEC_DUCK_VIEW; } } float fR = gEngfuncs.pfnRandomFloat( 50, 70 ); float fU = gEngfuncs.pfnRandomFloat( 75, 175 ); float fF = gEngfuncs.pfnRandomFloat( 25, 250 ); float fDirection = rightScale > 0.0f ? -1.0f : 1.0f; for ( int i = 0; i < 3; i++ ) { if( bReverseDirection ) { ShellVelocity[i] = velocity[i] * 0.5f - right[i] * fR * fDirection + up[i] * fU + forward[i] * fF; } else { ShellVelocity[i] = velocity[i] * 0.5f + right[i] * fR * fDirection + up[i] * fU + forward[i] * fF; } ShellOrigin[i] = velocity[i] * 0.1f + origin[i] + view_ofs[i] + upScale * up[i] + forwardScale * forward[i] + rightScale * right[i]; } }