mirror of
https://github.com/alliedmodders/hl2sdk.git
synced 2024-12-23 01:59:43 +08:00
74283e80d8
It's better for thirdparty to handle definition of it, we can use CEntityInstance instead since it's a base class here.
152 lines
3.1 KiB
C++
152 lines
3.1 KiB
C++
//========= Copyright <20> 1996-2005, Valve Corporation, All rights reserved. ============//
|
||
//
|
||
// Purpose:
|
||
//
|
||
//=============================================================================//
|
||
|
||
#ifndef ENTITYHANDLE_H
|
||
#define ENTITYHANDLE_H
|
||
#ifdef _WIN32
|
||
#pragma once
|
||
#endif
|
||
|
||
#include "const.h"
|
||
|
||
class CEntityInstance;
|
||
|
||
class CEntityHandle
|
||
{
|
||
public:
|
||
friend class CEntityIdentity;
|
||
|
||
CEntityHandle();
|
||
CEntityHandle(const CEntityHandle& other);
|
||
CEntityHandle(uint32 value);
|
||
CEntityHandle(int iEntry, int iSerialNumber);
|
||
|
||
void Init(int iEntry, int iSerialNumber);
|
||
void Term();
|
||
|
||
bool IsValid() const;
|
||
|
||
int GetEntryIndex() const;
|
||
int GetSerialNumber() const;
|
||
|
||
int ToInt() const;
|
||
bool operator !=(const CEntityHandle& other) const;
|
||
bool operator ==(const CEntityHandle& other) const;
|
||
bool operator ==(const CEntityInstance* pEnt) const;
|
||
bool operator !=(const CEntityInstance* pEnt) const;
|
||
bool operator <(const CEntityHandle& other) const;
|
||
bool operator <(const CEntityInstance* pEnt) const;
|
||
|
||
// Assign a value to the handle.
|
||
const CEntityHandle& operator=(const CEntityInstance* pEntity);
|
||
const CEntityHandle& Set(const CEntityInstance* pEntity);
|
||
|
||
// Use this to dereference the handle.
|
||
// Note: this is implemented in game code (ehandle.h)
|
||
CEntityInstance* Get() const;
|
||
|
||
protected:
|
||
union
|
||
{
|
||
uint32 m_Index;
|
||
struct
|
||
{
|
||
uint32 m_EntityIndex : 15;
|
||
uint32 m_Serial : 17;
|
||
} m_Parts;
|
||
};
|
||
};
|
||
|
||
inline CEntityHandle::CEntityHandle()
|
||
{
|
||
m_Index = INVALID_EHANDLE_INDEX;
|
||
}
|
||
|
||
inline CEntityHandle::CEntityHandle(const CEntityHandle& other)
|
||
{
|
||
m_Index = other.m_Index;
|
||
}
|
||
|
||
inline CEntityHandle::CEntityHandle(uint32 value)
|
||
{
|
||
m_Index = value;
|
||
}
|
||
|
||
inline CEntityHandle::CEntityHandle(int iEntry, int iSerialNumber)
|
||
{
|
||
Init(iEntry, iSerialNumber);
|
||
}
|
||
|
||
inline void CEntityHandle::Init(int iEntry, int iSerialNumber)
|
||
{
|
||
m_Parts.m_EntityIndex = iEntry;
|
||
m_Parts.m_Serial = iSerialNumber;
|
||
}
|
||
|
||
inline void CEntityHandle::Term()
|
||
{
|
||
m_Index = INVALID_EHANDLE_INDEX;
|
||
}
|
||
|
||
inline bool CEntityHandle::IsValid() const
|
||
{
|
||
return m_Index != INVALID_EHANDLE_INDEX;
|
||
}
|
||
|
||
inline int CEntityHandle::GetEntryIndex() const
|
||
{
|
||
if (IsValid())
|
||
{
|
||
return m_Parts.m_EntityIndex;
|
||
}
|
||
|
||
return -1;
|
||
}
|
||
|
||
inline int CEntityHandle::GetSerialNumber() const
|
||
{
|
||
return m_Parts.m_Serial;
|
||
}
|
||
|
||
inline int CEntityHandle::ToInt() const
|
||
{
|
||
return m_Index;
|
||
}
|
||
|
||
inline bool CEntityHandle::operator !=(const CEntityHandle& other) const
|
||
{
|
||
return m_Index != other.m_Index;
|
||
}
|
||
|
||
inline bool CEntityHandle::operator ==(const CEntityHandle& other) const
|
||
{
|
||
return m_Index == other.m_Index;
|
||
}
|
||
|
||
inline bool CEntityHandle::operator ==(const CEntityInstance* pEnt) const
|
||
{
|
||
return Get() == pEnt;
|
||
}
|
||
|
||
inline bool CEntityHandle::operator !=(const CEntityInstance* pEnt) const
|
||
{
|
||
return Get() != pEnt;
|
||
}
|
||
|
||
inline bool CEntityHandle::operator <(const CEntityHandle& other) const
|
||
{
|
||
return m_Index < other.m_Index;
|
||
}
|
||
|
||
inline const CEntityHandle &CEntityHandle::operator=( const CEntityInstance *pEntity )
|
||
{
|
||
return Set( pEntity );
|
||
}
|
||
|
||
typedef CEntityHandle CBaseHandle;
|
||
|
||
#endif // ENTITYHANDLE_H
|