fix on_block_interact & fix segfault after engine finished
This commit is contained in:
parent
e0670c11d5
commit
d1f92c21d0
1
.github/workflows/appimage.yml
vendored
1
.github/workflows/appimage.yml
vendored
@ -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
|
||||
|
||||
@ -258,6 +258,7 @@ Engine::~Engine() {
|
||||
}
|
||||
audio::close();
|
||||
network.reset();
|
||||
clearKeepedObjects();
|
||||
scripting::close();
|
||||
logger.info() << "scripting finished";
|
||||
if (!params.headless) {
|
||||
|
||||
@ -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();
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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) {
|
||||
|
||||
@ -14,5 +14,9 @@ namespace util {
|
||||
virtual void keepAlive(std::shared_ptr<void> ptr) {
|
||||
ptrs.push_back(ptr);
|
||||
}
|
||||
|
||||
virtual void clearKeepedObjects() {
|
||||
ptrs.clear();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user