using System; using System.Collections.Generic; namespace Robust.Shared.Map { [Virtual] internal class TileDefinitionManager : ITileDefinitionManager { protected readonly List TileDefs; private readonly Dictionary _tileNames; private readonly Dictionary _tileIds; /// /// Default Constructor. /// public TileDefinitionManager() { TileDefs = new List(); _tileNames = new Dictionary(); _tileIds = new Dictionary(); } public virtual void Initialize() { } public virtual void Register(ITileDefinition tileDef) { var name = tileDef.ID; if (_tileNames.ContainsKey(name)) { throw new ArgumentException("Another tile definition with the same name has already been registered.", nameof(tileDef)); } var id = checked((ushort) TileDefs.Count); tileDef.AssignTileId(id); TileDefs.Add(tileDef); _tileNames[name] = tileDef; _tileIds[tileDef] = id; } public ITileDefinition this[string name] => _tileNames[name]; public ITileDefinition this[int id] => TileDefs[id]; public int Count => TileDefs.Count; public IEnumerator GetEnumerator() { return TileDefs.GetEnumerator(); } System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { return GetEnumerator(); } } }