本文整理汇总了C++中CBaseHandle类的典型用法代码示例。如果您正苦于以下问题:C++ CBaseHandle类的具体用法?C++ CBaseHandle怎么用?C++ CBaseHandle使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了CBaseHandle类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: CheckBaseHandle
int CheckBaseHandle(CBaseHandle &hndl)
{
if (!hndl.IsValid())
{
return -1;
}
int index = hndl.GetEntryIndex();
edict_t *pStoredEdict;
pStoredEdict = engine->PEntityOfEntIndex(index);
if (pStoredEdict == NULL)
{
return -1;
}
IServerEntity *pSE = pStoredEdict->GetIServerEntity();
if (pSE == NULL)
{
return -1;
}
if (pSE->GetRefEHandle() != hndl)
{
return -1;
}
return index;
}
示例2: isPointInRound
bool CTeamControlPointRound :: isPointInRound ( edict_t *point_pent )
{
edict_t *pPoint;
extern ConVar rcbot_const_point_offset;
for ( int i = 0; i < m_ControlPoints.Size(); i ++ )
{
CBaseHandle *hndl;
hndl = (CBaseHandle *)&(m_ControlPoints[i]);
if ( hndl )
{
pPoint = INDEXENT(hndl->GetEntryIndex());
CBaseEntity *pent = pPoint->GetUnknown()->GetBaseEntity();
if ( point_pent->GetUnknown()->GetBaseEntity() == pent )
return true;
//CTeamControlPoint *point = (CTeamControlPoint*)((unsigned long)pent + rcbot_const_point_offset.GetInt() );
//if ( point )
//{
// if ( point->m_iIndex == iIndex )
// return true;
//}
}
}
return false;
}
示例3: GetBaseEntity
IPhysicsVehicleController *GetLuaVehicle(ILuaInterface *gLua)
{
gLua->CheckType(1, GLua::TYPE_ENTITY);
CBaseHandle *handle = (CBaseHandle*)gLua->GetUserData(1);
CBaseEntity *entity = GetBaseEntity(handle->GetEntryIndex());
if(!entity)
{
gLua->Error("[gm_pimpmyride] NO ENTITY!");
return NULL;
}
IServerVehicle *vehicle = entity->GetServerVehicle();
if(!vehicle)
{
gLua->Error("[gm_pimpmyride] NO VEHICLE!");
return NULL;
}
IPhysicsVehicleController *controller = vehicle->GetVehicleController();
if(!controller)
{
gLua->Error("[gm_pimpmyride] NO PHYSICS CONTROLLER!");
return NULL;
}
return controller;
}
示例4: Assert
//-----------------------------------------------------------------------------
// After we built the touch list, deal with all the impacts...
//-----------------------------------------------------------------------------
void CMoveHelperServer::ProcessImpacts( void )
{
Assert( m_pHostPlayer );
// Relink in order to build absorigin and absmin/max to reflect any changes
// from prediction. Relink will early out on SOLID_NOT
engine->RelinkEntity( m_pHostPlayer->pev, true );
// Don't bother if the player ain't solid
if ( m_pHostPlayer->IsSolidFlagSet( FSOLID_NOT_SOLID ) )
{
return;
}
// Save off the velocity, cause we need to temporarily reset it
Vector vel = m_pHostPlayer->GetAbsVelocity();
// Touch other objects that were intersected during the movement.
for (int i = 0 ; i < m_TouchList.Size(); i++)
{
CBaseHandle entindex = m_TouchList[i].trace.m_pEnt->GetRefEHandle();
// We should have culled negative indices by now
Assert( entindex.IsValid() );
edict_t* ent = GetEdict( entindex );
if (!ent)
continue;
// Run the impact function as if we had run it during movement.
CBaseEntity *entity = GetContainingEntity( ent );
if ( !entity )
continue;
Assert( entity != m_pHostPlayer );
// Don't ever collide with self!!!!
if ( entity == m_pHostPlayer )
continue;
// Reconstruct trace results.
m_TouchList[i].trace.m_pEnt = CBaseEntity::Instance( ent );
// Use the velocity we had when we collided, so boxes will move, etc.
m_pHostPlayer->SetAbsVelocity( m_TouchList[i].deltavelocity );
entity->PhysicsImpact( m_pHostPlayer, m_TouchList[i].trace );
}
// Restore the velocity
m_pHostPlayer->SetAbsVelocity( vel );
// So no stuff is ever left over, sigh...
ResetTouchList();
}
示例5: IntHandleFromBaseHandle
//-----------------------------------------------------------------------------
// Returns an IntHandle from the given BaseHandle instance.
//-----------------------------------------------------------------------------
bool IntHandleFromBaseHandle( CBaseHandle hBaseHandle, unsigned int& output )
{
if (!hBaseHandle.IsValid())
return false;
unsigned int iEntityHandle = hBaseHandle.ToInt();
if (!iEntityHandle)
return false;
output = iEntityHandle;
return true;
}
示例6: SendProxy_EHandleToInt
void SendProxy_EHandleToInt( const SendProp *pProp, const void *pStruct, const void *pVarData, DVariant *pOut, int iElement, int objectID)
{
CBaseHandle *pHandle = (CBaseHandle*)pVarData;
if ( pHandle && pHandle->Get() )
{
int iSerialNum = pHandle->GetSerialNumber() & (1 << NUM_NETWORKED_EHANDLE_SERIAL_NUMBER_BITS) - 1;
pOut->m_Int = pHandle->GetEntryIndex() | (iSerialNum << MAX_EDICT_BITS);
}
else
{
pOut->m_Int = INVALID_NETWORKED_EHANDLE_VALUE;
}
}
示例7: RecvProxy_IntToEHandle
void RecvProxy_IntToEHandle( const CRecvProxyData *pData, void *pStruct, void *pOut )
{
CBaseHandle *pEHandle = (CBaseHandle*)pOut;
if ( pData->m_Value.m_Int == INVALID_NETWORKED_EHANDLE_VALUE )
{
*pEHandle = INVALID_EHANDLE_INDEX;
}
else
{
int iEntity = pData->m_Value.m_Int & ((1 << MAX_EDICT_BITS) - 1);
int iSerialNum = pData->m_Value.m_Int >> MAX_EDICT_BITS;
pEHandle->Init( iEntity, iSerialNum );
}
}
示例8: OnAddEntity
void CClientEntityList::OnAddEntity( IHandleEntity *pEnt, CBaseHandle handle )
{
int entnum = handle.GetEntryIndex();
EntityCacheInfo_t *pCache = &m_EntityCacheInfo[entnum];
if ( entnum >= 0 && entnum < MAX_EDICTS )
{
// Update our counters.
m_iNumServerEnts++;
if ( entnum > m_iMaxUsedServerIndex )
{
m_iMaxUsedServerIndex = entnum;
}
// Cache its networkable pointer.
Assert( dynamic_cast< IClientUnknown* >( pEnt ) );
Assert( ((IClientUnknown*)pEnt)->GetClientNetworkable() ); // Server entities should all be networkable.
pCache->m_pNetworkable = ((IClientUnknown*)pEnt)->GetClientNetworkable();
}
// Store it in a special list for fast iteration if it's a C_BaseEntity.
IClientUnknown *pUnknown = (IClientUnknown*)pEnt;
C_BaseEntity *pBaseEntity = pUnknown->GetBaseEntity();
if ( pBaseEntity )
{
pCache->m_BaseEntitiesIndex = m_BaseEntities.AddToTail( pBaseEntity );
}
else
{
pCache->m_BaseEntitiesIndex = m_BaseEntities.InvalidIndex();
}
}
示例9:
void CHalfLife2::SetHandleEntity(CBaseHandle &hndl, edict_t *pEnt)
{
IServerEntity *pEntOther = pEnt->GetIServerEntity();
if (pEntOther == NULL)
{
return;
}
hndl.Set(pEntOther);
}
示例10: OnAddEntity
void CGlobalEntityList::OnAddEntity( IHandleEntity *pEnt, CBaseHandle handle )
{
int i = handle.GetEntryIndex();
// record current list details
m_iNumEnts++;
if ( i > m_iHighestEnt )
m_iHighestEnt = i;
// If it's a CBaseEntity, notify the listeners.
CBaseEntity *pBaseEnt = static_cast<IServerUnknown*>(pEnt)->GetBaseEntity();
if ( pBaseEnt->edict() )
m_iNumEdicts++;
// NOTE: Must be a CBaseEntity on server
Assert( pBaseEnt );
//DevMsg(2,"Created %s\n", pBaseEnt->GetClassname() );
for ( i = m_entityListeners.Count()-1; i >= 0; i-- )
{
m_entityListeners[i]->OnEntityCreated( pBaseEnt );
}
}
示例11: OnRemoveEntity
void CClientEntityList::OnRemoveEntity( IHandleEntity *pEnt, CBaseHandle handle )
{
int entnum = handle.GetEntryIndex();
EntityCacheInfo_t *pCache = &m_EntityCacheInfo[entnum];
if ( entnum >= 0 && entnum < MAX_EDICTS )
{
// This is a networkable ent. Clear out our cache info for it.
pCache->m_pNetworkable = NULL;
m_iNumServerEnts--;
if ( entnum >= m_iMaxUsedServerIndex )
{
RecomputeHighestEntityUsed();
}
}
if ( pCache->m_BaseEntitiesIndex != m_BaseEntities.InvalidIndex() )
m_BaseEntities.Remove( pCache->m_BaseEntitiesIndex );
pCache->m_BaseEntitiesIndex = m_BaseEntities.InvalidIndex();
}
示例12:
IServerEntity *CServerTools::GetIServerEntity( IClientEntity *pClientEntity )
{
if ( pClientEntity == NULL )
return NULL;
CBaseHandle ehandle = pClientEntity->GetRefEHandle();
if ( ehandle.GetEntryIndex() >= MAX_EDICTS )
return NULL; // the first MAX_EDICTS entities are networked, the rest are client or server only
#if 0
// this fails, since the server entities have extra bits in their serial numbers,
// since 20 bits are reserved for serial numbers, except for networked entities, which are restricted to 10
// Brian believes that everything should just restrict itself to 10 to make things simpler,
// so if/when he changes NUM_SERIAL_NUM_BITS to 10, we can switch back to this simpler code
IServerNetworkable *pNet = gEntList.GetServerNetworkable( ehandle );
if ( pNet == NULL )
return NULL;
CBaseEntity *pServerEnt = pNet->GetBaseEntity();
return pServerEnt;
#else
IHandleEntity *pEnt = gEntList.LookupEntityByNetworkIndex( ehandle.GetEntryIndex() );
if ( pEnt == NULL )
return NULL;
CBaseHandle h = gEntList.GetNetworkableHandle( ehandle.GetEntryIndex() );
const int mask = ( 1 << NUM_NETWORKED_EHANDLE_SERIAL_NUMBER_BITS ) - 1;
if ( !h.IsValid() || ( ( h.GetSerialNumber() & mask ) != ( ehandle.GetSerialNumber() & mask ) ) )
return NULL;
IServerUnknown *pUnk = static_cast< IServerUnknown* >( pEnt );
return pUnk->GetBaseEntity();
#endif
}
示例13: addEntity
void CGameEngine::addEntity(boost::shared_ptr<IEntity> entity, const CBaseHandle& handle)
{
assert(handle.isValid());
m_level->addEntity(entity,handle);
}
示例14: lua_pushweapon
LUA_API void lua_pushweapon (lua_State *L, lua_CBaseCombatWeapon *pWeapon) {
CBaseHandle *hWeapon = (CBaseHandle *)lua_newuserdata(L, sizeof(CBaseHandle));
hWeapon->Set((CBaseEntity *)pWeapon);
luaL_getmetatable(L, "CBaseCombatWeapon");
lua_setmetatable(L, -2);
}
示例15:
LUA_API lua_CBaseCombatWeapon *lua_toweapon (lua_State *L, int idx) {
CBaseHandle *hWeapon = dynamic_cast<CBaseHandle *>((CBaseHandle *)lua_touserdata(L, idx));
if (hWeapon == NULL)
return NULL;
return dynamic_cast<lua_CBaseCombatWeapon *>(hWeapon->Get());
}