public static void GenerateShips(IEnumerable <ShipSystemModel> ships, IEnumerable <ShipDriver> drivers, Vector3 position, Quaternion rotation, Vector3 up, Vector3 right, Vector3 forward, DistributionCube cube, ICollection <ShipController> outGeneratedShips) { int shipsAmount = drivers.Count(); int[] shipsDistribution = Algs.Split(shipsAmount, Enumerable.Range(0, cube.cubesAmount).Select(i => UnityEngine.Random.value).ToArray()); int n = 0; var driver = drivers.GetEnumerator(); var ship = ships.GetEnumerator(); foreach (var pos in cube.Distribute(position, up, right, forward)) { for (int m = 0; m < shipsDistribution[n]; m++) { driver.MoveNext(); ship.MoveNext(); var oldShip = driver.Current.ship; var s = new CustomShipInitializerModel(ship.Current, driver.Current) .Init(pos + right * (20 * m), rotation); outGeneratedShips.Add(s); } n++; } }
IEnumerator <ShipController> InitShip() { var ships = GameResources.GetAllShips() .GroupBy(s => GameResources.GetShipHull(s.hull.hullName).shipClass) .Where(s => s.Key > 0 && s.Key < 4) .OrderBy(s => s.Key) .Select(s => s.ToArray()); begin: foreach (var model in ships) { foreach (var s in model) { var ship = new CustomShipInitializerModel(s, new FakeDriver()).Init(targetPosition.position, targetPosition.rotation); yield return(ship); } } goto begin; }