#pragma once #include "command.hpp" #include "services/players/player_service.hpp" namespace big { class player_command; class player_all_component : public command { player_command* m_parent; protected: virtual void execute(const std::vector& args, const std::shared_ptr ctx = std::make_shared()) override; virtual std::optional> parse_args(const std::vector& args, const std::shared_ptr ctx = std::make_shared()) override; public: player_all_component(player_command* parent, const std::string& name, const std::string& label, const std::string& description, std::optional num_args); }; class player_command : public command { friend player_all_component; std::unique_ptr m_all_component; protected: virtual void execute(const std::vector& args, const std::shared_ptr ctx = std::make_shared()) override; virtual void execute(player_ptr player, const std::vector& args, const std::shared_ptr ctx = std::make_shared()) = 0; virtual std::optional> parse_args(const std::vector& args, const std::shared_ptr ctx = std::make_shared()) override; virtual std::optional> parse_args_p(const std::vector& args, const std::shared_ptr ctx = std::make_shared()) { return std::vector(); }; public: void call(player_ptr player, const std::vector& args, const std::shared_ptr ctx = std::make_shared()); player_command(const std::string& name, const std::string& label, const std::string& description, std::optional num_args, bool make_all_version = true); }; }