mirror of
https://github.com/MihailRis/voxelcore.git
synced 2026-10-13 06:51:51 +00:00
add app.terminate(handle)
This commit is contained in:
parent
8b2094c628
commit
b1e14a2944
2 changed files with 31 additions and 3 deletions
|
|
@ -16,6 +16,7 @@ inline constexpr bool ENGINE_DEBUG_BUILD = true;
|
||||||
|
|
||||||
inline const std::string ENGINE_VERSION_STRING = "0.32";
|
inline const std::string ENGINE_VERSION_STRING = "0.32";
|
||||||
|
|
||||||
|
inline constexpr uint MAX_SUBPROCESSES = 1;
|
||||||
inline constexpr uint MAX_SUBPROCESS_DEPTH = 2;
|
inline constexpr uint MAX_SUBPROCESS_DEPTH = 2;
|
||||||
|
|
||||||
/// @brief world regions format version
|
/// @brief world regions format version
|
||||||
|
|
|
||||||
|
|
@ -20,10 +20,12 @@
|
||||||
#include "window/Window.hpp"
|
#include "window/Window.hpp"
|
||||||
#include "world/Level.hpp"
|
#include "world/Level.hpp"
|
||||||
|
|
||||||
|
#include <array>
|
||||||
|
|
||||||
using namespace scripting;
|
using namespace scripting;
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
static std::unique_ptr<Process> sub_instance = nullptr;
|
static std::array<std::unique_ptr<Process>, MAX_SUBPROCESSES> processes;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @brief Check if content is loaded
|
/// @brief Check if content is loaded
|
||||||
|
|
@ -405,12 +407,36 @@ static int l_start_background_instance(lua::State* L) {
|
||||||
args.emplace_back("--project");
|
args.emplace_back("--project");
|
||||||
args.emplace_back(io::resolve(engine->getProject().path).u8string());
|
args.emplace_back(io::resolve(engine->getProject().path).u8string());
|
||||||
|
|
||||||
::sub_instance = platform::new_engine_instance(
|
int handle = -1;
|
||||||
|
for (int i = 0; i < ::processes.size(); i++) {
|
||||||
|
if (!::processes[i] || !::processes[i]->isActive()) {
|
||||||
|
handle = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (handle == -1) {
|
||||||
|
throw std::runtime_error("sub-processes limit exceeded");
|
||||||
|
}
|
||||||
|
::processes[handle] = platform::new_engine_instance(
|
||||||
std::move(args),
|
std::move(args),
|
||||||
outputPath.empty() ? "" : io::resolve(outputPath),
|
outputPath.empty() ? "" : io::resolve(outputPath),
|
||||||
true
|
true
|
||||||
);
|
);
|
||||||
return 0;
|
return lua::pushinteger(L, handle);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int l_terminate(lua::State* L) {
|
||||||
|
int handle = lua::tointeger(L, 1);
|
||||||
|
if (handle < 0 || handle >= ::processes.size()) {
|
||||||
|
throw std::runtime_error("invalid process handle");
|
||||||
|
}
|
||||||
|
auto& process = ::processes[handle];
|
||||||
|
if (process == nullptr) {
|
||||||
|
return lua::pushboolean(L, false);
|
||||||
|
}
|
||||||
|
bool active = process->isActive();
|
||||||
|
process.reset();
|
||||||
|
return lua::pushboolean(L, active);
|
||||||
}
|
}
|
||||||
|
|
||||||
const luaL_Reg applib[] = {
|
const luaL_Reg applib[] = {
|
||||||
|
|
@ -446,5 +472,6 @@ const luaL_Reg applib[] = {
|
||||||
{"create_memory_device", lua::wrap<l_create_memory_device>},
|
{"create_memory_device", lua::wrap<l_create_memory_device>},
|
||||||
{"start_debug_instance", lua::wrap<l_start_debug_instance>},
|
{"start_debug_instance", lua::wrap<l_start_debug_instance>},
|
||||||
{"start_background_instance", lua::wrap<l_start_background_instance>},
|
{"start_background_instance", lua::wrap<l_start_background_instance>},
|
||||||
|
{"terminate", lua::wrap<l_terminate>},
|
||||||
{nullptr, nullptr}
|
{nullptr, nullptr}
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue