Скриптовая интеграция 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 и выбросят исключение, если сцена не загружена (кроме загрузочных вызовов).
Состояние сцены
getCurrentScene()— вернуть активную сцену или ошибка, если её нет.getSceneName()— имя активной сцены либо "no-scene".
Загрузка и выгрузка
loadScene(name)— синхронная загрузка по имени.loadSceneCopy(name)— загрузка копии сцены.loadSceneAsync(name, autoSwap)— асинхронная загрузка, возвращаетSceneLoadingStatus; приautoSwap=trueавтоматически активирует сцену после загрузки.unloadScene()— выгрузка текущей сцены.
Сущности сцены
getSceneEntities()— все сущности активной сцены.getActiveSceneEntities()— только активные сущности.findSceneEntity(name)— точный поиск по имени.findSceneEntities(pattern)— поиск по подстроке в имени.createSceneEntity(name)— создать и сразу добавить сущность в сцену.addEntityToScene(entity)— добавить существующую сущность.removeEntityFromScene(entity)— удалить сущность из сцены.
Системы сцены
getSceneSystems()— все системы активной сцены.getActiveSceneSystems()— только активные системы.addSystemToScene(system)— добавить систему в сцену.removeSystemFromScene(system)— удалить систему из сцены.
Scene Events Module (scene.events)
onSceneLoaded(callback)— подписка на загрузку сцены; callback получаетScene.offSceneLoaded(callback)— отписка.onSceneUnloaded(callback)— подписка на выгрузку сцены.offSceneUnloaded(callback)— отписка.
Примеры
Загрузка сцены и спавн сущности
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)