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
+1
View File
@@ -258,6 +258,7 @@ Engine::~Engine() {
}
audio::close();
network.reset();
clearKeepedObjects();
scripting::close();
logger.info() << "scripting finished";
if (!params.headless) {
+1 -2
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();
+4 -3
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);
+2 -1
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) {
+4
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();
}
};
}