1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
|
#pragma once
#include "MemoryLeak.h"
#define CLASS_PROT_ISA() virtual bool IsA( const char* a_EntityType );
#define CLASS_PROT_GETCLASS() virtual const char* GetClass();
/* Can't use this (yet) because of tolua */
#define CLASS_PROTOTYPE() \
CLASS_PROT_ISA(); \
CLASS_PROT_GETCLASS();
#define CLASS_DEF_ISA( classname, superclass ) \
bool classname::IsA( const char* a_EntityType ) \
{ \
if( strcmp( a_EntityType, #classname ) == 0 ) return true; \
return superclass::IsA( a_EntityType ); \
}
#define CLASS_DEF_GETCLASS( classname ) \
const char* classname::GetClass() \
{ \
return #classname; \
}
#define CLASS_DEFINITION( classname, superclass ) \
CLASS_DEF_ISA( classname, superclass ) \
CLASS_DEF_GETCLASS( classname )
class cChunk;
class cWorld;
class cReferenceManager;
class Vector3d;
class Vector3f;
class cClientHandle;
class cEntity //tolua_export
{ //tolua_export
public: //tolua_export
cEntity(const double & a_X, const double & a_Y, const double & a_Z); //tolua_export
virtual ~cEntity(); //tolua_export
virtual void Initialize( cWorld* a_World ); //tolua_export
enum ENUM_ENTITY_TYPE //tolua_export
{ //tolua_export
E_ENTITY, //tolua_export
E_PLAYER, //tolua_export
E_PICKUP //tolua_export
}; //tolua_export
virtual unsigned int GetEntityType() { return m_EntityType; } //tolua_export
virtual bool IsA( const char* a_EntityType ); //tolua_export
virtual const char* GetClass(); //tolua_export
cWorld* GetWorld() { return m_World; } //tolua_export
const Vector3d & GetPosition(); //tolua_export
const double & GetPosX(); //tolua_export
const double & GetPosY(); //tolua_export
const double & GetPosZ(); //tolua_export
const Vector3f & GetRot(); //tolua_export
float GetRotation(); //tolua_export
float GetPitch(); //tolua_export
float GetRoll(); //tolua_export
Vector3f GetLookVector(); //tolua_export
void SetPosX( const double & a_PosX ); //tolua_export
void SetPosY( const double & a_PosY ); //tolua_export
void SetPosZ( const double & a_PosZ ); //tolua_export
void SetPosition( const double & a_PosX, const double & a_PosY, const double & a_PosZ ); //tolua_export
void SetPosition( const Vector3d & a_Pos ); //tolua_export
void SetRot( const Vector3f & a_Rot ); //tolua_export
void SetRotation( float a_Rotation ); //tolua_export
void SetPitch( float a_Pitch ); //tolua_export
void SetRoll( float a_Roll ); //tolua_export
inline int GetUniqueID() { return m_UniqueID; } //tolua_export
inline bool IsDestroyed() { return m_bDestroyed; } //tolua_export
void Destroy(); //tolua_export
void RemoveFromChunk( cChunk* a_Chunk ); // for internal use in cChunk
virtual void Tick(float a_Dt) = 0; //tolua_export
virtual void SpawnOn( cClientHandle* a_Target ) = 0; //tolua_export
void WrapRotation();
protected:
void MoveToCorrectChunk();
friend class cReferenceManager;
void AddReference( cEntity*& a_EntityPtr );
void ReferencedBy( cEntity*& a_EntityPtr );
void Dereference( cEntity*& a_EntityPtr );
static int m_EntityCount;
int m_UniqueID;
cReferenceManager* m_Referencers;
cReferenceManager* m_References;
int m_ChunkX, m_ChunkY, m_ChunkZ;
Vector3d* m_Pos;
bool m_bDirtyPosition;
Vector3f* m_Rot;
bool m_bDirtyOrientation;
bool m_bDestroyed;
bool m_bRemovedFromChunk;
ENUM_ENTITY_TYPE m_EntityType;
private:
cWorld* m_World;
}; //tolua_export
|