Скриптовая интеграция IgdrasilSceneSystem

Модули IgdrasilSceneSystem дают скриптам доступ к активной сцене: загрузка/выгрузка, работа с сущностями и системами сцены, события загрузки. Они дополняют ECS-модули (создание сущностей и компонентов), но сами по себе не создают компоненты.

Модули

IgdrasilEngine.Engine.Scripting.Modules.SceneManagement
- SceneModule         // scene API: загрузка, сущности, системы
- SceneEventsModule   // события загрузки/выгрузки сцен
- SceneModuleBundle   // регистрация scene-модулей

Быстрый старт

using IgdrasilEngine.Engine.Scripting.Lua;
using IgdrasilEngine.Engine.Scripting.Modules.ECS;
using IgdrasilEngine.Engine.Scripting.Modules.SceneManagement;

var engine = new LuaEngine();
ECSModuleBundle.RegisterModules<LuaModuleInterface>(engine, typeof(MyComponent).Assembly);
SceneModuleBundle.RegisterModules<LuaModuleInterface>(engine);

Scene Module (scene)

Все функции работают с SceneManager.Current и выбросят исключение, если сцена не загружена (кроме загрузочных вызовов).

Состояние сцены

Загрузка и выгрузка

Сущности сцены

Системы сцены

Scene Events Module (scene.events)

Примеры

Загрузка сцены и спавн сущности

local ecs = require("ecs")
local scene = require("scene")

scene.loadScene("Level1")
local player = ecs.createEntity("Player")
scene.addEntityToScene(player)

Добавление системы в активную сцену

local scene = require("scene")
local mySystem = createMySystem() -- создайте System в C# и передайте в скрипт
mySystem.IsActive = true
scene.addSystemToScene(mySystem)

События сцен

local scene = require("scene")
local events = require("scene.events")

local sub = events.onSceneLoaded(function(scn)
    print("Loaded: " .. (scene.getSceneName()))
end)

events.onSceneUnloaded(function(scn)
    print("Unloaded scene")
end)

-- отписка
events.offSceneLoaded(sub)