Esempio n. 1
0
		/// <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();
			}
		}