#pragma once #include "entity.hpp" #include "marker_info.hpp" #include "usable.hpp" #include namespace game { using MarkerQueryCallback = std::function; using MarkerUseCallback = std::function; class Marker : public Entity, public Usable { public: using Super = Entity; Marker(World& world, const MarkerInfo& info); virtual void SendInitData(Player& player, net::OutMessage& msg) const override; virtual void Update() override; virtual bool QueryUseTarget(PlayerCharacter& character, uint32_t target_id, UseTargetQueryResult& res) override; virtual void Use(PlayerCharacter& character, uint32_t target_id) override; void SetUseTarget(const std::string& name, MarkerQueryCallback query, MarkerUseCallback use); virtual ~Marker() override; private: MarkerInfo info_; std::unique_ptr query_obj_; MarkerQueryCallback query_cb_; MarkerUseCallback use_cb_; }; }