Files
TheDeclineOfWarriors/Packages/jp.hadashikick.vcontainer/Runtime/Unity/InstanceProviders/WorldInstanceProvider.cs
T
2026-04-07 04:51:37 +07:00

49 lines
1.5 KiB
C#

#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<World> initialization;
public WorldInstanceProvider(string name, Action<World> 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<InitializationSystemGroup>();
world.CreateSystemManaged<SimulationSystemGroup>();
world.CreateSystemManaged<PresentationSystemGroup>();
ScriptBehaviourUpdateOrder.RemoveWorldFromCurrentPlayerLoop(world);
ScriptBehaviourUpdateOrder.AppendWorldToCurrentPlayerLoop(world);
#else
world.CreateSystem<InitializationSystemGroup>();
world.CreateSystem<SimulationSystemGroup>();
world.CreateSystem<PresentationSystemGroup>();
ScriptBehaviourUpdateOrder.RemoveWorldFromCurrentPlayerLoop(world);
ScriptBehaviourUpdateOrder.AddWorldToCurrentPlayerLoop(world);
#endif
}
return world;
}
}
}
#endif