// 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.Windows.Forms;\r
\r
public int EnemyLost { get; set; }\r
}\r
\r
+ public string PhaseName { get; set; }\r
+ public int AirControlLevel { get; set; }\r
public StageResult Stage1 { get; set; } = new StageResult();\r
public StageResult Stage2 { get; set; } = new StageResult();\r
}\r
\r
public class AirBattleResultPanel : Panel\r
{\r
+ private readonly Label _phaseName;\r
+ private readonly Label _stage1;\r
private readonly Label[][][] _resultLabels = new Label[2][][];\r
+ private List<AirBattleResult> _resultList;\r
+ private int _resultIndex;\r
+\r
+ public bool ShowResultAutomatic { get; set; }\r
+\r
+ private bool ResultRemained\r
+ {\r
+ set { _phaseName.BorderStyle = value ? BorderStyle.FixedSingle : BorderStyle.None; }\r
+ }\r
\r
public AirBattleResultPanel()\r
{\r
+ const int top = 20;\r
var labels = new[]\r
{\r
- new Label {Text = "航空戦", Location = new Point(4, 4), AutoSize = true},\r
- new Label {Text = "stage1", Location = new Point(4, 18), AutoSize = true},\r
- new Label {Text = "stage2", Location = new Point(4, 32), AutoSize = true},\r
- new Label {Text = "自軍", Location = new Point(59, 4), AutoSize = true},\r
- new Label {Text = "敵軍", Location = new Point(115, 4), AutoSize = true}\r
+ _phaseName =\r
+ new Label\r
+ {\r
+ Text = "航空戦",\r
+ Location = new Point(4, 4),\r
+ Size = new Size(49, 12),\r
+ TextAlign = ContentAlignment.TopCenter\r
+ },\r
+ _stage1 = new Label {Text = "stage1", Location = new Point(8, top), AutoSize = true},\r
+ new Label {Text = "stage2", Location = new Point(8, top + 14), AutoSize = true},\r
+ new Label {Text = "自軍", Location = new Point(67, 6), AutoSize = true},\r
+ new Label {Text = "敵軍", Location = new Point(124, 6), AutoSize = true}\r
};\r
Controls.AddRange(labels);\r
+ const int left = 54;\r
for (var stage = 0; stage < 2; stage++)\r
{\r
_resultLabels[stage] = new Label[2][];\r
for (var fe = 0; fe < 2; fe++)\r
{\r
_resultLabels[stage][fe] = new Label[2];\r
- Controls.Add(_resultLabels[stage][fe][1] = new Label\r
- {\r
- Location = new Point(78 + 56 * fe, 18 + 14 * stage),\r
- Size = new Size(23, 12),\r
- TextAlign = ContentAlignment.TopLeft,\r
- });\r
+ Controls.Add(_resultLabels[stage][fe][1] = new Label\r
+ {\r
+ Location = new Point(left + 32 + 57 * fe, top + 14 * stage),\r
+ Size = new Size(23, 12),\r
+ TextAlign = ContentAlignment.TopLeft\r
+ });\r
Controls.Add(new Label\r
{\r
- Location = new Point(66 + 56 * fe, 18 + 14 * stage),\r
+ Location = new Point(left + 20 + 57 * fe, top + 14 * stage),\r
Text = "→",\r
AutoSize = true\r
});\r
Controls.Add(_resultLabels[stage][fe][0] = new Label\r
{\r
- Location = new Point(46 + 56 * fe, 18 + 14 * stage),\r
+ Location = new Point(left + 57 * fe, top + 14 * stage),\r
Size = new Size(23, 12),\r
- TextAlign = ContentAlignment.TopRight,\r
+ TextAlign = ContentAlignment.TopRight\r
});\r
}\r
}\r
+ _phaseName.Click += PhaseNameOnClick;\r
}\r
\r
- public void SetResult(AirBattleResult result)\r
+ public void SetResult(List<AirBattleResult> resultList)\r
{\r
+ _resultList = resultList;\r
+ if (_resultList.Count == 0)\r
+ {\r
+ ResultRemained = false;\r
+ ClearResult();\r
+ return;\r
+ }\r
+ _resultIndex = _resultList.Count - 1;\r
+ if (!ShowResultAutomatic)\r
+ {\r
+ ResultRemained = true;\r
+ ClearResult();\r
+ return;\r
+ }\r
+ ShowResult();\r
+ ResultRemained = _resultList.Count > 1;\r
+ _resultIndex = 0;\r
+ }\r
+\r
+ private void PhaseNameOnClick(object sender, EventArgs eventArgs)\r
+ {\r
+ if (_resultList == null || _resultList.Count == 0)\r
+ return;\r
+ ShowResult();\r
+ if (_resultList.Count == 1)\r
+ ResultRemained = false;\r
+ _resultIndex = (_resultIndex + 1) % _resultList.Count;\r
+ }\r
+\r
+ private void ShowResult()\r
+ {\r
+ if (_resultIndex >= _resultList.Count)\r
+ return;\r
+ var result = _resultList[_resultIndex];\r
+ _phaseName.Text = result.PhaseName;\r
+ var color = new[] {DefaultForeColor, Color.Blue, Color.Green, Color.Orange, Color.Red};\r
+ _stage1.ForeColor = color[result.AirControlLevel];\r
var stages = new[] {result.Stage1, result.Stage2};\r
for (var i = 0; i < 2; i++)\r
{\r
labels[1][1].Text = $"{stage.EnemyCount - stage.EnemyLost}";\r
}\r
}\r
+\r
+ private void ClearResult()\r
+ {\r
+ _phaseName.Text = "航空戦";\r
+ _stage1.ForeColor = DefaultForeColor;\r
+ for (var st = 0; st < 2; st++)\r
+ {\r
+ for (var fe = 0; fe < 2; fe++)\r
+ {\r
+ for (var ba = 0; ba < 2; ba++)\r
+ {\r
+ _resultLabels[st][fe][ba].Text = "";\r
+ }\r
+ }\r
+ }\r
+ }\r
}\r
}
\ No newline at end of file
public int AirControlLevel { get; private set; }\r
public BattleResultRank ResultRank { get; private set; }\r
public ShipStatus[] EnemyResultStatus { get; private set; }\r
- public AirBattleResult AirBattleResults { get; private set; }\r
+ public List<AirBattleResult> AirBattleResults { get; } = new List<AirBattleResult>();\r
\r
public BattleInfo(ShipInfo shipInfo, ItemInfo itemInfo)\r
{\r
\r
private void CalcDamage(dynamic json, bool surfaceFleet = false)\r
{\r
- AirBattleResults = new AirBattleResult();\r
+ AirBattleResults.Clear();\r
var fc = _guard.Length > 0;\r
var ec = _enemyGuardHp.Length > 0;\r
var both = fc && ec;\r
if (json.api_air_base_injection())\r
{\r
- var obj = json.api_air_base_injection;\r
- CalcAirBaseAttackDamage(obj.IsArray() ? obj : new[] {obj});\r
+ AddAirBattleResult(json.api_air_base_injection, "AB噴式");\r
+ CalcKoukuDamage(json.api_air_base_injection);\r
+ }\r
+ if (json.api_injection_kouku())\r
+ {\r
+ AddAirBattleResult(json.api_injection_kouku, "噴式");\r
+ CalcKoukuDamage(json.api_injection_kouku);\r
}\r
if (json.api_air_base_attack())\r
CalcAirBaseAttackDamage(json.api_air_base_attack);\r
- if (json.api_injection_kouku()) // 噴式強襲\r
- CalcKoukuDamage(json.api_injection_kouku);\r
if (json.api_kouku())\r
{\r
- SetAirBattleResult(json.api_kouku);\r
+ AddAirBattleResult(json.api_kouku, "航空戦");\r
CalcKoukuDamage(json.api_kouku);\r
}\r
if (json.api_kouku2()) // 航空戦2回目\r
+ {\r
+ AddAirBattleResult(json.api_kouku2, "航空戦2");\r
CalcKoukuDamage(json.api_kouku2);\r
+ }\r
if (!json.api_opening_atack()) // 航空戦のみ\r
return;\r
if (json.api_support_info() && json.api_support_info != null)\r
\r
private void CalcAirBaseAttackDamage(dynamic json)\r
{\r
+ var i = 1;\r
foreach (var entry in json)\r
+ {\r
+ AddAirBattleResult(entry, "基地" + i++);\r
CalcKoukuDamage(entry);\r
+ }\r
}\r
\r
- private void SetAirBattleResult(dynamic json)\r
+ private void AddAirBattleResult(dynamic json, string phaseName)\r
{\r
if (json.api_stage1 == null || json.api_stage2 == null)\r
return;\r
- AirBattleResults.Stage1 = new AirBattleResult.StageResult\r
- {\r
- FriendCount = (int)json.api_stage1.api_f_count,\r
- FriendLost = (int)json.api_stage1.api_f_lostcount,\r
- EnemyCount = (int)json.api_stage1.api_e_count,\r
- EnemyLost = (int)json.api_stage1.api_e_lostcount\r
- };\r
- AirBattleResults.Stage2 = new AirBattleResult.StageResult\r
+ AirBattleResults.Add(new AirBattleResult\r
{\r
- FriendCount = (int)json.api_stage2.api_f_count,\r
- FriendLost = (int)json.api_stage2.api_f_lostcount,\r
- EnemyCount = (int)json.api_stage2.api_e_count,\r
- EnemyLost = (int)json.api_stage2.api_e_lostcount\r
- };\r
+ PhaseName = phaseName,\r
+ AirControlLevel = json.api_stage1.api_disp_seiku() ? (int)json.api_stage1.api_disp_seiku : 0,\r
+ Stage1 = new AirBattleResult.StageResult\r
+ {\r
+ FriendCount = (int)json.api_stage1.api_f_count,\r
+ FriendLost = (int)json.api_stage1.api_f_lostcount,\r
+ EnemyCount = (int)json.api_stage1.api_e_count,\r
+ EnemyLost = (int)json.api_stage1.api_e_lostcount\r
+ },\r
+ Stage2 = new AirBattleResult.StageResult\r
+ {\r
+ FriendCount = (int)json.api_stage2.api_f_count,\r
+ FriendLost = (int)json.api_stage2.api_f_lostcount,\r
+ EnemyCount = (int)json.api_stage2.api_e_count,\r
+ EnemyLost = (int)json.api_stage2.api_e_lostcount\r
+ }\r
+ });\r
}\r
\r
private void CalcKoukuDamage(dynamic json)\r