コード例 #1
0
    public override void AddWalls(WallsSpecification spec, FloorSpecification floorSpecification)
    {
        var width  = floorSpecification.FloorPresenceArray.GetLength(0);
        var height = floorSpecification.FloorPresenceArray.GetLength(1);

        for (var y = 0; y < height; y++)
        {
            for (int x = 0; x < width; x++)
            {
                if (floorSpecification.FloorPresenceArray[x, y])
                {
                    spec.AddWallDirection(new Vector2Int(x, y), WallDirection.Left, false);
                    break;
                }
            }
        }

        for (var y = 0; y < height; y++)
        {
            for (int x = width - 1; x >= 0; x--)
            {
                if (floorSpecification.FloorPresenceArray[x, y])
                {
                    spec.AddWallDirection(new Vector2Int(x, y), WallDirection.Right, false);
                    break;
                }
            }
        }

        for (int x = 0; x < width; x++)
        {
            for (var y = 0; y < height; y++)
            {
                if (floorSpecification.FloorPresenceArray[x, y])
                {
                    spec.AddWallDirection(new Vector2Int(x, y), WallDirection.Down, false);
                    break;
                }
            }
        }

        for (int x = 0; x < width; x++)
        {
            for (var y = height - 1; y >= 0; y--)
            {
                if (floorSpecification.FloorPresenceArray[x, y])
                {
                    spec.AddWallDirection(new Vector2Int(x, y), WallDirection.Up, false);
                    break;
                }
            }
        }
    }
コード例 #2
0
ファイル: Program.cs プロジェクト: lucianorbc/helpers
        public static void Main()
        {
            Console.WriteLine($"Specification Demo\n\n\n");

            House house = HouseSpecification.Initialize()
                          .WithAddress("5th Av, New York")
                          .WithFloor(FloorSpecification.Initialize()
                                     .WithTiles(12))
                          .WithWalls(WallsSpecification.Initialize()
                                     .WithWindows(12))
                          .WithRoof(RoofSpecification.Initialize()
                                    .HasRoofTiles(12)
                                    .HasColor("Red"))
                          .Validate()
                          .Build();

            Console.WriteLine($"We just built an house! {house.ToString()}");
        }
コード例 #3
0
    private void ClearOutBlackHoleArea(FloorSpecification floorSpecification, WallsSpecification wallsSpecification, PropsSpecification propsSpecification)
    {
        var size   = floorSpecification.Size;
        var center = size / 2;

        for (int x = 0; x < size.x; x++)
        {
            for (int y = 0; y < size.y; y++)
            {
                var distanceToCenter = Vector2.Distance(new Vector2(x, y), center);
                if (distanceToCenter < _blackHoleAreaSize)
                {
                    floorSpecification.FloorPresenceArray[x, y] = true;
                    wallsSpecification.EmptyWalls(new Vector2Int(x, y));
                    propsSpecification.SetDefinition(new Vector2Int(x, y), null);
                }
            }
        }
    }
コード例 #4
0
    private void TryAddingWall(Vector2Int coords, WallDirection direction, WallsSpecification wallsSpecification,
                               FloorSpecification floorSpecification)
    {
        Vector2Int additionalCoordOffset;

        switch (direction)
        {
        case WallDirection.Up:
            additionalCoordOffset = new Vector2Int(0, 1);
            break;

        case WallDirection.Down:
            additionalCoordOffset = new Vector2Int(0, -1);
            break;

        case WallDirection.Left:
            additionalCoordOffset = new Vector2Int(-1, 0);
            break;

        case WallDirection.Right:
            additionalCoordOffset = new Vector2Int(1, 0);
            break;

        default:
            throw new ArgumentOutOfRangeException(nameof(direction), direction, null);
        }

        var offsetedCoords = coords + additionalCoordOffset;

        if (floorSpecification.FloorPresenceArray[coords.x, coords.y] || (
                offsetedCoords.x >= 0 && offsetedCoords.y >= 0 && offsetedCoords.x < floorSpecification.Size.x &&
                offsetedCoords.y < floorSpecification.Size.y &&
                floorSpecification.FloorPresenceArray[offsetedCoords.x, offsetedCoords.y]
                ))
        {
            wallsSpecification.AddWallDirection(coords, direction, true);
        }
    }
コード例 #5
0
    public override void AddWalls(WallsSpecification specification, FloorSpecification floorSpecification)
    {
        var size = floorSpecification.Size;

        var start = ClampCoords(floorSpecification.Size, new Vector2Int(Mathf.RoundToInt(_startPoint.x * size.x), Mathf.RoundToInt(_startPoint.y * size.y)));
        var end   = ClampCoords(floorSpecification.Size, new Vector2Int(Mathf.RoundToInt(_endPoint.x * size.x), Mathf.RoundToInt(_endPoint.y * size.y)));

        var points = GetPointsOnLine(start.x, start.y, end.x, end.y).ToList();

        for (int i = 0; i < points.Count - 1; i++)
        {
            var p1 = points[i];
            var p2 = points[i + 1];

            if (p1.x == p2.x)
            {
                //do nothing
            }
            else if (p1.x == p2.x)
            {
                TryAddingWall(new Vector2Int(p1.x, p1.y), WallDirection.Up, specification, floorSpecification);
            }
            else if (p1.x - 1 == p2.x)
            {
                if (p1.y <= p2.y)
                {
                    TryAddingWall(new Vector2Int(p1.x, p1.y), WallDirection.Up, specification, floorSpecification);
                }
                else
                {
                    TryAddingWall(new Vector2Int(p1.x, p1.y - 1), WallDirection.Up, specification, floorSpecification);
                }
            }
            else if (p1.x + 1 == p2.x)
            {
                if (p1.y <= p2.y)
                {
                    TryAddingWall(new Vector2Int(p1.x + 1, p1.y), WallDirection.Up, specification, floorSpecification);
                }
                else
                {
                    TryAddingWall(new Vector2Int(p1.x, p1.y - 1), WallDirection.Up, specification, floorSpecification);
                }
            }

            else
            {
                MyAssert.Fail($"x delta is too big {p1} {p2}");
            }

            if (p1.y == p2.y)
            {
                //do nothing
            }
            else if (p1.y + 1 == p2.y)
            {
                TryAddingWall(new Vector2Int(p1.x, p1.y), WallDirection.Right, specification, floorSpecification);
            }
            else if (p1.y - 1 == p2.y)
            {
                TryAddingWall(new Vector2Int(p1.x, p1.y), WallDirection.Right, specification, floorSpecification);
            }
            else
            {
                MyAssert.Fail($"y delta is too big {p1} {p2}");
            }
        }
    }
コード例 #6
0
 public abstract void AddWalls(WallsSpecification specification, FloorSpecification floorSpecification);