43 lines
1.6 KiB
C#
43 lines
1.6 KiB
C#
|
|
namespace GlobalClassLib;
|
||
|
|
|
||
|
|
public abstract class GlobalMapTile<TCon, TTile> where TCon : GlobalTileConnector<TTile, TCon> where TTile : GlobalMapTile<TCon, TTile> { // TTile should be the inheriting class
|
||
|
|
public int Id { get; private set; }
|
||
|
|
public bool Lit { get; set; } = false;
|
||
|
|
|
||
|
|
private List<TCon> 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);
|
||
|
|
}
|