fix on_block_interact & fix segfault after engine finished

This commit is contained in:
MihailRis 2024-12-07 02:10:36 +03:00
parent e0670c11d5
commit d1f92c21d0
6 changed files with 12 additions and 7 deletions

View File

@ -42,7 +42,6 @@ jobs:
run: ctest --test-dir ${{github.workspace}}/build
- name: Run engine (headless)
run: |
mkdir ${{github.workspace}}/userdir
chmod +x ${{github.workspace}}/build/VoxelEngine
${{github.workspace}}/build/VoxelEngine --headless --dir ${{github.workspace}}/userdir
# - name: Build AppImage

View File

@ -258,6 +258,7 @@ Engine::~Engine() {
}
audio::close();
network.reset();
clearKeepedObjects();
scripting::close();
logger.info() << "scripting finished";
if (!params.headless) {

View File

@ -68,12 +68,11 @@ class Engine : public util::ObjectsKeeper {
std::unique_ptr<cmd::CommandsInterpreter> interpreter;
std::unique_ptr<network::Network> network;
std::vector<std::string> basePacks;
std::unique_ptr<gui::GUI> gui;
uint64_t frame = 0;
double lastTime = 0.0;
double delta = 0.0;
std::unique_ptr<gui::GUI> gui;
void loadControls();
void loadSettings();

View File

@ -48,9 +48,6 @@ static std::filesystem::path toCanonic(std::filesystem::path path) {
}
void EnginePaths::prepare() {
logger.info() << "resources folder: " << fs::canonical(resourcesFolder).u8string();
logger.info() << "user files folder: " << fs::canonical(userFilesFolder).u8string();
if (!fs::is_directory(resourcesFolder)) {
throw std::runtime_error(
resourcesFolder.u8string() + " is not a directory"
@ -59,6 +56,10 @@ void EnginePaths::prepare() {
if (!fs::is_directory(userFilesFolder)) {
fs::create_directories(userFilesFolder);
}
logger.info() << "resources folder: " << fs::canonical(resourcesFolder).u8string();
logger.info() << "user files folder: " << fs::canonical(userFilesFolder).u8string();
auto contentFolder = userFilesFolder / CONTENT_FOLDER;
if (!fs::is_directory(contentFolder)) {
fs::create_directories(contentFolder);

View File

@ -368,7 +368,7 @@ bool scripting::on_block_interact(
Player* player, const Block& block, const glm::ivec3& pos
) {
std::string name = block.name + ".interact";
return lua::emit_event(lua::get_main_state(), name, [pos, player](auto L) {
auto result = lua::emit_event(lua::get_main_state(), name, [pos, player](auto L) {
lua::pushivec_stack(L, pos);
lua::pushinteger(L, player->getId());
return 4;
@ -386,6 +386,7 @@ bool scripting::on_block_interact(
);
}
}
return result;
}
void scripting::on_player_tick(Player* player, int tps) {

View File

@ -14,5 +14,9 @@ namespace util {
virtual void keepAlive(std::shared_ptr<void> ptr) {
ptrs.push_back(ptr);
}
virtual void clearKeepedObjects() {
ptrs.clear();
}
};
}