44 lines
No EOL
1.6 KiB
C#
44 lines
No EOL
1.6 KiB
C#
namespace GlobalClassLib;
|
|
|
|
public abstract class GlobalMapTile<TCon, TTile>(int id, (int x, int y) gridPosition)
|
|
where TCon : GlobalTileConnector<TTile, TCon>
|
|
where TTile : GlobalMapTile<TCon, TTile> { // TTile should be the inheriting class
|
|
public int Id { get; } = id;
|
|
public bool Lit { get; set; } = false;
|
|
public (int x, int y) GridPosition { get; private set; } = gridPosition;
|
|
|
|
private readonly List<TCon> connectors = new();
|
|
|
|
public void AddConnector(TCon connector) { // tile1 is ignored when provided
|
|
connector = connector.Clone();
|
|
connector.Tiles.tile1 = (TTile)this;
|
|
connectors.Add(connector);
|
|
connector.Tiles.tile2._AddConnectorNoRepeat(connector);
|
|
}
|
|
|
|
private void _AddConnectorNoRepeat(TCon connector) {
|
|
connectors.Add(connector);
|
|
}
|
|
|
|
public void AddConnectors(TCon[] connectors) =>
|
|
Array.ForEach(connectors, AddConnector);
|
|
|
|
public override string ToString() => $"[{Id}] -> {string.Join(", ", connectors.Select(c => $"[{c.OtherTile((TTile)this).Id}]"))}";
|
|
public override int GetHashCode() => Id.GetHashCode();
|
|
public string IdAsString => $"[{Id}]"; // debug
|
|
|
|
public TCon? GetConnector(int id) {
|
|
foreach (var con in connectors){
|
|
if (con.OtherTile((TTile)this).Id == id) return con;
|
|
}
|
|
return null;
|
|
}
|
|
public TCon? GetConnector(TTile tile) {
|
|
foreach (var con in connectors){
|
|
if (con.OtherTile((TTile)this) == tile) return con;
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public TCon[] GetAllConnectors() => connectors.ToArray();
|
|
} |