#if VCONTAINER_ECS_INTEGRATION using System; using Unity.Entities; using UnityEngine.LowLevel; namespace VContainer.Unity { public sealed class WorldInstanceProvider : IInstanceProvider { readonly string name; readonly Action initialization; public WorldInstanceProvider(string name, Action initialization = null) { this.name = name; this.initialization = initialization; } public object SpawnInstance(IObjectResolver resolver) { var world = new World(name); if (initialization != null) { initialization(world); } else { #if UNITY_2022_2_OR_NEWER world.CreateSystemManaged(); world.CreateSystemManaged(); world.CreateSystemManaged(); ScriptBehaviourUpdateOrder.RemoveWorldFromCurrentPlayerLoop(world); ScriptBehaviourUpdateOrder.AppendWorldToCurrentPlayerLoop(world); #else world.CreateSystem(); world.CreateSystem(); world.CreateSystem(); ScriptBehaviourUpdateOrder.RemoveWorldFromCurrentPlayerLoop(world); ScriptBehaviourUpdateOrder.AddWorldToCurrentPlayerLoop(world); #endif } return world; } } } #endif