59 lines
1.8 KiB
C#
59 lines
1.8 KiB
C#
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<IEntityCollection>(new EntityCollection());
|
|
serviceLocator.RegisterService<IEntityCache>(new EntityCache());
|
|
|
|
_signalBus = new SignalBus();
|
|
serviceLocator.RegisterService<ISignalBus>(_signalBus);
|
|
|
|
_tileSpace = new TileSpace();
|
|
serviceLocator.RegisterService<ITileSpace>(_tileSpace);
|
|
|
|
serviceLocator.RegisterService<IPoolingService>(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;
|
|
}
|
|
}
|
|
}
|