コード例 #1
0
        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);
        }
コード例 #2
0
        private void AddShipWithUpgradesPanel(SquadListShip ship)
        {
            ShipWithUpgradesPanelInfo shipWithUpgradesPanel = new ShipWithUpgradesPanelInfo(ship);

            ShipWithUpgradesPanels.Add(shipWithUpgradesPanel);
        }