diff --git a/src/Buildin/EcsDefaultWorldProvider.cs b/src/Buildin/EcsDefaultWorldProvider.cs index dcd6b34..4892e3f 100644 --- a/src/Buildin/EcsDefaultWorldProvider.cs +++ b/src/Buildin/EcsDefaultWorldProvider.cs @@ -3,5 +3,8 @@ namespace DCFApixels.DragonECS { [CreateAssetMenu(fileName = nameof(EcsDefaultWorldProvider), menuName = EcsConsts.FRAMEWORK_NAME + "/WorldProviders/" + nameof(EcsDefaultWorldProvider), order = 1)] - public class EcsDefaultWorldProvider : EcsWorldProvider { } + public class EcsDefaultWorldProvider : EcsWorldProvider + { + protected override EcsDefaultWorld BuildWorld(ConfigContainer configs) { return new EcsDefaultWorld(configs, WorldID); } + } } diff --git a/src/Buildin/EcsDefaultWorldSingletonProvider.cs b/src/Buildin/EcsDefaultWorldSingletonProvider.cs index cccf86b..fbd0b25 100644 --- a/src/Buildin/EcsDefaultWorldSingletonProvider.cs +++ b/src/Buildin/EcsDefaultWorldSingletonProvider.cs @@ -14,5 +14,6 @@ return _instance; } } + protected override EcsDefaultWorld BuildWorld(ConfigContainer configs) { return new EcsDefaultWorld(configs, WorldID); } } } diff --git a/src/Buildin/EcsWorldProvider.cs b/src/Buildin/EcsWorldProvider.cs index bf6d06f..45e2735 100644 --- a/src/Buildin/EcsWorldProvider.cs +++ b/src/Buildin/EcsWorldProvider.cs @@ -3,5 +3,8 @@ namespace DCFApixels.DragonECS { [CreateAssetMenu(fileName = nameof(EcsWorldProvider), menuName = EcsConsts.FRAMEWORK_NAME + "/WorldProviders/" + nameof(EcsWorldProvider), order = 1)] - public class EcsWorldProvider : EcsWorldProvider { } + public class EcsWorldProvider : EcsWorldProvider + { + protected override EcsWorld BuildWorld(ConfigContainer configs) { return new EcsWorld(configs, WorldID); } + } } diff --git a/src/Connectors/EcsWorldProvider.cs b/src/Connectors/EcsWorldProvider.cs index c9623a8..480291d 100644 --- a/src/Connectors/EcsWorldProvider.cs +++ b/src/Connectors/EcsWorldProvider.cs @@ -46,6 +46,10 @@ namespace DCFApixels.DragonECS { get { return _world == null; } } + public short WorldID + { + get { return _worldID; } + } public int EntitiesCapacity { get { return _entitiesCapacity; } @@ -89,7 +93,9 @@ namespace DCFApixels.DragonECS { if (_world == null || _world.IsDestroyed) { - Set(BuildWorld()); + EcsWorldConfig config = new EcsWorldConfig(_entitiesCapacity, _groupCapacity, _poolsCapacity, _poolComponentsCapacity, _poolRecycledComponentsCapacity); + ConfigContainer configs = new ConfigContainer().Set(config); + Set(BuildWorld(configs)); OnWorldCreated(_world); } return _world; @@ -119,12 +125,7 @@ namespace DCFApixels.DragonECS #endregion #region Events - protected virtual TWorld BuildWorld() - { - EcsWorldConfig config = new EcsWorldConfig(_entitiesCapacity, _groupCapacity, _poolsCapacity, _poolComponentsCapacity, _poolRecycledComponentsCapacity); - ConfigContainer configs = new ConfigContainer().Set(config); - return (TWorld)Activator.CreateInstance(typeof(TWorld), new object[] { configs, _worldID }); - } + protected abstract TWorld BuildWorld(ConfigContainer configs); protected virtual void OnWorldCreated(TWorld world) { } #endregion }