#pragma once #include "../FlyingMob.h" #include "../Enemy.h" class GhastClass; class Level; class Ghast : public FlyingMob, public Enemy { public: eINSTANCEOF GetType() { return eTYPE_GHAST; } static Entity* create(Level* level) { return new Ghast(level); } private: static const int DATA_IS_CHARGING = 16; public: int floatDuration; double xTarget, yTarget, zTarget; private: std::shared_ptr target; int retargetTime; public: int oCharge; int charge; private: int explosionPower; void _init(); public: Ghast(Level* level); virtual bool isCharging(); virtual bool hurt(DamageSource* source, float dmg); protected: virtual void defineSynchedData(); virtual void registerAttributes(); protected: virtual void serverAiStep(); private: virtual bool canReach(double xt, double yt, double zt, double dist); protected: virtual int getAmbientSound(); virtual int getHurtSound(); virtual int getDeathSound(); virtual int getDeathLoot(); virtual void dropDeathLoot(bool wasKilledByPlayer, int playerBonusLevel); virtual float getSoundVolume(); public: virtual bool canSpawn(); virtual int getMaxSpawnClusterSize(); virtual void addAdditonalSaveData(CompoundTag* tag); virtual void readAdditionalSaveData(CompoundTag* tag); };