namespace GlobalClassLib; public abstract class GlobalMapTile where TCon : GlobalTileConnector where TTile : GlobalMapTile { // TTile should be the inheriting class public int Id { get; private set; } public bool Lit { get; set; } = false; private List connectors = new(); public GlobalMapTile(int id) { Id = id; } public void AddConnector(TCon connector) { // tile1 is ignored when provided connector.Tiles.tile1 = (TTile)this; connectors.Add(connector); connector.Tiles.tile2._AddConnectorNoRepeat(connector.Clone()); // connectors.Add(new TCon(this, tile, type)); // tile.connectors.Add(new GlobalTileConnector(tile, this, type)); } private void _AddConnectorNoRepeat(TCon connector) { (connector.Tiles.tile1, connector.Tiles.tile2) = (connector.Tiles.tile2, connector.Tiles.tile1); connectors.Add(connector); } public void AddConnectors(TCon[] connectors) => Array.ForEach(connectors, AddConnector); public override string ToString() => $"{PositionAsString} -> {string.Join(", ", connectors.Select(c => c.Tiles.Item2.PositionAsString))}"; public string PositionAsString => $"[{Id}]"; // for debug purposes public TCon? GetConnector(int id) { foreach (var con in connectors){ if (con.Tiles.Item2.Id == id) return con; } return null; } public TCon[] GetAllConnectors() => connectors.ToArray(); public static int CoordsToId(int x, int y) => x * 5 + y; public static (int, int) IdToCoords(int id) => (id % 5, id / 5); }