OpenRCT2/src/openrct2/scripting/ScConsole.hpp

69 lines
1.8 KiB
C++

/*****************************************************************************
* Copyright (c) 2014-2020 OpenRCT2 developers
*
* For a complete list of all authors, please refer to contributors.md
* Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2
*
* OpenRCT2 is licensed under the GNU General Public License version 3.
*****************************************************************************/
#pragma once
#ifdef ENABLE_SCRIPTING
# include "../interface/InteractiveConsole.h"
# include "Duktape.hpp"
# include "ScriptEngine.h"
namespace OpenRCT2::Scripting
{
class ScConsole
{
private:
InteractiveConsole& _console;
public:
ScConsole(InteractiveConsole& console)
: _console(console)
{
}
void clear()
{
_console.Clear();
}
duk_ret_t log(duk_context* ctx)
{
std::string line;
auto nargs = duk_get_top(ctx);
for (duk_idx_t i = 0; i < nargs; i++)
{
auto arg = DukValue::copy_from_stack(ctx, i);
auto argsz = Stringify(arg);
if (i != 0)
{
line.push_back(' ');
}
line += argsz;
}
_console.WriteLine(line);
return 0;
}
void executeLegacy(const std::string& command)
{
_console.Execute(command);
}
static void Register(duk_context* ctx)
{
dukglue_register_method(ctx, &ScConsole::clear, "clear");
dukglue_register_method_varargs(ctx, &ScConsole::log, "log");
dukglue_register_method(ctx, &ScConsole::executeLegacy, "executeLegacy");
}
};
} // namespace OpenRCT2::Scripting
#endif