summaryrefslogtreecommitdiffstats
path: root/source/Entity.h
diff options
context:
space:
mode:
Diffstat (limited to 'source/Entity.h')
-rw-r--r--source/Entity.h172
1 files changed, 172 insertions, 0 deletions
diff --git a/source/Entity.h b/source/Entity.h
new file mode 100644
index 000000000..15c351a09
--- /dev/null
+++ b/source/Entity.h
@@ -0,0 +1,172 @@
+
+#pragma once
+
+
+
+
+#include "Vector3d.h"
+#include "Vector3f.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 cWorld;
+class cReferenceManager;
+class cClientHandle;
+
+
+
+
+// tolua_begin
+class cEntity
+{
+public:
+ enum
+ {
+ ENTITY_STATUS_HURT = 2,
+ ENTITY_STATUS_DEAD = 3,
+ ENTITY_STATUS_WOLF_TAMING = 6,
+ ENTITY_STATUS_WOLF_TAMED = 7,
+ ENTITY_STATUS_WOLF_SHAKING = 8,
+ ENTITY_STATUS_EATING_ACCEPTED = 9,
+ ENTITY_STATUS_SHEEP_EATING = 10,
+ } ;
+
+ cEntity(const double & a_X, const double & a_Y, const double & a_Z);
+ virtual ~cEntity();
+
+ virtual void Initialize(cWorld * a_World);
+
+ enum eEntityType
+ {
+ eEntityType_Entity,
+ eEntityType_Player,
+ eEntityType_Pickup
+ };
+
+ virtual unsigned int GetEntityType() { return m_EntityType; }
+ virtual bool IsA( const char* a_EntityType );
+ virtual const char* GetClass();
+ // tolua_end
+
+ cWorld * GetWorld(void) const { return m_World; } //tolua_export
+
+ const Vector3d & GetPosition(void) const {return m_Pos; } //tolua_export
+ const double & GetPosX (void) const {return m_Pos.x; } //tolua_export
+ const double & GetPosY (void) const {return m_Pos.y; } //tolua_export
+ const double & GetPosZ (void) const {return m_Pos.z; } //tolua_export
+ const Vector3f & GetRot (void) const {return m_Rot; } //tolua_export
+ float GetRotation(void) const {return m_Rot.x; } //tolua_export
+ float GetPitch (void) const {return m_Rot.y; } //tolua_export
+ float GetRoll (void) const {return m_Rot.z; } //tolua_export
+ Vector3f GetLookVector(); //tolua_export
+
+ int GetChunkX(void) const {return m_ChunkX; } //tolua_export
+ int GetChunkY(void) const {return m_ChunkY; } //tolua_export
+ int GetChunkZ(void) const {return m_ChunkZ; } //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(void) const { return m_UniqueID; } //tolua_export
+ inline bool IsDestroyed(void) const { return m_bDestroyed; } //tolua_export
+
+ void Destroy(); //tolua_export
+ void RemoveFromChunk(void); // for internal use in cChunk
+
+ virtual void Tick(float a_Dt) = 0; //tolua_export
+
+ /** Descendants override this function to send a command to the specified client to spawn the entity on the client.
+ To spawn on all eligible clients, use cChunkMap::BroadcastSpawnEntity()
+ Needs to have a default implementation due to Lua bindings.
+ */
+ virtual void SpawnOn(cClientHandle & a_Client) {ASSERT(!"SpawnOn() unimplemented!"); } // tolua_export
+
+ void WrapRotation();
+
+ // Metadata flags; descendants may override the defaults:
+ virtual bool IsOnFire (void) const {return (m_BurnPeriod > 0); }
+ virtual bool IsCrouched (void) const {return false; }
+ virtual bool IsRiding (void) const {return false; }
+ virtual bool IsSprinting(void) const {return false; }
+ virtual bool IsRclking (void) const {return false; }
+
+protected:
+ virtual void Destroyed() {} // Called after the entity has been destroyed
+
+ 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 cCriticalSection m_CSCount;
+ 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;
+
+ eEntityType m_EntityType;
+
+ cWorld* m_World;
+
+ float m_FireDamageInterval;
+ float m_BurnPeriod;
+}; //tolua_export
+
+typedef std::list<cEntity *> cEntityList;
+
+
+
+