OSDN Git Service

ヘッダのCondとExpのマウスカーソルを変える
[kancollesniffer/KancolleSniffer.git] / KancolleSniffer / ShipInfo.cs
index 195de6f..e0865f5 100644 (file)
@@ -66,7 +66,9 @@ namespace KancolleSniffer
         private readonly List<int> _escapedShips = new List<int>();\r
         private int _combinedFleetType;\r
         private ShipStatus[] _battleResult = new ShipStatus[0];\r
-        public List<ShipStatusPair> WrongBattleResult { get; private set; } = new List<ShipStatusPair>();\r
+        public ShipStatusPair[] BattleResultDiff { get; private set; } = new ShipStatusPair[0];\r
+        public bool IsBattleResultError => BattleResultDiff.Length > 0;\r
+        public ShipStatus[] BattleStartStatus { get; private set; } = new ShipStatus[0];\r
 \r
         public class ShipStatusPair\r
         {\r
@@ -137,13 +139,19 @@ namespace KancolleSniffer
 \r
         private void VerifyBattleResult()\r
         {\r
-            WrongBattleResult = (from assumed in _battleResult\r
+            BattleResultDiff = (from assumed in _battleResult\r
                 let actual = GetStatus(assumed.Id)\r
                 where !assumed.Escaped && assumed.NowHp != actual.NowHp\r
-                select new ShipStatusPair(assumed, actual)).ToList();\r
+                select new ShipStatusPair(assumed, actual)).ToArray();\r
             _battleResult = new ShipStatus[0];\r
         }\r
 \r
+        public void SaveBattleStartStatus()\r
+        {\r
+            BattleStartStatus = _decks.Where((deck, i) => _inSortie[i])\r
+                .SelectMany(deck => deck.Select(id => (ShipStatus)GetStatus(id).Clone())).ToArray();\r
+        }\r
+\r
         private void ClearShipInfo()\r
         {\r
             _shipInfo.Clear();\r
@@ -511,23 +519,12 @@ namespace KancolleSniffer
             set => _shipMaster.UseOldEnemyId = value;\r
         }\r
 \r
-        public void InjectShips(dynamic battle)\r
+        public void InjectShips(dynamic battle, dynamic item)\r
         {\r
-            var deck = (int)battle.api_deck_id;\r
-            var id = 1;\r
-            var ships = ((int[])battle.api_f_nowhps).Zip((int[])battle.api_f_maxhps,\r
-                (now, max) => new ShipStatus {Id = id++, NowHp = now, MaxHp = max}).ToArray();\r
-            _decks[deck - 1] = (from ship in ships select ship.Id).ToArray();\r
-            foreach (var ship in ships)\r
-                _shipInfo[ship.Id] = ship;\r
+            var deck = (int)battle.api_deck_id - 1;\r
+            InjectShips(deck, (int[])battle.api_f_nowhps, (int[])battle.api_f_maxhps, (int[][])item[0]);\r
             if (battle.api_f_nowhps_combined())\r
-            {\r
-                var guards = ((int[])battle.api_f_nowhps_combined).Zip((int[])battle.api_f_maxhps_combined,\r
-                    (now, max) => new ShipStatus {Id = id++, NowHp = now, MaxHp = max}).ToArray();\r
-                _decks[1] = (from ship in guards select ship.Id).ToArray();\r
-                foreach (var ship in guards)\r
-                    _shipInfo[ship.Id] = ship;\r
-            }\r
+                InjectShips(1, (int[])battle.api_f_nowhps_combined, (int[])battle.api_f_maxhps_combined, (int[][])item[1]);\r
             foreach (var enemy in (int[])battle.api_ship_ke)\r
                 _shipMaster[enemy] = new ShipSpec {Id = enemy};\r
             if (battle.api_ship_ke_combined())\r
@@ -536,5 +533,21 @@ namespace KancolleSniffer
                     _shipMaster[enemy] = new ShipSpec {Id = enemy};\r
             }\r
         }\r
+\r
+        private void InjectShips(int deck, int[] nowhps, int[] maxhps, int[][] slots)\r
+        {\r
+            var id = _shipInfo.Keys.Count + 1;\r
+            var ships = nowhps.Zip(maxhps,\r
+                (now, max) => new ShipStatus {Id = id++, NowHp = now, MaxHp = max}).ToArray();\r
+            _decks[deck] = (from ship in ships select ship.Id).ToArray();\r
+            foreach (var ship in ships)\r
+                _shipInfo[ship.Id] = ship;\r
+            foreach (var entry in ships.Zip(slots, (ship, slot) =>new {ship, slot}))\r
+            {\r
+                entry.ship.Slot = _itemInfo.InjectItems(entry.slot.Take(5)).ToArray();\r
+                if (entry.slot.Length >= 6)\r
+                    entry.ship.SlotEx = _itemInfo.InjectItems(entry.slot.Skip(5)).First();\r
+            }\r
+        }\r
     }\r
 }
\ No newline at end of file