iw4x-client/src/Components/Modules/Command.hpp

69 lines
1.4 KiB
C++
Raw Normal View History

2017-01-20 08:36:52 -05:00
#pragma once
2017-01-19 16:23:59 -05:00
namespace Components
{
class Command : public Component
{
public:
class Params
{
public:
Params() {};
2022-03-15 20:44:59 -04:00
2022-03-17 14:50:20 -04:00
virtual int size() = 0;
virtual const char* get(int index) = 0;
virtual std::string join(int index);
2017-01-19 16:23:59 -05:00
2022-03-17 14:50:20 -04:00
virtual const char* operator[](const int index)
{
return this->get(index);
}
2017-01-19 16:23:59 -05:00
};
class ClientParams : public Params
{
public:
2022-03-17 14:50:20 -04:00
ClientParams();
2017-01-19 16:23:59 -05:00
2022-03-17 14:50:20 -04:00
int size() override;
const char* get(int index) override;
2017-01-19 16:23:59 -05:00
private:
2022-03-17 14:50:20 -04:00
int nesting_;
2017-01-19 16:23:59 -05:00
};
class ServerParams : public Params
{
public:
2022-03-17 14:50:20 -04:00
ServerParams();
2017-01-19 16:23:59 -05:00
2022-03-17 14:50:20 -04:00
int size() override;
const char* get(int index) override;
2017-01-19 16:23:59 -05:00
private:
2022-03-17 14:50:20 -04:00
int nesting_;
2017-01-19 16:23:59 -05:00
};
typedef void(Callback)(Command::Params* params);
Command();
static Game::cmd_function_t* Allocate();
static void Add(const char* name, Utils::Slot<Callback> callback);
static void AddSV(const char* name, Utils::Slot<Callback> callback);
static void AddRaw(const char* name, void(*callback)(), bool key = false);
static void AddRawSV(const char* name, void(*callback)());
static void Execute(std::string command, bool sync = true);
2018-12-17 08:29:18 -05:00
static Game::cmd_function_t* Find(const std::string& command);
2017-01-19 16:23:59 -05:00
private:
static std::unordered_map<std::string, Utils::Slot<Callback>> FunctionMap;
static std::unordered_map<std::string, Utils::Slot<Callback>> FunctionMapSV;
static void MainCallback();
static void MainCallbackSV();
};
}