OSDN Git Service

艦娘の装備の表示に装備の種類を表す色を付ける
authorKazuhiro Fujieda <fujieda@users.sourceforge.jp>
Sat, 18 Apr 2015 10:35:12 +0000 (19:35 +0900)
committerKazuhiro Fujieda <fujieda@users.sourceforge.jp>
Wed, 22 Apr 2015 10:56:24 +0000 (19:56 +0900)
KancolleSniffer/ItemInfo.cs
KancolleSniffer/ShipListForm.cs

index 9a8260a..e134f70 100644 (file)
@@ -17,6 +17,7 @@
 \r
 using System;\r
 using System.Collections.Generic;\r
+using System.Drawing;\r
 using System.Linq;\r
 using System.Web;\r
 \r
@@ -28,6 +29,7 @@ namespace KancolleSniffer
         public string Name;\r
         public int Type;\r
         public string TypeName;\r
+        public int IconType;\r
         public int AntiAir;\r
         public int LoS;\r
 \r
@@ -97,6 +99,76 @@ namespace KancolleSniffer
                 return false;\r
             }\r
         }\r
+\r
+        public Color Color\r
+        {\r
+            get\r
+            {\r
+                switch (IconType)\r
+                {\r
+                    case 1:\r
+                    case 2:\r
+                    case 3: // 主砲\r
+                    case 13: // 徹甲弾\r
+                        return Color.FromArgb(209, 89, 89);\r
+                    case 4: // 副砲\r
+                        return Color.FromArgb(253, 233, 0);\r
+                    case 5: // 魚雷\r
+                        return Color.FromArgb(88, 134, 170);\r
+                    case 6: // 艦戦\r
+                        return Color.FromArgb(93, 179, 108);\r
+                    case 7: // 艦爆\r
+                        return Color.FromArgb(223, 102, 102);\r
+                    case 8: // 艦攻\r
+                        return Color.FromArgb(95, 173, 234);\r
+                    case 9: // 艦偵\r
+                        return Color.FromArgb(254, 191, 0);\r
+                    case 10: // 水上機\r
+                        return Color.FromArgb(142, 203, 152);\r
+                    case 11: // 電探\r
+                        return Color.FromArgb(231, 153, 53);\r
+                    case 12: // 三式弾\r
+                        return Color.FromArgb(69, 175, 88);\r
+                    case 14: // 応急修理要員\r
+                        return Color.FromArgb(254, 254, 254);\r
+                    case 15: // 機銃\r
+                    case 16: // 高角砲\r
+                        return Color.FromArgb(102, 204, 118);\r
+                    case 17: // 爆雷\r
+                    case 18: // ソナー\r
+                        return Color.FromArgb(126, 203, 215);\r
+                    case 19: // 缶\r
+                        return Color.FromArgb(254, 195, 77);\r
+                    case 20: // 大発\r
+                        return Color.FromArgb(154, 163, 90);\r
+                    case 21: // オートジャイロ\r
+                        return Color.FromArgb(99, 203, 115);\r
+                    case 22: // 対潜哨戒機\r
+                        return Color.FromArgb(125, 205, 217);\r
+                    case 23: // 追加装甲\r
+                        return Color.FromArgb(152, 124, 172);\r
+                    case 24: // 探照灯\r
+                    case 27: // 照明弾\r
+                        return Color.FromArgb(254, 155, 0);\r
+                    case 25: // ドラム缶\r
+                        return Color.FromArgb(161, 161, 160);\r
+                    case 26: // 艦艇修理施設\r
+                        return Color.FromArgb(175, 156, 126);\r
+                    case 28: // 司令部施設\r
+                        return Color.FromArgb(204, 172, 252);\r
+                    case 29: // 航空要員\r
+                        return Color.FromArgb(206, 166, 108);\r
+                    case 30: // 高射装置\r
+                        return Color.FromArgb(137, 153, 77);\r
+                    case 31: // 対地装備\r
+                        return Color.FromArgb(253, 49, 49);\r
+                    case 32: // 水上艦要員\r
+                        return Color.FromArgb(188, 238, 155);\r
+                    default:\r
+                        return SystemColors.Control;\r
+                }\r
+            }\r
+        }\r
     }\r
 \r
     public class ItemStatus\r
@@ -208,6 +280,7 @@ namespace KancolleSniffer
                     Name = (string)entry.api_name,\r
                     Type = (int)entry.api_type[2],\r
                     TypeName = dict[(int)entry.api_type[2]],\r
+                    IconType = (int)entry.api_type[3],\r
                     AntiAir = (int)entry.api_tyku,\r
                     LoS = (int)entry.api_saku\r
                 };\r
index 1f20c56..6910ac2 100644 (file)
@@ -46,6 +46,7 @@ namespace KancolleSniffer
         private readonly HashSet<int>[] _groupSettings = new HashSet<int>[GroupCount];\r
         private TreeNode _itemTreeNode;\r
         private ItemStatus[] _prevItemList;\r
+        private EquipColumn[] _equipList;\r
 \r
         public ShipListForm(Sniffer sniffer, Config config)\r
         {\r
@@ -61,15 +62,21 @@ namespace KancolleSniffer
             if (InItemList())\r
             {\r
                 HideShipLabels();\r
+                HideEquipLabels();\r
                 if (CreateItemNodes())\r
                     SetTreeViewItem();\r
             }\r
+            else if (InEquip())\r
+            {\r
+                HideShipLabels();\r
+                CreateEquip();\r
+                CreateEquipLabels();\r
+                SetEquipLabels();\r
+            }\r
             else\r
             {\r
-                if (InEquip())\r
-                    CreateEquip();\r
-                else\r
-                    CreateShipList();\r
+                HideEquipLabels();\r
+                CreateShipList();\r
                 CreateListLabels();\r
                 SetShipLabels();\r
             }\r
@@ -94,17 +101,31 @@ namespace KancolleSniffer
             _shipList = ships.Concat(types).OrderBy(s => s, new CompareShip(true, InRepairList())).ToArray();\r
         }\r
 \r
+        private class EquipColumn\r
+        {\r
+            public string Fleet { get; set; }\r
+            public string Ship { get; set; }\r
+            public string Equip { get; set; }\r
+            public Color Color { get; set; }\r
+\r
+            public EquipColumn()\r
+            {\r
+                Fleet = Ship = Equip = "";\r
+                Color = DefaultBackColor;\r
+            }\r
+        }\r
+\r
         private void CreateEquip()\r
         {\r
-            var list = new List<ShipStatus>();\r
+            var list = new List<EquipColumn>();\r
             var fleet = new[] {"第一艦隊", "第二艦隊", "第三艦隊", "第四艦隊"};\r
             for (var i = 0; i < fleet.Length; i++)\r
             {\r
-                list.Add(new ShipStatus {Spec = new ShipSpec {Name = fleet[i]}, Level = 1000});\r
+                list.Add(new EquipColumn {Fleet = fleet[i]});\r
                 foreach (var s in _sniffer.GetShipStatuses(i))\r
                 {\r
                     s.Fleet = -1;\r
-                    list.Add(s);\r
+                    list.Add(new EquipColumn {Ship = s.Name});\r
                     list.AddRange(\r
                         (from e in Enumerable.Range(0, s.Slot.Length)\r
                             let slot = s.Slot[e]\r
@@ -113,17 +134,16 @@ namespace KancolleSniffer
                             where slot != -1\r
                             let item = _sniffer.Item.ItemDict[slot]\r
                             select\r
-                                CreateDummyEntry(item.Spec.Name + (item.Level == 0 ? "" : "★" + item.Level) +\r
-                                                 (!item.Spec.IsAircraft ? "" : " " + onslot + "/" + max), 500))\r
-                            .DefaultIfEmpty(CreateDummyEntry("なし", 500)));\r
+                                new EquipColumn\r
+                                {\r
+                                    Equip = item.Spec.Name + (item.Level == 0 ? "" : "★" + item.Level) +\r
+                                            (!item.Spec.IsAircraft ? "" : " " + onslot + "/" + max),\r
+                                    Color = item.Spec.Color\r
+                                })\r
+                            .DefaultIfEmpty(new EquipColumn {Equip = "なし"}));\r
                 }\r
             }\r
-            _shipList = list.ToArray();\r
-        }\r
-\r
-        private ShipStatus CreateDummyEntry(string name, int level)\r
-        {\r
-            return new ShipStatus {Spec = new ShipSpec {Name = name}, Level = level};\r
+            _equipList = list.ToArray();\r
         }\r
 \r
         private IEnumerable<ShipStatus> FilterByGroup(IEnumerable<ShipStatus> ships)\r
@@ -233,11 +253,18 @@ namespace KancolleSniffer
                 CreateConfigComponents(i);\r
                 CreateRepairLabels(i);\r
                 CreateShipLabels(i);\r
-                CreateEquipLabels(i);\r
             }\r
             panelShipList.ResumeLayout();\r
         }\r
 \r
+        private void CreateEquipLabels()\r
+        {\r
+            panelShipList.SuspendLayout();\r
+            for (var i = _equipLabelList.Count; i < _equipList.Length; i++)\r
+                CreateEquipLabels(i);\r
+            panelShipList.ResumeLayout();\r
+        }\r
+\r
         private void CreateConfigComponents(int i)\r
         {\r
             var y = 3 + LineHeight * i;\r
@@ -397,7 +424,8 @@ namespace KancolleSniffer
             {\r
                 new ShipLabel {Location = new Point(1, 2), AutoSize = true},\r
                 new ShipLabel {Location = new Point(10, 2), AutoSize = true},\r
-                new ShipLabel {Location = new Point(40, 2), AutoSize = true}\r
+                new ShipLabel {Location = new Point(40, 2), AutoSize = true},\r
+                new ShipLabel {Location = new Point(37, 2), Size = new Size(4, LabelHeight - 2)}\r
             };\r
             _equipLabelList.Add(labels);\r
             _equipPanelList.Add(lbp);\r
@@ -416,7 +444,6 @@ namespace KancolleSniffer
         {\r
             panelGroupHeader.Visible = InGroupConfig();\r
             panelRepairHeader.Visible = InRepairList();\r
-            panelItemHeader.Visible = InEquip();\r
             panelShipList.SuspendLayout();\r
             for (var i = 0; i < _shipList.Length; i++)\r
             {\r
@@ -426,8 +453,6 @@ namespace KancolleSniffer
                     _checkBoxPanelList[i].Visible = false;\r
                 if (!InRepairList())\r
                     _repairPanelList[i].Visible = false;\r
-                if (!InEquip())\r
-                    _equipPanelList[i].Visible = false;\r
             }\r
             for (var i = 0; i < _shipList.Length; i++)\r
             {\r
@@ -437,13 +462,10 @@ namespace KancolleSniffer
                     SetGroupConfig(i);\r
                 if (InRepairList())\r
                     SetRepairList(i);\r
-                if (InEquip())\r
-                    SetEquip(i);\r
             }\r
             for (var i = _shipList.Length; i < _labelPanelList.Count; i++)\r
             {\r
-                _labelPanelList[i].Visible = _checkBoxPanelList[i].Visible =\r
-                    _repairPanelList[i].Visible = _equipPanelList[i].Visible = false;\r
+                _labelPanelList[i].Visible = _checkBoxPanelList[i].Visible = _repairPanelList[i].Visible;\r
             }\r
             panelShipList.ResumeLayout();\r
         }\r
@@ -486,30 +508,29 @@ namespace KancolleSniffer
             lbp.Visible = true;\r
         }\r
 \r
+        private void SetEquipLabels()\r
+        {\r
+            panelItemHeader.Visible = true;\r
+            panelShipList.SuspendLayout();\r
+            for (var i = 0; i < _equipList.Length; i++)\r
+                SetEquip(i);\r
+            for (var i = _equipList.Length; i < _equipLabelList.Count; i++)\r
+                _equipPanelList[i].Visible = false;\r
+            panelShipList.ResumeLayout();\r
+        }\r
+\r
         private void SetEquip(int i)\r
         {\r
             var lbp = _equipPanelList[i];\r
             if (!lbp.Visible)\r
                 lbp.Location = new Point(lbp.Left, (int)lbp.Tag + panelShipList.AutoScrollPosition.Y);\r
-            var s = _shipList[i];\r
+            var e = _equipList[i];\r
             var labels = _equipLabelList[i];\r
-            switch (s.Level)\r
-            {\r
-                case 1000:\r
-                    labels[0].Text = s.Name;\r
-                    labels[1].SetName("");\r
-                    labels[2].Text = "";\r
-                    break;\r
-                case 500:\r
-                    labels[2].Text = s.Name;\r
-                    labels[0].Text = "";\r
-                    labels[1].SetName("");\r
-                    break;\r
-                default:\r
-                    labels[1].SetName(s);\r
-                    labels[0].Text = labels[2].Text = "";\r
-                    break;\r
-            }\r
+            labels[0].Text = e.Fleet;\r
+            labels[1].SetName(e.Ship);\r
+            labels[2].Text = e.Equip;\r
+            labels[3].Visible = e.Equip != "";\r
+            labels[3].BackColor = e.Color;\r
             lbp.Visible = true;\r
         }\r
 \r
@@ -558,9 +579,16 @@ namespace KancolleSniffer
         private void HideShipLabels()\r
         {\r
             panelShipList.SuspendLayout();\r
-            for (var i = 0; i < _shipList.Length; i++)\r
-                _labelPanelList[i].Visible = _checkBoxPanelList[i].Visible =\r
-                    _repairPanelList[i].Visible = _equipPanelList[i].Visible = false;\r
+            for (var i = 0; i < _labelPanelList.Count; i++)\r
+                _labelPanelList[i].Visible = _checkBoxPanelList[i].Visible = _repairPanelList[i].Visible = false;\r
+            panelShipList.ResumeLayout();\r
+        }\r
+\r
+        private void HideEquipLabels()\r
+        {\r
+            panelShipList.SuspendLayout();\r
+            foreach (var e in _equipPanelList)\r
+                e.Visible = false;\r
             panelShipList.ResumeLayout();\r
         }\r
 \r