diff options
author | madmaxoft@gmail.com <madmaxoft@gmail.com@0a769ca7-a7f5-676a-18bf-c427514a06d6> | 2012-09-23 22:53:08 +0200 |
---|---|---|
committer | madmaxoft@gmail.com <madmaxoft@gmail.com@0a769ca7-a7f5-676a-18bf-c427514a06d6> | 2012-09-23 22:53:08 +0200 |
commit | 16f44ab7de445e153d949a611104f9ca1cac265c (patch) | |
tree | 8abf5a3442a1877855f2c80d9482611a04922683 /source/Mobs/Monster.h | |
parent | Source files cleanup: WorldStorage-related files in a separate subfolder (diff) | |
download | cuberite-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.h | 101 |
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 + + + + |