private Dictionary <ShipWithUpgradesPanelInfo, int> GetArrangeShipsWithUpgradesIntoRowNumbers() { Dictionary <ShipWithUpgradesPanelInfo, int> result = new Dictionary <ShipWithUpgradesPanelInfo, int>(); bool isAddShipPanelVisible = AddShipButtonPanel != null; ShipWithUpgradesPanelInfo maxSizePanel = ShipWithUpgradesPanels.Find(n => n.Size.x == ShipWithUpgradesPanels.Max(m => m.Size.x)); result.Add(maxSizePanel, 1); float fullSingleRowWidth = ShipWithUpgradesPanels.Sum(n => n.Size.x); if (isAddShipPanelVisible) { fullSingleRowWidth += AddShipButtonPanel.Size.x; } float difference = Mathf.Abs(fullSingleRowWidth - maxSizePanel.Size.x - maxSizePanel.Size.x); bool finished = false; while (!finished) { List <ShipWithUpgradesPanelInfo> shipPanelsNotProcessed = ShipWithUpgradesPanels.Where(n => !result.ContainsKey(n)).ToList(); ShipWithUpgradesPanelInfo minSizePanel = shipPanelsNotProcessed.Find(n => n.Size.x == shipPanelsNotProcessed.Min(m => m.Size.x)); if (minSizePanel == null) { return(result); } float firstRowWidth = result.Where(n => n.Value == 1).Sum(n => n.Key.Size.x) + minSizePanel.Size.x; float secondRowWidth = fullSingleRowWidth - result.Where(n => n.Value == 1).Sum(n => n.Key.Size.x) - minSizePanel.Size.x; float newDifference = Mathf.Abs(firstRowWidth - secondRowWidth); if (newDifference > difference) { foreach (ShipWithUpgradesPanelInfo panel in shipPanelsNotProcessed) { if (!result.ContainsKey(panel)) { result.Add(panel, 2); } } finished = true; } else { result.Add(minSizePanel, 1); difference = newDifference; } } return(result); }
private void AddShipWithUpgradesPanel(SquadListShip ship) { ShipWithUpgradesPanelInfo shipWithUpgradesPanel = new ShipWithUpgradesPanelInfo(ship); ShipWithUpgradesPanels.Add(shipWithUpgradesPanel); }