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
|
run: ctest --test-dir ${{github.workspace}}/build
|
||||||
- name: Run engine (headless)
|
- name: Run engine (headless)
|
||||||
run: |
|
run: |
|
||||||
mkdir ${{github.workspace}}/userdir
|
|
||||||
chmod +x ${{github.workspace}}/build/VoxelEngine
|
chmod +x ${{github.workspace}}/build/VoxelEngine
|
||||||
${{github.workspace}}/build/VoxelEngine --headless --dir ${{github.workspace}}/userdir
|
${{github.workspace}}/build/VoxelEngine --headless --dir ${{github.workspace}}/userdir
|
||||||
# - name: Build AppImage
|
# - name: Build AppImage
|
||||||
|
|||||||
@ -258,6 +258,7 @@ Engine::~Engine() {
|
|||||||
}
|
}
|
||||||
audio::close();
|
audio::close();
|
||||||
network.reset();
|
network.reset();
|
||||||
|
clearKeepedObjects();
|
||||||
scripting::close();
|
scripting::close();
|
||||||
logger.info() << "scripting finished";
|
logger.info() << "scripting finished";
|
||||||
if (!params.headless) {
|
if (!params.headless) {
|
||||||
|
|||||||
@ -68,12 +68,11 @@ class Engine : public util::ObjectsKeeper {
|
|||||||
std::unique_ptr<cmd::CommandsInterpreter> interpreter;
|
std::unique_ptr<cmd::CommandsInterpreter> interpreter;
|
||||||
std::unique_ptr<network::Network> network;
|
std::unique_ptr<network::Network> network;
|
||||||
std::vector<std::string> basePacks;
|
std::vector<std::string> basePacks;
|
||||||
|
std::unique_ptr<gui::GUI> gui;
|
||||||
|
|
||||||
uint64_t frame = 0;
|
uint64_t frame = 0;
|
||||||
double lastTime = 0.0;
|
double lastTime = 0.0;
|
||||||
double delta = 0.0;
|
double delta = 0.0;
|
||||||
|
|
||||||
std::unique_ptr<gui::GUI> gui;
|
|
||||||
|
|
||||||
void loadControls();
|
void loadControls();
|
||||||
void loadSettings();
|
void loadSettings();
|
||||||
|
|||||||
@ -48,9 +48,6 @@ static std::filesystem::path toCanonic(std::filesystem::path path) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void EnginePaths::prepare() {
|
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)) {
|
if (!fs::is_directory(resourcesFolder)) {
|
||||||
throw std::runtime_error(
|
throw std::runtime_error(
|
||||||
resourcesFolder.u8string() + " is not a directory"
|
resourcesFolder.u8string() + " is not a directory"
|
||||||
@ -59,6 +56,10 @@ void EnginePaths::prepare() {
|
|||||||
if (!fs::is_directory(userFilesFolder)) {
|
if (!fs::is_directory(userFilesFolder)) {
|
||||||
fs::create_directories(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;
|
auto contentFolder = userFilesFolder / CONTENT_FOLDER;
|
||||||
if (!fs::is_directory(contentFolder)) {
|
if (!fs::is_directory(contentFolder)) {
|
||||||
fs::create_directories(contentFolder);
|
fs::create_directories(contentFolder);
|
||||||
|
|||||||
@ -368,7 +368,7 @@ bool scripting::on_block_interact(
|
|||||||
Player* player, const Block& block, const glm::ivec3& pos
|
Player* player, const Block& block, const glm::ivec3& pos
|
||||||
) {
|
) {
|
||||||
std::string name = block.name + ".interact";
|
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::pushivec_stack(L, pos);
|
||||||
lua::pushinteger(L, player->getId());
|
lua::pushinteger(L, player->getId());
|
||||||
return 4;
|
return 4;
|
||||||
@ -386,6 +386,7 @@ bool scripting::on_block_interact(
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void scripting::on_player_tick(Player* player, int tps) {
|
void scripting::on_player_tick(Player* player, int tps) {
|
||||||
|
|||||||
@ -14,5 +14,9 @@ namespace util {
|
|||||||
virtual void keepAlive(std::shared_ptr<void> ptr) {
|
virtual void keepAlive(std::shared_ptr<void> ptr) {
|
||||||
ptrs.push_back(ptr);
|
ptrs.push_back(ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual void clearKeepedObjects() {
|
||||||
|
ptrs.clear();
|
||||||
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user