summaryrefslogtreecommitdiffstats
path: root/source/Mobs/Monster.h
diff options
context:
space:
mode:
authormadmaxoft@gmail.com <madmaxoft@gmail.com@0a769ca7-a7f5-676a-18bf-c427514a06d6>2012-09-23 22:53:08 +0200
committermadmaxoft@gmail.com <madmaxoft@gmail.com@0a769ca7-a7f5-676a-18bf-c427514a06d6>2012-09-23 22:53:08 +0200
commit16f44ab7de445e153d949a611104f9ca1cac265c (patch)
tree8abf5a3442a1877855f2c80d9482611a04922683 /source/Mobs/Monster.h
parentSource files cleanup: WorldStorage-related files in a separate subfolder (diff)
downloadcuberite-16f44ab7de445e153d949a611104f9ca1cac265c.tar
cuberite-16f44ab7de445e153d949a611104f9ca1cac265c.tar.gz
cuberite-16f44ab7de445e153d949a611104f9ca1cac265c.tar.bz2
cuberite-16f44ab7de445e153d949a611104f9ca1cac265c.tar.lz
cuberite-16f44ab7de445e153d949a611104f9ca1cac265c.tar.xz
cuberite-16f44ab7de445e153d949a611104f9ca1cac265c.tar.zst
cuberite-16f44ab7de445e153d949a611104f9ca1cac265c.zip
Diffstat (limited to 'source/Mobs/Monster.h')
-rw-r--r--source/Mobs/Monster.h101
1 files changed, 101 insertions, 0 deletions
diff --git a/source/Mobs/Monster.h b/source/Mobs/Monster.h
new file mode 100644
index 000000000..0958d182c
--- /dev/null
+++ b/source/Mobs/Monster.h
@@ -0,0 +1,101 @@
+
+#pragma once
+
+#include "../cPawn.h"
+#include "../Defines.h"
+#include "../cWorld.h"
+#include "../BlockID.h"
+#include "../cItem.h"
+
+
+
+
+
+class Vector3f;
+class cClientHandle;
+
+
+
+
+class cMonster : public cPawn //tolua_export
+{ //tolua_export
+public:
+
+ cMonster();
+ virtual ~cMonster();
+
+ virtual bool IsA( const char* a_EntityType );
+
+ virtual void SpawnOn(cClientHandle & a_ClientHandle) override;
+
+ virtual void Tick(float a_Dt) override;
+
+ virtual void HandlePhysics(float a_Dt);
+ virtual void ReplicateMovement(void);
+
+ virtual void TakeDamage(int a_Damage, cEntity * a_Instigator) override;
+ virtual void KilledBy(cEntity * a_Killer) override;
+
+ virtual void MoveToPosition(const Vector3f & a_Position);
+ virtual bool ReachedDestination(void);
+
+ char GetMobType(void) const {return m_MobType; }
+
+ const char * GetState();
+ void SetState(const AString & str);
+
+ virtual void CheckEventSeePlayer();
+ virtual void EventSeePlayer(cEntity *);
+ float m_SightDistance;
+ virtual cPlayer *FindClosestPlayer(); //non static is easier. also virtual so other mobs can implement their own searching algo
+ virtual void GetMonsterConfig(const char* pm_name);
+ virtual void EventLosePlayer();
+ virtual void CheckEventLostPlayer();
+
+ virtual void InStateIdle(float a_Dt);
+ virtual void InStateChasing(float a_Dt);
+ virtual void InStateEscaping(float a_Dt);
+
+ virtual void Attack(float a_Dt);
+ int GetMobType() {return m_MobType;}
+ int GetAttackRate(){return (int)m_AttackRate;}
+ void SetAttackRate(int ar);
+ void SetAttackRange(float ar);
+ void SetAttackDamage(float ad);
+ void SetSightDistance(float sd);
+
+ enum MState{ATTACKING, IDLE, CHASING, ESCAPING} m_EMState;
+ enum MPersonality{PASSIVE,AGGRESSIVE,COWARDLY} m_EMPersonality;
+
+protected:
+
+ cEntity* m_Target;
+ float m_AttackRate;
+ float idle_interval;
+
+ Vector3f m_Destination;
+ bool m_bMovingToDestination;
+ bool m_bPassiveAggressive;
+
+ Vector3f m_Speed;
+ float m_DestinationTime;
+
+ float m_Gravity;
+ bool m_bOnGround;
+
+ float m_DestroyTimer;
+ float m_Jump;
+
+ char m_MobType;
+
+ float m_SeePlayerInterval;
+ float m_AttackDamage;
+ float m_AttackRange;
+ float m_AttackInterval;
+
+ void AddRandomDropItem(cItems & a_Drops, unsigned int a_Min, unsigned int a_Max, short a_Item, short a_ItemHealth = 0);
+}; //tolua_export
+
+
+
+