示例#1
0
    public void AddEntrance(int relativePositionX, int relativePositionY, EDirection openFaceDirection)
    {
        var entrancePosition = new LevelGridVector2(relativePositionX, relativePositionY);
        var entrance         = new TileEntrance(entrancePosition, openFaceDirection);

        entrances.Add(entrance);
    }
示例#2
0
    private TileEntrance FindMatchedEntrance(TileEntrance entrance, LevelTile candidateTile)
    {
        foreach (var candidateEntrance in candidateTile.entrances)
        {
            if (TileEntrance.EntrancesFaceEachOther(entrance, candidateEntrance))
            {
                return(candidateEntrance);
            }
        }

        return(null);
    }
示例#3
0
    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
                   ));
    }
示例#4
0
    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);
        }
    }