using System; using Cysharp.Threading.Tasks; using IServiceProvider = DanieleMarotta.RiversongCodeShowcase.IServiceProvider; namespace DanieleMarotta.RiversongCodeShowcase { [GameSystemGroup(typeof(CommonServicesSystemGroup))] public class CommonServicesSystem : GameSystem, IServiceProvider, IInitializable, IDisposable { [InjectService] private GameConfig _config; [InjectService] private World _world; private SignalBus _signalBus; private TileSpace _tileSpace; private MaterialReplacementCache _materialReplacementCache; public CommonServicesSystem(IServiceLocator serviceLocator) : base(serviceLocator) { } public void RegisterServices(IServiceLocator serviceLocator) { serviceLocator.RegisterService(new EntityCollection()); serviceLocator.RegisterService(new EntityCache()); _signalBus = new SignalBus(); serviceLocator.RegisterService(_signalBus); _tileSpace = new TileSpace(); serviceLocator.RegisterService(_tileSpace); serviceLocator.RegisterService(new PoolingService()); _materialReplacementCache = new MaterialReplacementCache(); serviceLocator.RegisterService(_materialReplacementCache); } public UniTask InitializeAsync() { _tileSpace.TileSize = _config.GeneralSettings.TileSize; _tileSpace.World = _world; return UniTask.CompletedTask; } public void Dispose() { _signalBus?.Dispose(); _signalBus = null; _materialReplacementCache = null; } } }