summaryrefslogtreecommitdiffstats
path: root/source/cEntity.h
blob: 80fc33cf1cb9c1da72915688ad7d0da5c646e3ea (plain) (blame)
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
116
#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 SetWorld( cWorld* a_World ) { m_World = a_World; }
	void MoveToCorrectChunk(bool a_bIgnoreOldChunk = false);

	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