// 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.ComponentModel;\r
using System.Drawing;\r
using System.Windows.Forms;\r
\r
public int EnemyLost { get; set; }\r
}\r
\r
- public StageResult Stage1 { get; set; } = new StageResult();\r
- public StageResult Stage2 { get; set; } = new StageResult();\r
+ public class AirFireResult\r
+ {\r
+ public string ShipName { get; set; }\r
+ public int Kind { get; set; }\r
+ public string[] Items { get; set; }\r
+ }\r
+\r
+ public string PhaseName { get; set; }\r
+ public int AirControlLevel { get; set; }\r
+ public StageResult Stage1 { get; set; }\r
+ public StageResult Stage2 { get; set; }\r
+ public AirFireResult AirFire { get; set; }\r
}\r
\r
+ [DesignerCategory("Code")]\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 AirBattleResult[] _resultList;\r
+ private int _resultIndex;\r
+ private readonly ShipLabel _ciShipName;\r
+ private readonly Label _ciKind;\r
+ private readonly ResizableToolTip _toolTip = new ResizableToolTip{ShowAlways = true};\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
+ const int ci = 168;\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(122, 6), AutoSize = true},\r
+ new Label {Text = "CI", Location = new Point(ci, 4), AutoSize = true}\r
};\r
Controls.AddRange(labels);\r
+ const int left = 53;\r
+ const int space = 55;\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 + 34 + space * fe, top + 14 * stage),\r
+ Size = new Size(24, 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 + 21 + space * 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
- Size = new Size(23, 12),\r
- TextAlign = ContentAlignment.TopRight,\r
+ Location = new Point(left + space * fe, top + 14 * stage),\r
+ Size = new Size(24, 12),\r
+ TextAlign = ContentAlignment.TopRight\r
});\r
}\r
}\r
+ Controls.Add(_ciShipName = new ShipLabel\r
+ {\r
+ Location = new Point(ci, top),\r
+ Size = new Size((int)ShipNameWidth.CiShipName, 12)\r
+ });\r
+ Controls.Add(_ciKind = new Label\r
+ {\r
+ Location = new Point(ci, top + 14),\r
+ Size = new Size(24, 12)\r
+ });\r
+ _phaseName.Click += PhaseNameOnClick;\r
+ }\r
+\r
+ public void SetResult(List<AirBattleResult> resultList)\r
+ {\r
+ _resultList = resultList.ToArray();\r
+ if (_resultList.Length == 0)\r
+ {\r
+ ResultRemained = false;\r
+ ClearResult();\r
+ return;\r
+ }\r
+ _resultIndex = _resultList.Length - 1;\r
+ if (!ShowResultAutomatic)\r
+ {\r
+ ResultRemained = true;\r
+ ClearResult();\r
+ return;\r
+ }\r
+ ShowResult();\r
+ ResultRemained = _resultList.Length > 1;\r
+ _resultIndex = 0;\r
}\r
\r
- public void SetResult(AirBattleResult result)\r
+ private void PhaseNameOnClick(object sender, EventArgs eventArgs)\r
{\r
+ if (_resultList == null || _resultList.Length == 0)\r
+ return;\r
+ ShowResult();\r
+ if (_resultList.Length == 1)\r
+ ResultRemained = false;\r
+ _resultIndex = (_resultIndex + 1) % _resultList.Length;\r
+ }\r
+\r
+ private void ShowResult()\r
+ {\r
+ if (_resultIndex >= _resultList.Length)\r
+ return;\r
+ var result = _resultList[_resultIndex];\r
+ _phaseName.Text = result.PhaseName;\r
+ var color = new[] {DefaultForeColor, CUDColor.Blue, CUDColor.Green, CUDColor.Orange, CUDColor.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][0].Text = $"{stage.EnemyCount}";\r
labels[1][1].Text = $"{stage.EnemyCount - stage.EnemyLost}";\r
}\r
+ ShowAirFireResult();\r
+ }\r
+\r
+ private void ShowAirFireResult()\r
+ {\r
+ var result = _resultList[_resultIndex];\r
+ if (result.AirFire == null)\r
+ {\r
+ _ciShipName.SetName(null);\r
+ _ciKind.Text = "";\r
+ _toolTip.SetToolTip(_ciKind, "");\r
+ }\r
+ else\r
+ {\r
+ _ciShipName.SetName(result.AirFire.ShipName, ShipNameWidth.CiShipName);\r
+ _ciKind.Text = result.AirFire.Kind.ToString();\r
+ _toolTip.SetToolTip(_ciKind, string.Join("\r\n", result.AirFire.Items));\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
+ _ciShipName.SetName(null);\r
+ _ciKind.Text = "";\r
+ _toolTip.SetToolTip(_ciKind, "");\r
+ }\r
+\r
+ protected override void ScaleControl(SizeF factor, BoundsSpecified specified)\r
+ {\r
+ base.ScaleControl(factor, specified);\r
+ if (factor.Height > 1)\r
+ _toolTip.Font = new Font(_toolTip.Font.FontFamily, _toolTip.Font.Size * factor.Height);\r
}\r
}\r
}
\ No newline at end of file