namespace GlobalClassLib; public abstract class GlobalMapTile(int id, (int x, int y) gridPosition) where TCon : GlobalTileConnector where TTile : GlobalMapTile { // 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 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(); }