#pragma once #include #include #include #include "EntityType.h" #include "Inventory.h" class Block; class ActionTarget { private: Framework::Vec3 blockPos; Direction targetBlockSide; int entityId; public: ActionTarget( Framework::Vec3 blockPos, Direction blockSide ); ActionTarget( int entityId ); static ActionTarget* load( Framework::StreamReader* zReader ); bool isBlock() const; bool isEntity() const; int getEntityId() const; Framework::Vec3 getBlockPos() const; Direction getBlockSide() const; Framework::Either zTarget( int dimensionId ) const; Framework::Either getTarget( int dimensionId ) const; }; class Entity : public Framework::Model3D, public Inventory { protected: float maxHP; float currentHP; float stamina; float maxStamina; float hunger; float maxHunger; float thirst; float maxThirst; float targetDistanceLimit; Framework::Vec3 speed; Framework::Vec3 faceDir; const EntityType* zEntityType; int currentDimensionId; float gravityMultiplier; int id; ActionTarget* target; Framework::Critical cs; public: Entity( const EntityType* zType, bool hasInventory ); ~Entity(); virtual bool tick( double time ) override; int getId() const; const EntityType* zType() const; int getCurrentDimension() const; void lock(); void unlock(); friend EntityType; };