38 lines
1.1 KiB
C++
38 lines
1.1 KiB
C++
#pragma once
|
|
|
|
#include <cstddef>
|
|
#include <faset/runtime/Runtime.hpp>
|
|
#include <faset/scripting/project.hpp>
|
|
#include <memory>
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
namespace faset::scripting {
|
|
|
|
struct LuaLimits {
|
|
std::size_t memoryBytes{16 * 1024 * 1024};
|
|
unsigned instructions{1'000'000};
|
|
};
|
|
|
|
// One sandboxed VM per module, isolated instance tables per entity/component.
|
|
// Behavior callbacks retain shared ownership of the VM until Runtime is destroyed.
|
|
class LuaModule {
|
|
public:
|
|
explicit LuaModule(const LuaProject& project, LuaLimits limits = {});
|
|
~LuaModule();
|
|
LuaModule(const LuaModule&) = delete;
|
|
LuaModule& operator=(const LuaModule&) = delete;
|
|
nlohmann::json schema() const;
|
|
// Validates Lua component configuration without creating instances or running callbacks.
|
|
// Pair with runtime::validate_scene_schemas for cross-language IDs and versions.
|
|
void validateScene(const nlohmann::json& scene) const;
|
|
void registerBehaviors(runtime::Runtime& runtime);
|
|
std::vector<std::string> takeLogs();
|
|
|
|
private:
|
|
struct Impl;
|
|
std::shared_ptr<Impl> impl_;
|
|
};
|
|
|
|
} // namespace faset::scripting
|