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); } } }
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); }
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); }
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; } } } }