using System; using XGame.Framework.Quality; using XGame.Framework.Time; using XGame.Framework.UI; namespace XGame.Framework.Map { public sealed class MapContext : IContext, IDisposable { public IQualityModule Quality { get; private set; } private ITimeModule _timeModule; private ITimeProxy _timeProxy; public ITimeProxy Time => _timeProxy ?? (_timeProxy = new TimeProxy(_timeModule)); public IMapModule Map { get; private set; } public IUIModule UI { get; private set; } /// /// 资源加载模块,需要时才创建 /// private IMapAssetModule _assetModule; public IMapAssetModule Asset => _assetModule ?? (_assetModule = new MapAssetModule(this)); public MapContext(IQualityModule quality, ITimeModule time, IMapModule map, IUIModule ui) { Quality = quality; _timeModule = time; Map = map; UI = ui; } public MapContext Clone() { return new MapContext(Quality, _timeModule, Map, UI); } /// /// 取消定时器、清理资源加载监听等 /// public void Clear() { _timeProxy?.CancelAll(); _assetModule?.StopAllAsyncs(); } void IDisposable.Dispose() { Quality = null; _timeModule = null; Map = null; _timeProxy?.CancelAll(); _timeProxy = null; (_assetModule as IDisposable)?.Dispose(); _assetModule = null; } } public interface IMapContextSetter { MapContext Context { set; } } }