Refactor luaconsole to make it easier to use

This commit is contained in:
2021-11-04 11:20:29 -04:00
parent 7cbf40e3d6
commit cf5a2d7462
4 changed files with 63 additions and 82 deletions

View File

@@ -28,6 +28,8 @@ private:
int64_t actor_id_;
int64_t printbuffer_line_;
void do_lua_command(const StringVec &cmd);
void do_syntax_command(const StringVec &cmd);
void do_view_command(const StringVec &cmd);
void do_menu_command(const StringVec &cmd);
void do_choose_command(const StringVec &cmd);
@@ -36,7 +38,6 @@ private:
void do_rollback_command(const StringVec &cmd);
void do_tick_command(const StringVec &cmd);
void do_lua(const std::string &exp);
void do_command(const StringVec &exp);
void check_redirects();
@@ -47,7 +48,25 @@ public:
virtual void event_update();
};
void TextGame::do_lua_command(const StringVec &words) {
assert(world_->stack_is_clear());
if (words.size() != 2) {
stdostream() << "lua command (lua) takes a single string" << std::endl;
return;
}
const std::string &exp = words[1];
InvocationData dummyresult;
Invocation inv(Invocation::KIND_LUA, actor_id_, actor_id_, exp, dummyresult);
world_->invoke(inv);
}
void TextGame::do_syntax_command(const StringVec &words) {
stdostream() << "Syntax Error: ";
for (int i = 1; i < int(words.size()); i++) {
stdostream() << words[i] << " ";
}
stdostream() << std::endl;
}
void TextGame::do_view_command(const StringVec &cmd) {
if (cmd.size() != 1) {
@@ -102,12 +121,6 @@ void TextGame::do_choose_command(const StringVec &cmd) {
world_->invoke(inv);
}
void TextGame::do_lua(const std::string &exp) {
assert(world_->stack_is_clear());
InvocationData dummyresult;
Invocation inv(Invocation::KIND_LUA, actor_id_, actor_id_, exp, dummyresult);
world_->invoke(inv);
}
void TextGame::do_snapshot_command(const StringVec &cmd) {
if (cmd.size() != 1) {
@@ -146,7 +159,9 @@ void TextGame::do_quit_command(const StringVec &cmd) {
}
void TextGame::do_command(const StringVec &words) {
if (words[0] == "v") do_view_command(words);
if (words[0] == "lua") do_lua_command(words);
else if (words[0] == "syntax") do_syntax_command(words);
else if (words[0] == "v") do_view_command(words);
else if (words[0] == "m") do_menu_command(words);
else if (words[0] == "q") do_quit_command(words);
else if (words[0] == "s") do_snapshot_command(words);
@@ -205,18 +220,11 @@ void TextGame::event_update()
std::string line = get_stdio_channel()->in()->readline();
if (line == "") break;
console_.add(line);
int action = console_.action();
if (action == LuaConsole::DO_LUA) {
do_lua(console_.lua_expression());
const StringVec &words = console_.words();
if (!words.empty()) {
do_command(words);
console_.clear();
channel_printbuffer();
} else if (action == LuaConsole::DO_COMMAND) {
do_command(console_.words());
console_.clear();
channel_printbuffer();
} else if (action == LuaConsole::DO_SYNTAX) {
stdostream() << console_.syntax() << std::endl;
console_.clear();
}
check_redirects();
if (actor_id_ == 0) {