/** * Retrieves the CEntInfo pointer from g_EntList for a given entity index */ CEntInfo *CHalfLife2::LookupEntity(int entIndex) { // Make sure that our index is within the bounds of the global ent array if (entIndex < 0 || entIndex >= NUM_ENT_ENTRIES) { return NULL; } CEntInfo *entInfos = EntInfoArray(); if (!entInfos) { /* Attempt to use engine interface instead */ static CEntInfo tempInfo; tempInfo.m_pNext = NULL; tempInfo.m_pPrev = NULL; edict_t *pEdict = PEntityOfEntIndex(entIndex); if (!pEdict) { return NULL; } IServerUnknown *pUnk = pEdict->GetUnknown(); if (!pUnk) { return NULL; } tempInfo.m_pEntity = pUnk; tempInfo.m_SerialNumber = pUnk->GetRefEHandle().GetSerialNumber(); return &tempInfo; } return &entInfos[entIndex]; }
cell_t CHalfLife2::EntityToBCompatRef(CBaseEntity *pEntity) { if (pEntity == NULL) { return INVALID_EHANDLE_INDEX; } IServerUnknown *pUnknown = (IServerUnknown *)pEntity; CBaseHandle hndl = pUnknown->GetRefEHandle(); if (hndl == INVALID_EHANDLE_INDEX) { return INVALID_EHANDLE_INDEX; } if (hndl.GetEntryIndex() >= MAX_EDICTS) { return (hndl.ToInt() | (1<<31)); } else { return hndl.GetEntryIndex(); } }
cell_t CHalfLife2::EntityToReference(CBaseEntity *pEntity) { IServerUnknown *pUnknown = (IServerUnknown *)pEntity; CBaseHandle hndl = pUnknown->GetRefEHandle(); return (hndl.ToInt() | (1<<31)); }