I suggest using functions from virtual table.
It means like below.
PHP Code:
/**
* Description: Unsure, I assume it is whether or not the other entity is visible to this entity.
* Forward params: function(this, idOther);
* Return type: Integer (boolean).
* Execute params: ExecuteHam(Ham_FVisible, this, idOther);
*/
Ham_FVisible
Here's your pawn coded function converted for C++.
PHP Code:
char is_user_visible ( edict_t * host, edict_t * who )
{
static TraceResult tr; static float fFraction = 0.0f; static Vector fPosHost, fOfsHost,
fPosWho, fOfsWho;
//pev ( host, pev_origin, fPosHost )
//pev ( host, pev_view_ofs, fOfsHost )
//fPosHost[0] += fOfsHost[0]
//fPosHost[1] += fOfsHost[1]
//fPosHost[2] += fOfsHost[2]
fPosHost=host->v.origin; fOfsHost=host->v.view_ofs; fPosHost+=fOfsHost;
//pev ( who, pev_origin, fPosWho )
//pev ( who, pev_view_ofs, fOfsWho )
//fOfsWho[0] += fPosWho[0]
//fOfsWho[1] += fPosWho[1]
//fOfsWho[2] += fPosWho[2] + 12
fPosWho=who->v.origin,fOfsWho=who->v.view_ofs,fOfsWho+=fPosWho,fOfsWho.z+=12.0f;
//engfunc ( EngFunc_TraceLine, fPosHost, fOfsWho, IGNORE_GLASS | IGNORE_MONSTERS, host, tr )
//get_tr2 ( tr, TR_flFraction, fFraction )
TRACE_LINE(fPosHost,fOfsWho,ignore_glass|ignore_monsters,host,&tr);fFraction=tr.flFraction;
if ( fFraction == 1.0f )
return (char)1;
static Vector fVecRightHost, fVecRightSrcHost;
// global_get ( glb_v_right, fVecRightHost ) // Правее!
// fVecRightHost[0] *= 18
// fVecRightHost[1] *= 18
// fVecRightHost[2] *= 18
// fVecRightSrcHost[0] = fPosWho[0] + fVecRightHost[0]
// fVecRightSrcHost[1] = fPosWho[1] + fVecRightHost[1]
// fVecRightSrcHost[2] = fPosWho[2] + fVecRightHost[2]
fVecRightHost=gpGlobals->v_right; fVecRightHost*=18.0f; fVecRightSrcHost=fPosWho+fVecRightHost;
//DrawLaser ( fPosHost, fVecRightSrcHost, { 0, 255, 0 } )
// engfunc ( EngFunc_TraceLine, fPosHost, fVecRightSrcHost, IGNORE_GLASS | IGNORE_MONSTERS, host, tr )
// get_tr2 ( tr, TR_flFraction, fFraction )
TRACE_LINE(fPosHost,fVecRightSrcHost,ignore_glass|ignore_monsters,host,&tr);
fFraction=tr.flFraction;
if ( fFraction == 1.0f ) // Нет преград между игроками
return (char)1;
//---------------------------------------
static Vector fVecLeftSrcHost;
/// fVecLeftSrcHost[0] = fPosWho[0] - fVecRightHost[0]
/// fVecLeftSrcHost[1] = fPosWho[1] - fVecRightHost[1]
/// fVecLeftSrcHost[2] = fPosWho[2] - fVecRightHost[2]
fVecLeftSrcHost = fPosWho - fVecRightHost;
/// engfunc ( EngFunc_TraceLine, fPosHost, fVecLeftSrcHost, IGNORE_GLASS | IGNORE_MONSTERS, host, tr )
/// get_tr2 ( tr, TR_flFraction, fFraction )
TRACE_LINE(fPosHost,fVecLeftSrcHost,ignore_glass|ignore_monsters,host,&tr);
fFraction=tr.flFraction;
if ( fFraction == 1.0f )
return (char)1;
return char(0);
}
__________________