Example #1
0
    private void Fill(FleetPlacement fleet, ShipsInventory inventory)
    {
        foreach (ShipsInventory.ShipsCell item in inventory.Ships)
        {
            for (int i = 0; i < item.count; i++)
            {
                ShipOrientations direction = Random.Range(0, 2) == 0 ? ShipOrientations.Horizontal : ShipOrientations.Vertical;
                int length = item.ship.Length;

                var lines   = direction == ShipOrientations.Horizontal ? GetFreeHorizontalCells(length) : GetFreeVerticalCells(length);
                int basePos = GetRandomIndexFromLineList(lines);

                int listIndex = Random.Range(0, lines[basePos].lists.Count);
                var list      = lines[basePos].lists[listIndex];

                int secondPos = list[Random.Range(0, (list.Count - length) + 1)];

                FleetPlacement.ShipPlacement data = new FleetPlacement.ShipPlacement();
                data.Orientation = direction;
                data.Position    = direction == ShipOrientations.Horizontal ? new Vector2Int(secondPos, basePos) : new Vector2Int(basePos, secondPos);
                data.ShipData    = item.ship;

                fleet.Placements.Add(data);

                FillShipPosition(direction, length, direction == ShipOrientations.Horizontal ? secondPos : basePos, direction == ShipOrientations.Horizontal ? basePos : secondPos);
            }
        }
    }
Example #2
0
    private FleetPlacement CheckFleetPlacement(FleetPlacement fleet, Field field, ShipsInventory inventory)
    {
        if (fleet == null || fleet.Placements == null || fleet.Placements.Count == 0)
        {
            Placeholder holder = new Placeholder();
            fleet = holder.GeneratePlacement(field, inventory);
        }

        return(fleet);
    }
Example #3
0
    public FleetPlacement GeneratePlacement(Field field, ShipsInventory inventory)
    {
        _field  = field.FieldFilling;
        _width  = field.Size.x;
        _height = field.Size.y;

        FleetPlacement fleet = new FleetPlacement();

        Fill(fleet, inventory);

        return(fleet);
    }
Example #4
0
    public void Fill(FleetPlacement fleet)
    {
        foreach (FleetPlacement.ShipPlacement shipPlacement in fleet.Placements)
        {
            GameObject prefab = shipPlacement.Orientation == ShipOrientations.Horizontal ? shipPlacement.ShipData.HorizontalPrefab : shipPlacement.ShipData.VerticalPrefab;
            Ship       ship   = CreateShip(prefab);

            PutObjectToField(ship.CachedTransform, shipPlacement.Position.x, shipPlacement.Position.y);
            ship.Position = shipPlacement.Position;

            for (int i = 0; i < ship.Size.x; i++)
            {
                for (int j = 0; j < ship.Size.y; j++)
                {
                    this.FieldFilling[shipPlacement.Position.x + i, shipPlacement.Position.y + j] = FillTypes.Ship;
                }
            }
        }
    }