Révision | 94be4bab0b1a434de72cfca303b0a5d98926f2ee (tree) |
---|---|
l'heure | 2019-07-19 21:45:22 |
Auteur | Kazuhiro Fujieda <fujieda@user...> |
Commiter | Kazuhiro Fujieda |
基地航空隊の制空値周りをリファクタリングする
@@ -113,9 +113,9 @@ namespace KancolleSniffer.Test | ||
113 | 113 | { |
114 | 114 | var sniffer = new Sniffer(); |
115 | 115 | SniffLogFile(sniffer, "airbase_001"); |
116 | - PAssert.That(() => (int)sniffer.AirBase[0].AirCorps[0].CalcFighterPower().Max.AirCombat == 301); | |
116 | + PAssert.That(() => sniffer.AirBase[0].AirCorps[0].CalcFighterPower().AirCombat.Max == 301); | |
117 | 117 | sniffer.AirBase[0].AirCorps[0].Action = 2; // 防空 |
118 | - PAssert.That(() => (int)sniffer.AirBase[0].AirCorps[0].CalcFighterPower().Max.Interception == 320); | |
118 | + PAssert.That(() => sniffer.AirBase[0].AirCorps[0].CalcFighterPower().Interception.Max == 320); | |
119 | 119 | } |
120 | 120 | |
121 | 121 | /// <summary> |
@@ -126,7 +126,7 @@ namespace KancolleSniffer.Test | ||
126 | 126 | { |
127 | 127 | var sniffer = new Sniffer(); |
128 | 128 | SniffLogFile(sniffer, "airbase_002"); |
129 | - PAssert.That(() => (int)sniffer.AirBase[0].AirCorps[2].CalcFighterPower().Min.Interception == 353); | |
129 | + PAssert.That(() => sniffer.AirBase[0].AirCorps[2].CalcFighterPower().Interception.Min == 353); | |
130 | 130 | } |
131 | 131 | |
132 | 132 | /// <summary> |
@@ -137,7 +137,7 @@ namespace KancolleSniffer.Test | ||
137 | 137 | { |
138 | 138 | var sniffer = new Sniffer(); |
139 | 139 | SniffLogFile(sniffer, "airbase_003"); |
140 | - PAssert.That(() => (int)sniffer.AirBase[1].AirCorps[0].CalcFighterPower().Min.AirCombat == 121); | |
140 | + PAssert.That(() => sniffer.AirBase[1].AirCorps[0].CalcFighterPower().AirCombat.Min == 121); | |
141 | 141 | } |
142 | 142 | |
143 | 143 | /// <summary> |
@@ -159,7 +159,7 @@ namespace KancolleSniffer.Test | ||
159 | 159 | { |
160 | 160 | var sniffer = new Sniffer(); |
161 | 161 | SniffLogFile(sniffer, "airbase_004"); |
162 | - PAssert.That(() => (int)sniffer.AirBase[1].AirCorps[0].CalcFighterPower().Min.AirCombat == 328); | |
162 | + PAssert.That(() => sniffer.AirBase[1].AirCorps[0].CalcFighterPower().AirCombat.Min == 328); | |
163 | 163 | } |
164 | 164 | |
165 | 165 | /// <summary> |
@@ -173,13 +173,13 @@ namespace KancolleSniffer.Test | ||
173 | 173 | |
174 | 174 | // 二式陸上偵察機(熟練) |
175 | 175 | var fp1 = sniffer.AirBase[0].AirCorps[0].CalcFighterPower(); |
176 | - PAssert.That(() => (int)fp1.Min.AirCombat == 274); | |
177 | - PAssert.That(() => (int)fp1.Min.Interception == 302); | |
176 | + PAssert.That(() => fp1.AirCombat.Min == 274); | |
177 | + PAssert.That(() => fp1.Interception.Min == 302); | |
178 | 178 | |
179 | 179 | // 二式陸上偵察機 |
180 | 180 | var fp3 = sniffer.AirBase[0].AirCorps[2].CalcFighterPower(); |
181 | - PAssert.That(() => (int)fp3.Min.AirCombat == 206); | |
182 | - PAssert.That(() => (int)fp3.Min.Interception == 310); | |
181 | + PAssert.That(() => fp3.AirCombat.Min == 206); | |
182 | + PAssert.That(() => fp3.Interception.Min == 310); | |
183 | 183 | } |
184 | 184 | |
185 | 185 | /// <summary> |
@@ -54,7 +54,7 @@ | ||
54 | 54 | <Reference Include="System.Xml" /> |
55 | 55 | </ItemGroup> |
56 | 56 | <ItemGroup> |
57 | - <Compile Include="Model\AirBaseParams.cs" /> | |
57 | + <Compile Include="Model\AirCorpsFighterPower.cs" /> | |
58 | 58 | <Compile Include="Model\QuestCounter.cs" /> |
59 | 59 | <Compile Include="Model\QuestCountList.cs" /> |
60 | 60 | <Compile Include="Model\QuestSpec.cs" /> |
@@ -30,7 +30,7 @@ namespace KancolleSniffer.Model | ||
30 | 30 | _itemInfo = item; |
31 | 31 | } |
32 | 32 | |
33 | - public BaseInfo[] AllAirCorps { get; set; } | |
33 | + public BaseInfo[] AllBase { get; set; } | |
34 | 34 | |
35 | 35 | public class BaseInfo |
36 | 36 | { |
@@ -75,20 +75,21 @@ namespace KancolleSniffer.Model | ||
75 | 75 | } |
76 | 76 | } |
77 | 77 | |
78 | - public AirBaseParams.Range CalcFighterPower() | |
78 | + public AirCorpsFighterPower CalcFighterPower() | |
79 | 79 | { |
80 | - var reconPlaneBonus = Planes.Aggregate(new AirBaseParams(), (max, plane) => | |
80 | + var reconPlaneBonus = Planes.Aggregate(new AirCorpsFighterPower.Pair(), (max, plane) => | |
81 | 81 | { |
82 | 82 | var bonus = plane.Slot.Spec.ReconPlaneAirBaseBonus; |
83 | - return AirBaseParams.Max(max, bonus); | |
83 | + return AirCorpsFighterPower.Pair.Max(max, bonus); | |
84 | 84 | }); |
85 | - return (Planes.Aggregate(new AirBaseParams.Range(), (previous, plane) => | |
85 | + var range = (Planes.Aggregate(new AirCorpsFighterPower.Range(), (previous, plane) => | |
86 | 86 | { |
87 | 87 | if (plane.State != 1) |
88 | 88 | return previous; |
89 | 89 | var current = plane.Slot.CalcFighterPowerInBase(plane.Count); |
90 | 90 | return previous + current; |
91 | 91 | }) * reconPlaneBonus).Floor(); |
92 | + return new AirCorpsFighterPower(range); | |
92 | 93 | } |
93 | 94 | |
94 | 95 | public int[] CostForSortie => Planes.Aggregate(new[] {0, 0}, (prev, plane) => |
@@ -135,12 +136,12 @@ namespace KancolleSniffer.Model | ||
135 | 136 | } |
136 | 137 | } |
137 | 138 | |
138 | - public AirBaseParams.Range FighterPower => Slot.CalcFighterPowerInBase(Count); | |
139 | + public AirCorpsFighterPower FighterPower => new AirCorpsFighterPower(Slot.CalcFighterPowerInBase(Count)); | |
139 | 140 | } |
140 | 141 | |
141 | 142 | public void Inspect(dynamic json) |
142 | 143 | { |
143 | - AllAirCorps = (from entry in (dynamic[])json | |
144 | + AllBase = (from entry in (dynamic[])json | |
144 | 145 | group |
145 | 146 | new AirCorpsInfo |
146 | 147 | { |
@@ -161,7 +162,7 @@ namespace KancolleSniffer.Model | ||
161 | 162 | |
162 | 163 | public void InspectSetPlane(string request, dynamic json) |
163 | 164 | { |
164 | - if (AllAirCorps == null) | |
165 | + if (AllBase == null) | |
165 | 166 | return; |
166 | 167 | var values = HttpUtility.ParseQueryString(request); |
167 | 168 | var airCorps = GetBaseInfo(values).AirCorps[int.Parse(values["api_base_id"]) - 1]; |
@@ -195,7 +196,7 @@ namespace KancolleSniffer.Model | ||
195 | 196 | |
196 | 197 | public void InspectSetAction(string request) |
197 | 198 | { |
198 | - if (AllAirCorps == null) | |
199 | + if (AllBase == null) | |
199 | 200 | return; |
200 | 201 | var values = HttpUtility.ParseQueryString(request); |
201 | 202 | var airCorps = GetBaseInfo(values).AirCorps; |
@@ -224,7 +225,7 @@ namespace KancolleSniffer.Model | ||
224 | 225 | private BaseInfo GetBaseInfo(NameValueCollection values) |
225 | 226 | { |
226 | 227 | var areaId = int.Parse(values["api_area_id"] ?? "0"); // 古いAPIに対応するため |
227 | - return AllAirCorps.First(b => b.AreaId == areaId); | |
228 | + return AllBase.First(b => b.AreaId == areaId); | |
228 | 229 | } |
229 | 230 | |
230 | 231 | public void InspectPlaneInfo(dynamic json) |
@@ -241,10 +242,10 @@ namespace KancolleSniffer.Model | ||
241 | 242 | |
242 | 243 | public void SetItemHolder() |
243 | 244 | { |
244 | - if (AllAirCorps == null) | |
245 | + if (AllBase == null) | |
245 | 246 | return; |
246 | 247 | var name = new[] {"第一", "第二", "第三"}; |
247 | - foreach (var baseInfo in AllAirCorps.Select((data, i) => new {data, i})) | |
248 | + foreach (var baseInfo in AllBase.Select((data, i) => new {data, i})) | |
248 | 249 | { |
249 | 250 | var areaName = baseInfo.data.AreaName; |
250 | 251 | foreach (var airCorps in baseInfo.data.AirCorps.Select((data, i) => new {data, i})) |
@@ -1,95 +0,0 @@ | ||
1 | -// Copyright (C) 2019 Kazuhiro Fujieda <fujieda@users.osdn.me> | |
2 | -// | |
3 | -// Licensed under the Apache License, Version 2.0 (the "License"); | |
4 | -// you may not use this file except in compliance with the License. | |
5 | -// You may obtain a copy of the License at | |
6 | -// | |
7 | -// http://www.apache.org/licenses/LICENSE-2.0 | |
8 | -// | |
9 | -// Unless required by applicable law or agreed to in writing, software | |
10 | -// distributed under the License is distributed on an "AS IS" BASIS, | |
11 | -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
12 | -// See the License for the specific language governing permissions and | |
13 | -// limitations under the License. | |
14 | - | |
15 | -using System; | |
16 | -using KancolleSniffer.Util; | |
17 | - | |
18 | -namespace KancolleSniffer.Model | |
19 | -{ | |
20 | - public struct AirBaseParams | |
21 | - { | |
22 | - public double AirCombat { get; } | |
23 | - public double Interception { get; } | |
24 | - | |
25 | - public AirBaseParams(double airCombat, double interception) | |
26 | - { | |
27 | - AirCombat = airCombat; | |
28 | - Interception = interception; | |
29 | - } | |
30 | - | |
31 | - public static AirBaseParams Max(AirBaseParams value1, AirBaseParams value2) | |
32 | - { | |
33 | - return new AirBaseParams(Math.Max(value1.AirCombat, value2.AirCombat), | |
34 | - Math.Max(value1.Interception, value2.Interception)); | |
35 | - } | |
36 | - | |
37 | - public static AirBaseParams operator +(AirBaseParams lhs, AirBaseParams rhs) | |
38 | - { | |
39 | - return new AirBaseParams(lhs.AirCombat + rhs.AirCombat, lhs.Interception + rhs.Interception); | |
40 | - } | |
41 | - | |
42 | - public static AirBaseParams operator +(AirBaseParams lhs, double rhs) | |
43 | - { | |
44 | - return new AirBaseParams(lhs.AirCombat + rhs, lhs.Interception + rhs); | |
45 | - } | |
46 | - | |
47 | - public static AirBaseParams operator *(AirBaseParams lhs, AirBaseParams rhs) | |
48 | - { | |
49 | - return new AirBaseParams(lhs.AirCombat * rhs.AirCombat, lhs.Interception * rhs.Interception); | |
50 | - } | |
51 | - | |
52 | - public static AirBaseParams operator *(AirBaseParams lhs, double rhs) | |
53 | - { | |
54 | - return new AirBaseParams(lhs.AirCombat * rhs, lhs.Interception * rhs); | |
55 | - } | |
56 | - | |
57 | - public AirBaseParams Floor() | |
58 | - { | |
59 | - return new AirBaseParams((int)AirCombat, (int)Interception); | |
60 | - } | |
61 | - | |
62 | - public struct Range | |
63 | - { | |
64 | - public AirBaseParams Min { get; } | |
65 | - public AirBaseParams Max { get; } | |
66 | - | |
67 | - public Range(AirBaseParams min, AirBaseParams max) | |
68 | - { | |
69 | - Min = min; | |
70 | - Max = max; | |
71 | - } | |
72 | - | |
73 | - public Range(AirBaseParams base_, RangeD range) | |
74 | - { | |
75 | - Min = (base_ + range.Min).Floor(); | |
76 | - Max = (base_ + range.Max).Floor(); | |
77 | - } | |
78 | - | |
79 | - public static Range operator +(Range lhs, Range rhs) | |
80 | - { | |
81 | - return new Range(lhs.Min + rhs.Min, lhs.Max + rhs.Max); | |
82 | - } | |
83 | - | |
84 | - public static Range operator *(Range lhs, AirBaseParams rhs) | |
85 | - { | |
86 | - return new Range(lhs.Min * rhs, lhs.Max * rhs); | |
87 | - } | |
88 | - | |
89 | - public Range Floor() | |
90 | - { | |
91 | - return new Range(Min.Floor(), Max.Floor()); | |
92 | - } | |
93 | - } | |
94 | - } | |
95 | -} | |
\ No newline at end of file |
@@ -0,0 +1,108 @@ | ||
1 | +// Copyright (C) 2019 Kazuhiro Fujieda <fujieda@users.osdn.me> | |
2 | +// | |
3 | +// Licensed under the Apache License, Version 2.0 (the "License"); | |
4 | +// you may not use this file except in compliance with the License. | |
5 | +// You may obtain a copy of the License at | |
6 | +// | |
7 | +// http://www.apache.org/licenses/LICENSE-2.0 | |
8 | +// | |
9 | +// Unless required by applicable law or agreed to in writing, software | |
10 | +// distributed under the License is distributed on an "AS IS" BASIS, | |
11 | +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
12 | +// See the License for the specific language governing permissions and | |
13 | +// limitations under the License. | |
14 | + | |
15 | +using System; | |
16 | + | |
17 | +namespace KancolleSniffer.Model | |
18 | +{ | |
19 | + public class AirCorpsFighterPower | |
20 | + { | |
21 | + public Model.Range AirCombat; | |
22 | + public Model.Range Interception; | |
23 | + public bool Difference; | |
24 | + | |
25 | + public AirCorpsFighterPower(Range fighterPower) | |
26 | + { | |
27 | + AirCombat = new Model.Range(fighterPower.Min.AirCombat, fighterPower.Max.AirCombat); | |
28 | + Interception = new Model.Range(fighterPower.Min.Interception, fighterPower.Max.Interception); | |
29 | + Difference = Interception.Min != AirCombat.Min; | |
30 | + } | |
31 | + | |
32 | + public struct Pair | |
33 | + { | |
34 | + public double AirCombat { get; } | |
35 | + public double Interception { get; } | |
36 | + | |
37 | + public Pair(double airCombat, double interception) | |
38 | + { | |
39 | + AirCombat = airCombat; | |
40 | + Interception = interception; | |
41 | + } | |
42 | + | |
43 | + public static Pair Max(Pair value1, Pair value2) | |
44 | + { | |
45 | + return new Pair(Math.Max(value1.AirCombat, value2.AirCombat), | |
46 | + Math.Max(value1.Interception, value2.Interception)); | |
47 | + } | |
48 | + | |
49 | + public static Pair operator +(Pair lhs, Pair rhs) | |
50 | + { | |
51 | + return new Pair(lhs.AirCombat + rhs.AirCombat, lhs.Interception + rhs.Interception); | |
52 | + } | |
53 | + | |
54 | + public static Pair operator +(Pair lhs, double rhs) | |
55 | + { | |
56 | + return new Pair(lhs.AirCombat + rhs, lhs.Interception + rhs); | |
57 | + } | |
58 | + | |
59 | + public static Pair operator *(Pair lhs, Pair rhs) | |
60 | + { | |
61 | + return new Pair(lhs.AirCombat * rhs.AirCombat, lhs.Interception * rhs.Interception); | |
62 | + } | |
63 | + | |
64 | + public static Pair operator *(Pair lhs, double rhs) | |
65 | + { | |
66 | + return new Pair(lhs.AirCombat * rhs, lhs.Interception * rhs); | |
67 | + } | |
68 | + | |
69 | + public Pair Floor() | |
70 | + { | |
71 | + return new Pair((int)AirCombat, (int)Interception); | |
72 | + } | |
73 | + } | |
74 | + | |
75 | + public struct Range | |
76 | + { | |
77 | + public Pair Min { get; } | |
78 | + public Pair Max { get; } | |
79 | + | |
80 | + public Range(Pair min, Pair max) | |
81 | + { | |
82 | + Min = min; | |
83 | + Max = max; | |
84 | + } | |
85 | + | |
86 | + public Range(Pair base_, RangeD range) | |
87 | + { | |
88 | + Min = (base_ + range.Min).Floor(); | |
89 | + Max = (base_ + range.Max).Floor(); | |
90 | + } | |
91 | + | |
92 | + public static Range operator +(Range lhs, Range rhs) | |
93 | + { | |
94 | + return new Range(lhs.Min + rhs.Min, lhs.Max + rhs.Max); | |
95 | + } | |
96 | + | |
97 | + public static Range operator *(Range lhs, Pair rhs) | |
98 | + { | |
99 | + return new Range(lhs.Min * rhs, lhs.Max * rhs); | |
100 | + } | |
101 | + | |
102 | + public Range Floor() | |
103 | + { | |
104 | + return new Range(Min.Floor(), Max.Floor()); | |
105 | + } | |
106 | + } | |
107 | + } | |
108 | +} | |
\ No newline at end of file |
@@ -204,21 +204,21 @@ namespace KancolleSniffer.Model | ||
204 | 204 | } |
205 | 205 | } |
206 | 206 | |
207 | - public AirBaseParams ReconPlaneAirBaseBonus | |
207 | + public AirCorpsFighterPower.Pair ReconPlaneAirBaseBonus | |
208 | 208 | { |
209 | 209 | get |
210 | 210 | { |
211 | 211 | switch (Type) |
212 | 212 | { |
213 | 213 | case 9: |
214 | - return new AirBaseParams(1.0, LoS <= 7 ? 1.2 : 1.3); | |
214 | + return new AirCorpsFighterPower.Pair(1.0, LoS <= 7 ? 1.2 : 1.3); | |
215 | 215 | case 10: |
216 | 216 | case 41: |
217 | - return new AirBaseParams(1.0, LoS <= 7 ? 1.1 : LoS <= 8 ? 1.13 : 1.16); | |
217 | + return new AirCorpsFighterPower.Pair(1.0, LoS <= 7 ? 1.1 : LoS <= 8 ? 1.13 : 1.16); | |
218 | 218 | case 49: |
219 | - return new AirBaseParams(LoS <= 8 ? 1.15 : 1.18, LoS <= 8 ? 1.18 : 1.24); | |
219 | + return new AirCorpsFighterPower.Pair(LoS <= 8 ? 1.15 : 1.18, LoS <= 8 ? 1.18 : 1.24); | |
220 | 220 | } |
221 | - return new AirBaseParams(1.0, 1.0); | |
221 | + return new AirCorpsFighterPower.Pair(1.0, 1.0); | |
222 | 222 | } |
223 | 223 | } |
224 | 224 |
@@ -56,14 +56,14 @@ namespace KancolleSniffer.Model | ||
56 | 56 | } |
57 | 57 | } |
58 | 58 | |
59 | - public AirBaseParams.Range CalcFighterPowerInBase(int slot) | |
59 | + public AirCorpsFighterPower.Range CalcFighterPowerInBase(int slot) | |
60 | 60 | { |
61 | 61 | if (!Spec.IsAircraft || slot == 0) |
62 | - return new AirBaseParams.Range(); | |
62 | + return new AirCorpsFighterPower.Range(); | |
63 | 63 | var withoutAlv = |
64 | - (new AirBaseParams(Spec.Interception * 1.5, Spec.AntiBomber * 2 + Spec.Interception) + | |
64 | + (new AirCorpsFighterPower.Pair(Spec.Interception * 1.5, Spec.AntiBomber * 2 + Spec.Interception) + | |
65 | 65 | Spec.AntiAir + FighterPowerLevelBonus) * Math.Sqrt(slot); |
66 | - return new AirBaseParams.Range(withoutAlv, AlvBonusInBase); | |
66 | + return new AirCorpsFighterPower.Range(withoutAlv, AlvBonusInBase); | |
67 | 67 | } |
68 | 68 | |
69 | 69 | private RangeD AlvBonusInBase |
@@ -657,7 +657,7 @@ namespace KancolleSniffer | ||
657 | 657 | |
658 | 658 | public string MiscText => _miscTextInfo.Text; |
659 | 659 | |
660 | - public AirBase.BaseInfo[] AirBase => _airBase.AllAirCorps; | |
660 | + public AirBase.BaseInfo[] AirBase => _airBase.AllBase; | |
661 | 661 | |
662 | 662 | public CellInfo CellInfo => _cellInfo; |
663 | 663 |
@@ -246,7 +246,7 @@ namespace KancolleSniffer.View | ||
246 | 246 | { |
247 | 247 | public AirCorpsRecord(AirBase.AirCorpsInfo airCorps, int number) |
248 | 248 | { |
249 | - var corpsFp = new AirCorpsFp(airCorps.CalcFighterPower()); | |
249 | + var corpsFp = airCorps.CalcFighterPower(); | |
250 | 250 | string spec; |
251 | 251 | string spec2; |
252 | 252 | if (airCorps.Action == 2) |
@@ -276,7 +276,7 @@ namespace KancolleSniffer.View | ||
276 | 276 | { |
277 | 277 | public CorpsPlaneRecord(AirBase.PlaneInfo plane) |
278 | 278 | { |
279 | - var planeFp = new AirCorpsFp(plane.FighterPower); | |
279 | + var planeFp = plane.FighterPower; | |
280 | 280 | Equip = plane.State != 1 ? plane.StateName : GenEquipString(plane.Slot); |
281 | 281 | Spec = plane.State != 1 ? "" : $"+{plane.Slot.Alv} {plane.Count}/{plane.MaxCount}"; |
282 | 282 | AircraftSpec = |
@@ -286,20 +286,6 @@ namespace KancolleSniffer.View | ||
286 | 286 | } |
287 | 287 | } |
288 | 288 | |
289 | - private class AirCorpsFp | |
290 | - { | |
291 | - public readonly Range AirCombat; | |
292 | - public readonly Range Interception; | |
293 | - public readonly bool Difference; | |
294 | - | |
295 | - public AirCorpsFp(AirBaseParams.Range fighterPower) | |
296 | - { | |
297 | - AirCombat = new Range(fighterPower.Min.AirCombat, fighterPower.Max.AirCombat); | |
298 | - Interception = new Range(fighterPower.Min.Interception, fighterPower.Min.Interception); | |
299 | - Difference = Interception.Min != AirCombat.Min; | |
300 | - } | |
301 | - } | |
302 | - | |
303 | 289 | private static string RangeString(Range range) => range.Diff ? range.RangeString : range.Min.ToString(); |
304 | 290 | } |
305 | 291 | } |