Files
RobustToolbox/SS14.Shared/Map/TileDefinitionManager.cs
Pieter-Jan Briers d7d0363cc3 Refactor tile IDs. (#778)
* Refactor tile IDs.

Tile IDs are now automatically assigned at runtime.
A mapping is also stored in map files to avoid compatibility issues.
Also removed tile prototypes. Content is now responsible for it.
This is so content can define its own data for tiles.

* Update map format specification.

* Fix tile placement.
2019-04-03 21:19:55 +02:00

65 lines
1.9 KiB
C#

using System;
using System.Linq;
using System.Collections.Generic;
using SS14.Shared.Interfaces.Map;
using SS14.Shared.IoC;
using SS14.Shared.Prototypes;
namespace SS14.Shared.Map
{
internal class TileDefinitionManager : ITileDefinitionManager
{
[Dependency]
IPrototypeManager PrototypeManager;
protected readonly List<ITileDefinition> TileDefs;
private readonly Dictionary<string, ITileDefinition> _tileNames;
private readonly Dictionary<ITileDefinition, ushort> _tileIds;
/// <summary>
/// Default Constructor.
/// </summary>
public TileDefinitionManager()
{
TileDefs = new List<ITileDefinition>();
_tileNames = new Dictionary<string, ITileDefinition>();
_tileIds = new Dictionary<ITileDefinition, ushort>();
}
public virtual void Initialize()
{
}
public virtual void Register(ITileDefinition tileDef)
{
var name = tileDef.Name;
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<ITileDefinition> GetEnumerator()
{
return TileDefs.GetEnumerator();
}
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
}