public void AddEntrance(int relativePositionX, int relativePositionY, EDirection openFaceDirection) { var entrancePosition = new LevelGridVector2(relativePositionX, relativePositionY); var entrance = new TileEntrance(entrancePosition, openFaceDirection); entrances.Add(entrance); }
private TileEntrance FindMatchedEntrance(TileEntrance entrance, LevelTile candidateTile) { foreach (var candidateEntrance in candidateTile.entrances) { if (TileEntrance.EntrancesFaceEachOther(entrance, candidateEntrance)) { return(candidateEntrance); } } return(null); }
private LevelGridVector2 FindPositionToAlignTileToEntrance(TileEntrance candidateEntrance, TileEntrance matchedEntrance) { var absoluteEntrancePositionX = position.X + candidateEntrance.RelativePosition.X; var absoluteEntrancePositionY = position.Y + candidateEntrance.RelativePosition.Y; var positionToAlignNewPieceX = absoluteEntrancePositionX - matchedEntrance.RelativePosition.X; var positionToAlignNewPieceY = absoluteEntrancePositionY - matchedEntrance.RelativePosition.Y; return(new LevelGridVector2( positionToAlignNewPieceX, positionToAlignNewPieceY )); }
public static bool EntrancesFaceEachOther(TileEntrance t1, TileEntrance t2) { switch (t1.OpenFaceDirection) { case EDirection.North when t2.OpenFaceDirection == EDirection.South: case EDirection.South when t2.OpenFaceDirection == EDirection.North: case EDirection.West when t2.OpenFaceDirection == EDirection.East: case EDirection.East when t2.OpenFaceDirection == EDirection.West: return(true); default: return(false); } }