OSDN Git Service

ファイルから数値を読むクラスをstaticにするのをやめる
authorKazuhiro Fujieda <fujieda@users.osdn.me>
Fri, 20 Jul 2018 08:30:51 +0000 (17:30 +0900)
committerKazuhiro Fujieda <fujieda@users.osdn.me>
Sat, 21 Jul 2018 06:46:44 +0000 (15:46 +0900)
KancolleSniffer.Test/BattleTest.cs
KancolleSniffer.Test/SnifferTest.cs
KancolleSniffer/AdditionalData.cs [moved from KancolleSniffer/DataLoader.cs with 76% similarity]
KancolleSniffer/ItemInfo.cs
KancolleSniffer/KancolleSniffer.csproj
KancolleSniffer/MainForm.cs
KancolleSniffer/ShipInfo.cs
KancolleSniffer/ShipMaster.cs
KancolleSniffer/Sniffer.cs

index bb49456..de430fa 100644 (file)
@@ -35,7 +35,7 @@ namespace KancolleSniffer.Test
         public void Initialize()\r
         {\r
             _itemInfo = new ItemInfo();\r
-            _shipInfo = new ShipInfo(_itemInfo);\r
+            _shipInfo = new ShipInfo(new ShipMaster(), _itemInfo);\r
             _battleInfo = new BattleInfo(_shipInfo, _itemInfo);\r
         }\r
 \r
index df2a4da..c202117 100644 (file)
@@ -25,8 +25,8 @@ namespace KancolleSniffer.Test
     [TestClass]\r
     public class SnifferTest\r
     {\r
-        [TestInitialize]\r
-        public void Intialize()\r
+        [ClassInitialize]\r
+        public static void Intialize(TestContext context)\r
         {\r
             ExpressionToCodeConfiguration.GlobalAssertionConfiguration = ExpressionToCodeConfiguration\r
                 .GlobalAssertionConfiguration.WithPrintedListLengthLimit(200).WithMaximumValueLength(1000);\r
@@ -373,13 +373,11 @@ namespace KancolleSniffer.Test
         [TestMethod]\r
         public void TransportPoint()\r
         {\r
-            DataLoader.LoadTpSpec();\r
-\r
+            var sniffer = new Sniffer();\r
             var msgs = new[] {"", "鬼怒改二+特大発+おにぎり", "駆逐艦+士魂部隊", "補給艦"};\r
             var results = new[] {47, 19, 13, 15};\r
             for (var i = 0; i < msgs.Length; i++)\r
             {\r
-                var sniffer = new Sniffer();\r
                 SniffLogFile(sniffer, "transportpoint_00" + (i + 1));\r
                 var j = i;\r
                 PAssert.That(() => (int)sniffer.Fleets[0].TransportPoint == results[j], msgs[j]);\r
similarity index 76%
rename from KancolleSniffer/DataLoader.cs
rename to KancolleSniffer/AdditionalData.cs
index 3cc3629..425ee4b 100644 (file)
@@ -19,14 +19,14 @@ using System.Linq;
 \r
 namespace KancolleSniffer\r
 {\r
-    public static class DataLoader\r
+    public class AdditionalData\r
     {\r
         private static readonly string EnemySlotFile =\r
             Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "EnemySlot.csv");\r
 \r
-        private static Dictionary<int, int[]> _maxEq;\r
+        private Dictionary<int, int[]> _maxEq;\r
 \r
-        public static void LoadEnemySlot()\r
+        public void LoadEnemySlot()\r
         {\r
             try\r
             {\r
@@ -39,16 +39,16 @@ namespace KancolleSniffer
             }\r
         }\r
 \r
-        public static int[] EnemySlot(int id) =>\r
+        public int[] EnemySlot(int id) =>\r
             _maxEq != null ? _maxEq.TryGetValue(id, out var slot) ? slot : null : null;\r
 \r
-        private const string FileName = "TP.csv";\r
+        private const string TpFileName = "TP.csv";\r
 \r
-        private static readonly string TpFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, FileName);\r
+        private static readonly string TpFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, TpFileName);\r
 \r
-        private static Dictionary<int, double> _tpSpec;\r
+        private Dictionary<int, double> _tpSpec;\r
 \r
-        public static void LoadTpSpec()\r
+        public void LoadTpSpec()\r
         {\r
             try\r
             {\r
@@ -61,11 +61,11 @@ namespace KancolleSniffer
             }\r
             catch (Exception ex)\r
             {\r
-                throw new Exception(FileName + "が壊れています。", ex);\r
+                throw new Exception(TpFileName + "が壊れています。", ex);\r
             }\r
         }\r
 \r
-        public static double ItemTp(int id) =>\r
+        public double ItemTp(int id) =>\r
             _tpSpec != null ? _tpSpec.TryGetValue(id, out var tp) ? tp : -1 : -1;\r
     }\r
 }
\ No newline at end of file
index bd97dae..4824d1c 100644 (file)
@@ -12,6 +12,7 @@
 // See the License for the specific language governing permissions and\r
 // limitations under the License.\r
 \r
+using System;\r
 using System.Collections.Generic;\r
 using System.Drawing;\r
 using System.Linq;\r
@@ -158,13 +159,15 @@ namespace KancolleSniffer
             }\r
         }\r
 \r
+        public Func<int, double?> GetItemTp { private get; set; }\r
+\r
         public double TransportPoint\r
         {\r
             get\r
             {\r
-                var tp = DataLoader.ItemTp(Id);\r
+                var tp = GetItemTp?.Invoke(Id);\r
                 if (tp >= 0)\r
-                    return tp;\r
+                    return (double)tp;\r
                 switch (Id)\r
                 {\r
                     case 75: // ドラム缶(輸送用)\r
@@ -648,6 +651,8 @@ namespace KancolleSniffer
             MarginEquips = 10;\r
         }\r
 \r
+        public AdditionalData AdditionalData { get; set; }\r
+\r
         public void InspectBasic(dynamic json)\r
         {\r
             MaxShips = (int)json.api_max_chara;\r
@@ -662,6 +667,7 @@ namespace KancolleSniffer
             var dict = new Dictionary<int, string>();\r
             foreach (var entry in json.api_mst_slotitem_equiptype)\r
                 dict[(int)entry.api_id] = entry.api_name;\r
+            AdditionalData?.LoadTpSpec();\r
             foreach (var entry in json.api_mst_slotitem)\r
             {\r
                 var type = (int)entry.api_type[2];\r
@@ -680,7 +686,8 @@ namespace KancolleSniffer
                     Bomber = (int)entry.api_baku,\r
                     Interception = type == 48 ? (int)entry.api_houk : 0, // 局地戦闘機は回避の値が迎撃\r
                     AntiBomber = type == 48 ? (int)entry.api_houm : 0, // 〃命中の値が対爆\r
-                    Distance = entry.api_distance() ? (int)entry.api_distance : 0\r
+                    Distance = entry.api_distance() ? (int)entry.api_distance : 0,\r
+                    GetItemTp = id => AdditionalData?.ItemTp(id)\r
                 };\r
             }\r
             _itemSpecs[-1] = _itemSpecs[0] = new ItemSpec();\r
index 41ef2de..88687be 100644 (file)
     <Compile Include="LogServer.cs" />\r
     <Compile Include="MaterialInfo.cs" />\r
     <Compile Include="MiscTextInfo.cs" />\r
-    <Compile Include="DataLoader.cs" />\r
+    <Compile Include="AdditionalData.cs" />\r
     <Compile Include="NotificationConfigDialog.cs">\r
       <SubType>Form</SubType>\r
     </Compile>\r
index 7b7a89b..ae092d9 100644 (file)
@@ -115,7 +115,6 @@ namespace KancolleSniffer
         {\r
             var target = "";\r
             _sniffer.LoadState();\r
-            DataLoader.LoadTpSpec();\r
             _watcher.SynchronizingObject = this;\r
             _watcherTimer.Tick += (sender, ev) =>\r
             {\r
@@ -126,7 +125,7 @@ namespace KancolleSniffer
                         _sniffer.LoadState();\r
                         break;\r
                     case "TP.csv":\r
-                        DataLoader.LoadTpSpec();\r
+                        _sniffer.AdditionalData.LoadTpSpec();\r
                         break;\r
                 }\r
             };\r
index 7bffa5b..df6267b 100644 (file)
@@ -27,7 +27,7 @@ namespace KancolleSniffer
 \r
         private readonly Fleet[] _fleets;\r
         private readonly Dictionary<int, ShipStatus> _shipInfo = new Dictionary<int, ShipStatus>();\r
-        private readonly ShipMaster _shipMaster = new ShipMaster();\r
+        private readonly ShipMaster _shipMaster;\r
         private readonly ItemInfo _itemInfo;\r
         private readonly List<int> _escapedShips = new List<int>();\r
         private ShipStatus[] _battleResult = new ShipStatus[0];\r
@@ -48,8 +48,9 @@ namespace KancolleSniffer
             }\r
         }\r
 \r
-        public ShipInfo(ItemInfo itemInfo)\r
+        public ShipInfo(ShipMaster shipMaster, ItemInfo itemInfo)\r
         {\r
+            _shipMaster = shipMaster;\r
             _fleets = Enumerable.Range(0, FleetCount).Select((x, i) => new Fleet(this, i)).ToArray();\r
             _itemInfo = itemInfo;\r
             ClearShipInfo();\r
index ae11930..40a32bb 100644 (file)
@@ -12,6 +12,7 @@
 // See the License for the specific language governing permissions and\r
 // limitations under the License.\r
 \r
+using System;\r
 using System.Collections.Generic;\r
 \r
 namespace KancolleSniffer\r
@@ -20,6 +21,7 @@ namespace KancolleSniffer
     {\r
         public const int NumSlots = 5;\r
         private readonly Dictionary<int, ShipSpec> _shipSpecs = new Dictionary<int, ShipSpec>();\r
+        public AdditionalData AdditionalData { get; set; }\r
 \r
         public static bool IsEnemyId(int id) => id > 1500;\r
 \r
@@ -29,7 +31,7 @@ namespace KancolleSniffer
             foreach (var entry in json.api_mst_stype)\r
                 dict[entry.api_id] = entry.api_name;\r
             dict[8] = "巡洋戦艦";\r
-            DataLoader.LoadEnemySlot();\r
+            AdditionalData?.LoadEnemySlot();\r
             foreach (var entry in json.api_mst_ship)\r
             {\r
                 var shipSpec = _shipSpecs[(int)entry.api_id] = new ShipSpec\r
@@ -49,9 +51,9 @@ namespace KancolleSniffer
                     shipSpec.Remodel.Level = (int)entry.api_afterlv;\r
                     shipSpec.Remodel.After = int.Parse(entry.api_aftershipid);\r
                 }\r
-                shipSpec.MaxEq = entry.api_maxeq()\r
-                    ? entry.api_maxeq\r
-                    : DataLoader.EnemySlot(shipSpec.Id);\r
+                shipSpec.GetMaxEq = entry.api_maxeq()\r
+                    ? (Func<int[]>)(() => entry.api_maxeq)\r
+                    : () => AdditionalData?.EnemySlot(shipSpec.Id);\r
             }\r
             _shipSpecs[-1] = new ShipSpec();\r
             SetRemodelBaseAndStep();\r
@@ -113,7 +115,8 @@ namespace KancolleSniffer
         public int FuelMax { get; set; }\r
         public int BullMax { get; set; }\r
         public int SlotNum { get; set; }\r
-        public int[] MaxEq { get; set; }\r
+        public Func<int[]> GetMaxEq { get; set; }\r
+        public int[] MaxEq => GetMaxEq?.Invoke();\r
         public int ShipType { get; set; }\r
         public int ShipClass { get; set; }\r
         public string ShipTypeName { get; set; }\r
@@ -131,7 +134,6 @@ namespace KancolleSniffer
         {\r
             Id = -1;\r
             Name = "";\r
-            MaxEq = new int[0];\r
         }\r
 \r
         public double RepairWeight\r
index 3f0b306..97a273c 100644 (file)
@@ -25,6 +25,7 @@ namespace KancolleSniffer
         private readonly MaterialInfo _materialInfo = new MaterialInfo();\r
         private readonly QuestInfo _questInfo;\r
         private readonly MissionInfo _missionInfo = new MissionInfo();\r
+        private readonly ShipMaster _shipMaster = new ShipMaster();\r
         private readonly ShipInfo _shipInfo;\r
         private readonly ConditionTimer _conditionTimer;\r
         private readonly DockInfo _dockInfo;\r
@@ -40,6 +41,7 @@ namespace KancolleSniffer
         private readonly Status _status = new Status();\r
         private bool _saveState;\r
         private readonly List<IHaveState> _haveState;\r
+        private AdditionalData _additionalData;\r
 \r
         public interface IRepeatingTimerController\r
         {\r
@@ -71,7 +73,7 @@ namespace KancolleSniffer
         public Sniffer(bool start = false)\r
         {\r
             _start = start;\r
-            _shipInfo = new ShipInfo(_itemInfo);\r
+            _shipInfo = new ShipInfo(_shipMaster, _itemInfo);\r
             _conditionTimer = new ConditionTimer(_shipInfo);\r
             _dockInfo = new DockInfo(_shipInfo, _materialInfo);\r
             _akashiTimer = new AkashiTimer(_shipInfo, _dockInfo, _presetDeck);\r
@@ -81,6 +83,18 @@ namespace KancolleSniffer
             _baseAirCoprs = new BaseAirCoprs(_itemInfo);\r
             _miscTextInfo = new MiscTextInfo(_shipInfo, _itemInfo);\r
             _haveState = new List<IHaveState> {_achievement, _materialInfo, _conditionTimer, _exMapInfo, _questInfo};\r
+            AdditionalData = new AdditionalData();\r
+        }\r
+\r
+        public AdditionalData AdditionalData\r
+        {\r
+            get => _additionalData;\r
+            set\r
+            {\r
+                _additionalData = value;\r
+                _shipMaster.AdditionalData = value;\r
+                _itemInfo.AdditionalData = value;\r
+            }\r
         }\r
 \r
         public void SaveState()\r