#pragma once #include "gridservice.h" #include "roomentity.h" class MoveableEntity : public RoomEntity { public: MoveableEntity(); virtual void Update(int delta_time) {}; int UpdatedTimes() { return updated_times_;} std::set& GetGridList() { return grid_list_; } void TraverseCreatures(std::function func); void TraverseAllLayerEntityList(std::function func); void TraverseAllLayerHumanList(std::function func); virtual void RefreshView(); virtual void OnGridListChange(std::set& old_grids, std::set& inc_grids, std::set& dec_grids ); virtual void SyncAroundPlayers(const char* file, int line, const char* func); virtual void UpdateCharImage(const char* file, int line, const char* func); virtual const glm::vec3& GetMoveDir() { return move_dir_; }; virtual void SetMoveDir(const glm::vec3& move_dir); virtual const glm::vec3& GetAttackDir() { return attack_dir_; }; virtual void SetAttackDir(const glm::vec3& attack_dir); virtual const glm::vec3& GetShotDir() { return attack_dir_; }; int GetChgMoveDirTimes() { return chg_move_dir_times_; } int GetChgAttackDirTimes() { return chg_attack_dir_times_; } float GetAttackDirRotate(); protected: int updated_times_ = 0; private: glm::vec3 move_dir_ = GlmHelper::ZERO; glm::vec3 attack_dir_ = GlmHelper::ZERO; std::set grid_list_; int chg_move_dir_times_ = 0; int chg_attack_dir_times_ = 0; };