/// <summary> /// 航空戦情報を設定します。 /// </summary> /// <param name="phaseJet">噴式航空戦のデータ。発生していなければ null</param> /// <param name="phase1">第一次航空戦(通常航空戦)のデータ。</param> /// <param name="phase2">第二次航空戦のデータ。発生していなければ null</param> private void SetAerialWarfare(PhaseAirBattleBase phaseJet, PhaseAirBattleBase phase1, PhaseAirBattleBase phase2) { var phases = new[] { new AerialWarfareFormatter( phaseJet, "噴式戦: " ), new AerialWarfareFormatter( phase1, "第1次: "), new AerialWarfareFormatter( phase2, "第2次: "), }; if (!phases[0].Enabled && !phases[2].Enabled) phases[1].PhaseName = ""; void SetShootdown(ImageLabel label, int stage, bool isFriend, bool needAppendInfo) { var phasesEnabled = phases.Where(p => p.GetEnabled(stage)); if (needAppendInfo) { label.Text = string.Join(",", phasesEnabled.Select(p => "-" + p.GetAircraftLost(stage, isFriend))); ToolTipInfo.SetToolTip(label, string.Join("", phasesEnabled.Select(p => $"{p.PhaseName}-{p.GetAircraftLost(stage, isFriend)}/{p.GetAircraftTotal(stage, isFriend)}\r\n"))); } else { label.Text = $"-{phases[1].GetAircraftLost(stage, isFriend)}/{phases[1].GetAircraftTotal(stage, isFriend)}"; ToolTipInfo.SetToolTip(label, null); } if (phasesEnabled.Any(p => p.GetAircraftTotal(stage, isFriend) > 0 && p.GetAircraftLost(stage, isFriend) == p.GetAircraftTotal(stage, isFriend))) label.ForeColor = Color.Red; else label.ForeColor = SystemColors.ControlText; label.ImageAlign = ContentAlignment.MiddleCenter; label.ImageIndex = -1; } void ClearAACutinLabel() { AACutin.Text = "対空砲火"; AACutin.ImageAlign = ContentAlignment.MiddleCenter; AACutin.ImageIndex = -1; ToolTipInfo.SetToolTip(AACutin, null); } if (phases[1].Stage1Enabled) { bool needAppendInfo = phases[0].Stage1Enabled || phases[2].Stage1Enabled; var phases1 = phases.Where(p => p.Stage1Enabled); AirSuperiority.Text = Constants.GetAirSuperiority(phases[1].Air.AirSuperiority); ToolTipInfo.SetToolTip(AirSuperiority, needAppendInfo ? string.Join("", phases1.Select(p => $"{p.PhaseName}{Constants.GetAirSuperiority(p.Air.AirSuperiority)}\r\n")) : null); SetShootdown(AirStage1Friend, 1, true, needAppendInfo); SetShootdown(AirStage1Enemy, 1, false, needAppendInfo); void SetTouch(ImageLabel label, bool isFriend) { if (phases1.Any(p => p.GetTouchAircraft(isFriend) > 0)) { label.ImageAlign = ContentAlignment.MiddleLeft; label.ImageIndex = (int)ResourceManager.EquipmentContent.Seaplane; ToolTipInfo.SetToolTip(label, ToolTipInfo.GetToolTip(label) + "触接中\r\n" + string.Join("\r\n", phases1.Select(p => $"{p.PhaseName}{(KCDatabase.Instance.MasterEquipments[p.GetTouchAircraft(isFriend)]?.Name ?? "(なし)")}"))); } else { label.ImageAlign = ContentAlignment.MiddleCenter; label.ImageIndex = -1; } } SetTouch(AirStage1Friend, true); SetTouch(AirStage1Enemy, false); } else { AirSuperiority.Text = Constants.GetAirSuperiority(-1); ToolTipInfo.SetToolTip(AirSuperiority, null); ClearAircraftLabel(AirStage1Friend); ClearAircraftLabel(AirStage1Enemy); } if (phases[1].Stage2Enabled) { bool needAppendInfo = phases[0].Stage2Enabled || phases[2].Stage2Enabled; var phases2 = phases.Where(p => p.Stage2Enabled); SetShootdown(AirStage2Friend, 2, true, needAppendInfo); SetShootdown(AirStage2Enemy, 2, false, needAppendInfo); if (phases2.Any(p => p.Air.IsAACutinAvailable)) { AACutin.Text = "#" + string.Join("/", phases2.Select(p => p.Air.IsAACutinAvailable ? (p.Air.AACutInIndex + 1).ToString() : "-")); AACutin.ImageAlign = ContentAlignment.MiddleLeft; AACutin.ImageIndex = (int)ResourceManager.EquipmentContent.HighAngleGun; ToolTipInfo.SetToolTip(AACutin, "対空カットイン\r\n" + string.Join("\r\n", phases2.Select(p => p.PhaseName + (p.Air.IsAACutinAvailable ? $"{p.Air.AACutInShip.NameWithLevel}\r\nカットイン種別: {p.Air.AACutInKind} ({Constants.GetAACutinKind(p.Air.AACutInKind)})" : "(発動せず)")))); } else { ClearAACutinLabel(); } } else { ClearAircraftLabel(AirStage2Friend); ClearAircraftLabel(AirStage2Enemy); ClearAACutinLabel(); } }