{\r
var ships = FilterByShipTypes(\r
_mode == "修復" ? sniffer.RepairList : FilterByGroup(sniffer.ShipList, _mode),\r
- config.ShipCategories);\r
+ config.ShipCategories).ToArray();\r
var order = _mode == "修復" ? ListForm.SortOrder.Repair : config.SortOrder;\r
- _shipList = ships.OrderBy(s => s, new CompareShip(false, order)).ToArray();\r
+ if (!config.ShipType)\r
+ {\r
+ _shipList = ships.OrderBy(s => s, new CompareShip(false, order)).ToArray();\r
+ return;\r
+ }\r
+ _shipList = ships.Select(ship => new {Id = ship.Spec.ShipType, Name = ship.Spec.ShipTypeName})\r
+ .Distinct().Select(type => new ShipStatus\r
+ {\r
+ Spec = new ShipSpec { Name = type.Name, ShipType = type.Id},\r
+ Level = 1000,\r
+ }).Concat(ships).OrderBy(ship => ship, new CompareShip(true, order)).ToArray();\r
}\r
\r
private IEnumerable<ShipStatus> FilterByGroup(IEnumerable<ShipStatus> ships, string group)\r
return from s in ships where GroupSettings[g].Contains(s.Id) select s;\r
}\r
\r
- private readonly int[][] _shipTypeIds =\r
+ private static readonly int[][] ShipTypeIds =\r
{\r
new[] // 戦艦\r
{\r
- 10, // 航空戦艦\r
+ 8, // 巡洋戦艦\r
9, // 戦艦\r
- 8 // 巡洋戦艦\r
+ 10 // 航空戦艦\r
},\r
new[] // 空母\r
{\r
},\r
new[] // 重巡\r
{\r
- 6, // 航空巡洋艦\r
- 5 // 重巡洋艦\r
+ 5, // 重巡洋艦\r
+ 6 // 航空巡洋艦\r
},\r
new[] // 軽巡\r
{\r
- 21, // 練習巡洋艦\r
+ 3, // 軽巡洋艦\r
4, // 重雷装巡洋艦\r
- 3 // 軽巡洋艦\r
+ 21 // 練習巡洋艦\r
},\r
new[] // 駆逐\r
{\r
},\r
new[] // 潜水\r
{\r
- 14, // 潜水空母\r
- 13 // 潜水艦\r
+ 13, // 潜水艦\r
+ 14 // 潜水空母\r
},\r
new[] // 補助\r
{\r
- 22, // 補給艦\r
- 20, // 潜水母艦\r
- 19, // 工作艦\r
+ 16, // 水上機母艦\r
17, // 揚陸艦\r
- 16 // 水上機母艦\r
+ 19, // 工作艦\r
+ 20, // 潜水母艦\r
+ 22 // 補給艦\r
}\r
};\r
\r
+ private static readonly int[] ShipTypeSortIds = CreateShipTypeSortIds();\r
+\r
+ private static int[] CreateShipTypeSortIds()\r
+ {\r
+ var ids = ShipTypeIds.SelectMany(x => x).ToArray();\r
+ var res = new int[ids.Max() + 1];\r
+ for (var i = 0; i < ids.Length; i++)\r
+ res[ids[i]] = i;\r
+ return res;\r
+ }\r
+\r
private IEnumerable<ShipStatus> FilterByShipTypes(IEnumerable<ShipStatus> ships, ShipCategory shipTypes)\r
{\r
- var ids = Enumerable.Range(0, _shipTypeIds.Length)\r
+ var ids = Enumerable.Range(0, ShipTypeIds.Length)\r
.Where(type => ((int)shipTypes & (1 << type)) != 0)\r
- .SelectMany(type => _shipTypeIds[type]).ToArray();\r
+ .SelectMany(type => ShipTypeIds[type]).ToArray();\r
return ships.Where(ship => ids.Contains(ship.Spec.ShipType));\r
}\r
\r
if (_shipType)\r
{\r
if (a.Spec.ShipType != b.Spec.ShipType)\r
- return a.Spec.ShipType - b.Spec.ShipType;\r
+ return ShipTypeSortIds[a.Spec.ShipType] - ShipTypeSortIds[b.Spec.ShipType];\r
if (a.Level != b.Level)\r
{\r
if (a.Level == 1000)\r
return b.Level - a.Level;\r
if (_order == ListForm.SortOrder.ExpToNextDescend)\r
return a.Level - b.Level;\r
- if (!_shipType) // Condが同じかSortOrder.Noneで艦種なし\r
- return b.Level - a.Level;\r
+ return b.Level - a.Level;\r
}\r
if (a.ExpToNext != b.ExpToNext)\r
{\r
CreateRepairLabels(i);\r
CreateShipLabels(i);\r
}\r
- for (var i = 0; i * LineHeight < Height; i++)\r
- {\r
- _labelPanelList[i].Visible = InShipStatus(_mode);\r
- _groupingPanelList[i].Visible = _mode == "分類";\r
- _repairPanelList[i].Visible = _mode == "修復";\r
- }\r
SetupScrollBar();\r
}\r
\r
panel.Controls.AddRange(cb);\r
// ReSharper restore CoVariantArrayConversion\r
Controls.Add(panel);\r
+ var unused = panel.Handle; // create handle\r
foreach (var label in labels)\r
{\r
label.Scale();\r
// ReSharper disable once CoVariantArrayConversion\r
panel.Controls.AddRange(labels);\r
Controls.Add(panel);\r
+ var unused = panel.Handle; // create handle\r
foreach (var label in labels)\r
{\r
label.Scale();\r
// ReSharper disable once CoVariantArrayConversion\r
panel.Controls.AddRange(labels);\r
Controls.Add(panel);\r
+ var unused = panel.Handle; // create handle\r
foreach (var label in labels)\r
{\r
label.Scale();\r
{\r
for (var i = 0; i < (Height + LineHeight - 1) / LineHeight; i++)\r
{\r
+ HidePanels(i);\r
+ if (i + ScrollBar.Value >= _shipList.Length)\r
+ continue;\r
if (InShipStatus(_mode))\r
SetShipStatus(i);\r
if (_mode == "分類")\r
}\r
}\r
\r
+ private void HidePanels(int i)\r
+ {\r
+ _labelPanelList[i].Visible = _groupingPanelList[i].Visible = _repairPanelList[i].Visible = false;\r
+ }\r
+\r
private bool InShipStatus(string mode) => Array.Exists(new[] {"全艦", "A", "B", "C", "D"}, x => mode == x);\r
\r
private void SetShipStatus(int i)\r
{\r
- var panel = _labelPanelList[i];\r
- if (i + ScrollBar.Value >= _shipList.Length)\r
- {\r
- panel.Visible = false;\r
- return;\r
- }\r
var s = _shipList[i + ScrollBar.Value];\r
var labels = _labelList[i];\r
if (s.Level == 1000) // 艦種の表示\r
labels[3].SetExpToNext(s);\r
labels[4].SetName(s, ShipNameWidth.ShipList);\r
labels[5].SetFleet(s);\r
- panel.Visible = true;\r
+ _labelPanelList[i].Visible = true;\r
}\r
\r
private void SetShipType(int i)\r
\r
private void SetGrouping(int i)\r
{\r
- var panel = _groupingPanelList[i];\r
- if (i + ScrollBar.Value >= _shipList.Length)\r
- {\r
- panel.Visible = false;\r
- _labelPanelList[i].Visible = false;\r
- return;\r
- }\r
var s = _shipList[i + ScrollBar.Value];\r
var labels = _groupingLabelList[i];\r
if (s.Level == 1000)\r
{\r
- panel.Visible = false;\r
SetShipType(i);\r
return;\r
}\r
var cb = _checkBoxesList[i];\r
for (var j = 0; j < cb.Length; j++)\r
cb[j].Checked = GroupSettings[j].Contains(s.Id);\r
- panel.Visible = true;\r
+ _groupingPanelList[i].Visible = true;\r
}\r
\r
private void SetRepairList(int i)\r
{\r
- var panel = _repairPanelList[i];\r
- if (i + ScrollBar.Value >= _shipList.Length)\r
- {\r
- panel.Visible = false;\r
- _labelPanelList[i].Visible = false;\r
- return;\r
- }\r
var s = _shipList[i + ScrollBar.Value];\r
if (s.Level == 1000)\r
{\r
- panel.Visible = false;\r
SetShipType(i);\r
return;\r
}\r
labels[3].Text = s.RepairTimePerHp.ToString(@"mm\:ss");\r
labels[4].SetName(s, ShipNameWidth.RepairListFull);\r
labels[5].SetFleet(s);\r
- panel.Visible = true;\r
+ _repairPanelList[i].Visible = true;\r
}\r
\r
public event Action HpLabelClick;\r
\r
public void ShowShip(int id)\r
{\r
+ if (!ScrollBar.Visible)\r
+ return;\r
var i = Array.FindIndex(_shipList, s => s.Id == id);\r
if (i == -1)\r
return;\r