Browse Source

Lua console: Add a prelude file

Runs lua/repl_prelude.lua at console initialization.

The default prelude contains global assignments for all devilutionx
modules. This should save us on typing.
pull/6771/head
Gleb Mazovetskiy 2 years ago
parent
commit
4a7fa5d13e
  1. 1
      CMake/Assets.cmake
  2. 5
      Packaging/resources/assets/lua/repl_prelude.lua
  3. 27
      Source/panels/console.cpp

1
CMake/Assets.cmake

@ -142,6 +142,7 @@ set(devilutionx_assets
levels/towndata/automap.amp levels/towndata/automap.amp
lua/init.lua lua/init.lua
lua/inspect.lua lua/inspect.lua
lua/repl_prelude.lua
nlevels/cutl5w.clx nlevels/cutl5w.clx
nlevels/cutl6w.clx nlevels/cutl6w.clx
nlevels/l5data/cornerstone.dun nlevels/l5data/cornerstone.dun

5
Packaging/resources/assets/lua/repl_prelude.lua

@ -0,0 +1,5 @@
log = require('devilutionx.log')
audio = require('devilutionx.audio')
render = require('devilutionx.render')
message = require('devilutionx.message')
inspect = require('inspect')

27
Source/panels/console.cpp

@ -14,6 +14,7 @@
#include "DiabloUI/text_input.hpp" #include "DiabloUI/text_input.hpp"
#include "control.h" #include "control.h"
#include "engine.h" #include "engine.h"
#include "engine/assets.hpp"
#include "engine/displacement.hpp" #include "engine/displacement.hpp"
#include "engine/dx.h" #include "engine/dx.h"
#include "engine/palette.h" #include "engine/palette.h"
@ -39,6 +40,7 @@ constexpr std::string_view HelpText =
" Up/Down to fill the input from history," " Up/Down to fill the input from history,"
" Shift+Up/Down to fill the input from output history," " Shift+Up/Down to fill the input from output history,"
" Ctrl+L to clear history, Esc to close."; " Ctrl+L to clear history, Esc to close.";
std::optional<tl::expected<AssetData, std::string>> ConsolePrelude;
bool IsConsoleVisible; bool IsConsoleVisible;
char ConsoleInputBuffer[4096]; char ConsoleInputBuffer[4096];
@ -313,12 +315,33 @@ void NextOutput()
NextHistoryItem(IsHistoryOutputLine); NextHistoryItem(IsHistoryOutputLine);
} }
void AddInitialConsoleLines()
{
if (ConsolePrelude->has_value()) {
std::string_view prelude { **ConsolePrelude };
if (!prelude.empty() && prelude.back() == '\n')
prelude.remove_suffix(1);
AddConsoleLine(ConsoleLine { .type = ConsoleLine::Help, .text = StrCat(HelpText, "\n", prelude) });
} else {
AddConsoleLine(ConsoleLine { .type = ConsoleLine::Help, .text = std::string(HelpText) });
AddConsoleLine(ConsoleLine { .type = ConsoleLine::Error, .text = ConsolePrelude->error() });
}
}
void ClearConsole() void ClearConsole()
{ {
ConsoleLines.clear(); ConsoleLines.clear();
HistoryIndex = -1; HistoryIndex = -1;
ScrollOffset = 0; ScrollOffset = 0;
AddConsoleLine(ConsoleLine { .type = ConsoleLine::Help, .text = std::string(HelpText) }); AddInitialConsoleLines();
}
void InitConsole()
{
ConsolePrelude = LoadAsset("lua\\repl_prelude.lua");
AddInitialConsoleLines();
if (ConsolePrelude->has_value())
RunLuaReplLine(std::string_view(**ConsolePrelude));
} }
} // namespace } // namespace
@ -442,7 +465,7 @@ void DrawConsole(const Surface &out)
SDL_StartTextInput(); SDL_StartTextInput();
FirstRender = false; FirstRender = false;
if (ConsoleLines.empty()) { if (ConsoleLines.empty()) {
AddConsoleLine(ConsoleLine { .type = ConsoleLine::Help, .text = std::string(HelpText) }); InitConsole();
} }
} }

Loading…
Cancel
Save