<Compile Include="View\MaterialHistoryPanel.cs">\r
<SubType>Component</SubType>\r
</Compile>\r
+ <Compile Include="View\ShipInfoPanel.cs">\r
+ <SubType>Component</SubType>\r
+ </Compile>\r
<Compile Include="View\UpdateContext.cs" />\r
<Compile Include="View\AntiAirPanel.cs">\r
<SubType>Component</SubType>\r
{\r
this.components = new System.ComponentModel.Container();\r
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));\r
- this.panelShipInfo = new System.Windows.Forms.Panel();\r
- this.labelPresetAkashiTimer = new System.Windows.Forms.Label();\r
- this.linkLabelGuide = new System.Windows.Forms.LinkLabel();\r
- this.panelCombinedFleet = new System.Windows.Forms.Panel();\r
- this.panel7Ships = new System.Windows.Forms.Panel();\r
- this.panelBattleInfo = new System.Windows.Forms.Panel();\r
- this.labelEnemyFighterPower = new System.Windows.Forms.Label();\r
- this.labelEnemyFighterPowerCaption = new System.Windows.Forms.Label();\r
- this.labelFormation = new System.Windows.Forms.Label();\r
- this.labelResultRank = new System.Windows.Forms.Label();\r
- this.labelLoS = new System.Windows.Forms.Label();\r
- this.labelLoSCaption = new System.Windows.Forms.Label();\r
- this.labelFighterPower = new System.Windows.Forms.Label();\r
- this.labelFighterPowerCaption = new System.Windows.Forms.Label();\r
- this.labelCondTimerTitle = new System.Windows.Forms.Label();\r
- this.labelCondTimer = new System.Windows.Forms.Label();\r
this.labelAkashiRepairTimer = new System.Windows.Forms.Label();\r
this.labelNDockCaption = new System.Windows.Forms.Label();\r
this.labelConstruct = new System.Windows.Forms.Label();\r
this.questPanel = new KancolleSniffer.View.QuestPanel();\r
this.hqPanel = new KancolleSniffer.View.HqPanel();\r
this.materialHistoryPanel = new KancolleSniffer.View.MaterialHistoryPanel();\r
- this.panelShipInfo.SuspendLayout();\r
- this.panelBattleInfo.SuspendLayout();\r
+ this.shipInfoPanel = new KancolleSniffer.View.ShipInfoPanel();\r
this.contextMenuStripNotifyIcon.SuspendLayout();\r
this.contextMenuStripMain.SuspendLayout();\r
this.SuspendLayout();\r
// \r
- // panelShipInfo\r
- // \r
- this.panelShipInfo.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;\r
- this.panelShipInfo.Controls.Add(this.labelPresetAkashiTimer);\r
- this.panelShipInfo.Controls.Add(this.linkLabelGuide);\r
- this.panelShipInfo.Controls.Add(this.panelCombinedFleet);\r
- this.panelShipInfo.Controls.Add(this.panel7Ships);\r
- this.panelShipInfo.Controls.Add(this.panelBattleInfo);\r
- this.panelShipInfo.Controls.Add(this.labelLoS);\r
- this.panelShipInfo.Controls.Add(this.labelLoSCaption);\r
- this.panelShipInfo.Controls.Add(this.labelFighterPower);\r
- this.panelShipInfo.Controls.Add(this.labelFighterPowerCaption);\r
- this.panelShipInfo.Controls.Add(this.labelCondTimerTitle);\r
- this.panelShipInfo.Controls.Add(this.labelCondTimer);\r
- this.panelShipInfo.Location = new System.Drawing.Point(6, 57);\r
- this.panelShipInfo.Name = "panelShipInfo";\r
- this.panelShipInfo.Size = new System.Drawing.Size(220, 134);\r
- this.panelShipInfo.TabIndex = 2;\r
- // \r
- // labelPresetAkashiTimer\r
- // \r
- this.labelPresetAkashiTimer.Location = new System.Drawing.Point(2, 3);\r
- this.labelPresetAkashiTimer.Name = "labelPresetAkashiTimer";\r
- this.labelPresetAkashiTimer.Size = new System.Drawing.Size(32, 12);\r
- this.labelPresetAkashiTimer.TabIndex = 55;\r
- // \r
- // linkLabelGuide\r
- // \r
- this.linkLabelGuide.AutoSize = true;\r
- this.linkLabelGuide.Font = new System.Drawing.Font("MS UI Gothic", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(128)));\r
- this.linkLabelGuide.LinkArea = new System.Windows.Forms.LinkArea(0, 0);\r
- this.linkLabelGuide.Location = new System.Drawing.Point(31, 51);\r
- this.linkLabelGuide.Name = "linkLabelGuide";\r
- this.linkLabelGuide.Size = new System.Drawing.Size(158, 13);\r
- this.linkLabelGuide.TabIndex = 44;\r
- this.linkLabelGuide.Text = "右クリックでメニューが出ます。";\r
- // \r
- // panelCombinedFleet\r
- // \r
- this.panelCombinedFleet.Location = new System.Drawing.Point(0, 0);\r
- this.panelCombinedFleet.Name = "panelCombinedFleet";\r
- this.panelCombinedFleet.Size = new System.Drawing.Size(220, 113);\r
- this.panelCombinedFleet.TabIndex = 43;\r
- this.panelCombinedFleet.Visible = false;\r
- // \r
- // panel7Ships\r
- // \r
- this.panel7Ships.Location = new System.Drawing.Point(0, 0);\r
- this.panel7Ships.Name = "panel7Ships";\r
- this.panel7Ships.Size = new System.Drawing.Size(220, 115);\r
- this.panel7Ships.TabIndex = 0;\r
- this.panel7Ships.Visible = false;\r
- // \r
- // panelBattleInfo\r
- // \r
- this.panelBattleInfo.Controls.Add(this.labelEnemyFighterPower);\r
- this.panelBattleInfo.Controls.Add(this.labelEnemyFighterPowerCaption);\r
- this.panelBattleInfo.Controls.Add(this.labelFormation);\r
- this.panelBattleInfo.Controls.Add(this.labelResultRank);\r
- this.panelBattleInfo.Location = new System.Drawing.Point(59, 116);\r
- this.panelBattleInfo.Name = "panelBattleInfo";\r
- this.panelBattleInfo.Size = new System.Drawing.Size(157, 14);\r
- this.panelBattleInfo.TabIndex = 40;\r
- this.panelBattleInfo.Visible = false;\r
- // \r
- // labelEnemyFighterPower\r
- // \r
- this.labelEnemyFighterPower.Location = new System.Drawing.Point(129, 1);\r
- this.labelEnemyFighterPower.Name = "labelEnemyFighterPower";\r
- this.labelEnemyFighterPower.Size = new System.Drawing.Size(29, 12);\r
- this.labelEnemyFighterPower.TabIndex = 3;\r
- this.labelEnemyFighterPower.TextAlign = System.Drawing.ContentAlignment.MiddleRight;\r
- // \r
- // labelEnemyFighterPowerCaption\r
- // \r
- this.labelEnemyFighterPowerCaption.AutoSize = true;\r
- this.labelEnemyFighterPowerCaption.Location = new System.Drawing.Point(90, 1);\r
- this.labelEnemyFighterPowerCaption.Name = "labelEnemyFighterPowerCaption";\r
- this.labelEnemyFighterPowerCaption.Size = new System.Drawing.Size(41, 12);\r
- this.labelEnemyFighterPowerCaption.TabIndex = 2;\r
- this.labelEnemyFighterPowerCaption.Text = "敵制空";\r
- // \r
- // labelFormation\r
- // \r
- this.labelFormation.Location = new System.Drawing.Point(40, 1);\r
- this.labelFormation.Name = "labelFormation";\r
- this.labelFormation.Size = new System.Drawing.Size(48, 12);\r
- this.labelFormation.TabIndex = 1;\r
- // \r
- // labelResultRank\r
- // \r
- this.labelResultRank.Location = new System.Drawing.Point(1, 1);\r
- this.labelResultRank.Name = "labelResultRank";\r
- this.labelResultRank.Size = new System.Drawing.Size(42, 12);\r
- this.labelResultRank.TabIndex = 0;\r
- this.labelResultRank.Text = "判定";\r
- this.labelResultRank.Click += new System.EventHandler(this.labelResultRank_Click);\r
- // \r
- // labelLoS\r
- // \r
- this.labelLoS.Location = new System.Drawing.Point(85, 117);\r
- this.labelLoS.Name = "labelLoS";\r
- this.labelLoS.Size = new System.Drawing.Size(38, 12);\r
- this.labelLoS.TabIndex = 42;\r
- this.labelLoS.Text = "0.0";\r
- this.labelLoS.TextAlign = System.Drawing.ContentAlignment.MiddleRight;\r
- // \r
- // labelLoSCaption\r
- // \r
- this.labelLoSCaption.AutoSize = true;\r
- this.labelLoSCaption.Location = new System.Drawing.Point(59, 117);\r
- this.labelLoSCaption.Name = "labelLoSCaption";\r
- this.labelLoSCaption.Size = new System.Drawing.Size(29, 12);\r
- this.labelLoSCaption.TabIndex = 41;\r
- this.labelLoSCaption.Text = "索敵";\r
- // \r
- // labelFighterPower\r
- // \r
- this.labelFighterPower.Location = new System.Drawing.Point(28, 117);\r
- this.labelFighterPower.Name = "labelFighterPower";\r
- this.labelFighterPower.Size = new System.Drawing.Size(29, 12);\r
- this.labelFighterPower.TabIndex = 23;\r
- this.labelFighterPower.Text = "0";\r
- this.labelFighterPower.TextAlign = System.Drawing.ContentAlignment.MiddleRight;\r
- // \r
- // labelFighterPowerCaption\r
- // \r
- this.labelFighterPowerCaption.AutoSize = true;\r
- this.labelFighterPowerCaption.Location = new System.Drawing.Point(2, 117);\r
- this.labelFighterPowerCaption.Name = "labelFighterPowerCaption";\r
- this.labelFighterPowerCaption.Size = new System.Drawing.Size(29, 12);\r
- this.labelFighterPowerCaption.TabIndex = 23;\r
- this.labelFighterPowerCaption.Text = "制空";\r
- // \r
- // labelCondTimerTitle\r
- // \r
- this.labelCondTimerTitle.Location = new System.Drawing.Point(128, 117);\r
- this.labelCondTimerTitle.Name = "labelCondTimerTitle";\r
- this.labelCondTimerTitle.Size = new System.Drawing.Size(60, 12);\r
- this.labelCondTimerTitle.TabIndex = 39;\r
- // \r
- // labelCondTimer\r
- // \r
- this.labelCondTimer.AutoSize = true;\r
- this.labelCondTimer.Location = new System.Drawing.Point(186, 117);\r
- this.labelCondTimer.Name = "labelCondTimer";\r
- this.labelCondTimer.Size = new System.Drawing.Size(0, 12);\r
- this.labelCondTimer.TabIndex = 38;\r
- // \r
// labelAkashiRepairTimer\r
// \r
this.labelAkashiRepairTimer.Location = new System.Drawing.Point(179, 276);\r
this.materialHistoryPanel.TabIndex = 65;\r
this.materialHistoryPanel.Visible = false;\r
// \r
+ // shipInfoPanel\r
+ // \r
+ this.shipInfoPanel.AkashiRepairTimer = null;\r
+ this.shipInfoPanel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;\r
+ this.shipInfoPanel.CombinedFleet = false;\r
+ this.shipInfoPanel.Context = null;\r
+ this.shipInfoPanel.CurrentFleet = 0;\r
+ this.shipInfoPanel.Location = new System.Drawing.Point(6, 57);\r
+ this.shipInfoPanel.Name = "shipInfoPanel";\r
+ this.shipInfoPanel.ShowShipOnList = null;\r
+ this.shipInfoPanel.Size = new System.Drawing.Size(220, 134);\r
+ this.shipInfoPanel.TabIndex = 67;\r
+ // \r
// MainForm\r
// \r
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);\r
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\r
this.ClientSize = new System.Drawing.Size(232, 456);\r
this.ContextMenuStrip = this.contextMenuStripMain;\r
+ this.Controls.Add(this.shipInfoPanel);\r
this.Controls.Add(this.materialHistoryPanel);\r
this.Controls.Add(this.hqPanel);\r
this.Controls.Add(this.kdockPanel);\r
this.Controls.Add(this.labelQuest);\r
this.Controls.Add(this.labelConstruct);\r
this.Controls.Add(this.labelNDockCaption);\r
- this.Controls.Add(this.panelShipInfo);\r
this.Controls.Add(this.labelFleet1);\r
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;\r
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));\r
this.Load += new System.EventHandler(this.MainForm_Load);\r
this.Shown += new System.EventHandler(this.MainForm_Shown);\r
this.Resize += new System.EventHandler(this.MainForm_Resize);\r
- this.panelShipInfo.ResumeLayout(false);\r
- this.panelShipInfo.PerformLayout();\r
- this.panelBattleInfo.ResumeLayout(false);\r
- this.panelBattleInfo.PerformLayout();\r
this.contextMenuStripNotifyIcon.ResumeLayout(false);\r
this.contextMenuStripMain.ResumeLayout(false);\r
this.ResumeLayout(false);\r
}\r
\r
#endregion\r
- private System.Windows.Forms.Panel panelShipInfo;\r
private System.Windows.Forms.Label labelNDockCaption;\r
private System.Windows.Forms.Label labelConstruct;\r
private System.Windows.Forms.Label labelQuest;\r
private System.Windows.Forms.Label labelMissionCaption;\r
private System.Windows.Forms.Timer timerMain;\r
- private System.Windows.Forms.Label labelCondTimerTitle;\r
- private System.Windows.Forms.Label labelCondTimer;\r
private System.Windows.Forms.NotifyIcon notifyIconMain;\r
private System.Windows.Forms.ContextMenuStrip contextMenuStripMain;\r
private System.Windows.Forms.ToolStripMenuItem ConfigToolStripMenuItem;\r
private System.Windows.Forms.Label labelFleet3;\r
private System.Windows.Forms.Label labelCheckFleet2;\r
private System.Windows.Forms.Label labelFleet2;\r
- private System.Windows.Forms.Label labelFighterPower;\r
- private System.Windows.Forms.Label labelFighterPowerCaption;\r
private System.Windows.Forms.Label labelMaterialCaption;\r
private System.Windows.Forms.Label labelMaterialHistoryButton;\r
private System.Windows.Forms.Label labelRepairListButton;\r
private System.Windows.Forms.ToolStripMenuItem NotifyIconOpenToolStripMenuItem;\r
private System.Windows.Forms.ToolStripMenuItem NotifyIconExitToolStripMenuItem;\r
private System.Windows.Forms.ToolStripMenuItem listToolStripMenuItem;\r
- private System.Windows.Forms.Label labelLoS;\r
- private System.Windows.Forms.Label labelLoSCaption;\r
- private System.Windows.Forms.Panel panelBattleInfo;\r
- private System.Windows.Forms.Label labelEnemyFighterPower;\r
- private System.Windows.Forms.Label labelEnemyFighterPowerCaption;\r
- private System.Windows.Forms.Label labelFormation;\r
- private System.Windows.Forms.Label labelResultRank;\r
private System.Windows.Forms.ImageList imageListFuelSq;\r
private System.Windows.Forms.Label labelFuelSq1;\r
private System.Windows.Forms.ImageList imageListBullSq;\r
private System.Windows.Forms.ToolStripMenuItem LogToolStripMenuItem;\r
private System.Windows.Forms.ToolStripMenuItem CaptureToolStripMenuItem;\r
private System.Windows.Forms.Label labelAkashiRepairTimer;\r
- private System.Windows.Forms.Panel panelCombinedFleet;\r
private System.Windows.Forms.Label labelAkashiRepair;\r
- private System.Windows.Forms.Label labelPresetAkashiTimer;\r
private RepairListForMain panelRepairList;\r
- private System.Windows.Forms.Panel panel7Ships;\r
- private System.Windows.Forms.LinkLabel linkLabelGuide;\r
private System.Windows.Forms.Label labelClearQuest;\r
private QuestPanel questPanel;\r
private System.Windows.Forms.Label labelQuestCount;\r
private KDockPanel kdockPanel;\r
private HqPanel hqPanel;\r
private MaterialHistoryPanel materialHistoryPanel;\r
+ private ShipInfoPanel shipInfoPanel;\r
}\r
}\r
\r
using KancolleSniffer.Util;\r
using KancolleSniffer.View;\r
using Microsoft.CSharp.RuntimeBinder;\r
-using static System.Math;\r
using Clipboard = KancolleSniffer.Util.Clipboard;\r
using Timer = System.Windows.Forms.Timer;\r
\r
private readonly ProxyManager _proxyManager;\r
private readonly ResizableToolTip _toolTip = new ResizableToolTip();\r
private readonly ResizableToolTip _tooltipCopy = new ResizableToolTip {ShowAlways = false, AutomaticDelay = 0};\r
- private int _currentFleet;\r
- private bool _combinedFleet;\r
- private readonly MainShipLabels _mainLabels = new MainShipLabels();\r
private readonly ListFormGroup _listFormGroup;\r
\r
private readonly NotificationManager _notificationManager;\r
{\r
SetScaleFactorOfDpiScaling();\r
SetupFleetClick();\r
- CreateMainLabels();\r
- labelPresetAkashiTimer.BackColor = CustomColors.ColumnColors.Bright;\r
SetupQuestPanel();\r
+ shipInfoPanel.AkashiRepairTimer = labelAkashiRepairTimer;\r
+ shipInfoPanel.ShowShipOnList = ShowShipOnShipList;\r
panelRepairList.CreateLabels(panelRepairList_Click);\r
ndockPanel.SetClickHandler(labelNDockCaption);\r
missionPanel.SetClickHandler(labelMissionCaption);\r
\r
private void SetupUpdateable()\r
{\r
- _updateable = new IUpdateContext[] {hqPanel, missionPanel, kdockPanel, ndockPanel, materialHistoryPanel};\r
+ _updateable = new IUpdateContext[] {hqPanel, missionPanel, kdockPanel, ndockPanel, materialHistoryPanel, shipInfoPanel};\r
var context = new UpdateContext(Sniffer, Config, new NotifySubmitter(_notificationManager), () => _now);\r
foreach (var updateable in _updateable)\r
updateable.Context = context;\r
- _timers = new IUpdateTimers[] {missionPanel, kdockPanel, ndockPanel};\r
+ _timers = new IUpdateTimers[] {missionPanel, kdockPanel, ndockPanel, shipInfoPanel};\r
}\r
\r
private void SetScaleFactorOfDpiScaling()\r
Height += questPanel.Height - prevHeight;\r
}\r
\r
- private void CreateMainLabels()\r
- {\r
- _mainLabels.CreateAllShipLabels(new MainShipPanels\r
- {\r
- PanelShipInfo = panelShipInfo,\r
- Panel7Ships = panel7Ships,\r
- PanelCombinedFleet = panelCombinedFleet\r
- }, ShowShipOnShipList);\r
- }\r
-\r
private class NotifySubmitter : INotifySubmitter\r
{\r
private readonly NotificationManager _manager;\r
/// </summary>\r
private void MainForm_Shown(object sender, EventArgs e)\r
{\r
- // ReSharper disable once NotAccessedVariable\r
- IntPtr handle;\r
- foreach (var panel in new[] {panelShipInfo, panel7Ships, panelCombinedFleet})\r
- // ReSharper disable once RedundantAssignment\r
- handle = panel.Handle;\r
}\r
\r
private readonly FileSystemWatcher _watcher = new FileSystemWatcher\r
if (update == Sniffer.Update.Start)\r
{\r
hqPanel.Login.Visible = false;\r
- linkLabelGuide.Visible = false;\r
+ shipInfoPanel.Guide.Visible = false;\r
_started = true;\r
_notificationManager.StopAllRepeat();\r
return;\r
if (Config.HideOnMinimized && WindowState == FormWindowState.Minimized)\r
ShowInTaskbar = false;\r
if (Config.ShowHpInPercent)\r
- _mainLabels.ToggleHpPercent();\r
+ shipInfoPanel.ToggleHpPercent();\r
if (Config.ShipList.Visible)\r
_listFormGroup.Show();\r
ApplyConfig();\r
{\r
if (latest == current)\r
return;\r
- linkLabelGuide.Text = $"バージョン{latest}があります。";\r
- linkLabelGuide.LinkArea = new LinkArea(0, linkLabelGuide.Text.Length);\r
- linkLabelGuide.Click += (obj, ev) =>\r
+ var guide = shipInfoPanel.Guide;\r
+ guide.Text = $"バージョン{latest}があります。";\r
+ guide.LinkArea = new LinkArea(0, guide.Text.Length);\r
+ guide.Click += (obj, ev) =>\r
{\r
Process.Start("https://ja.osdn.net/rel/kancollesniffer/" + latest);\r
};\r
_listFormGroup.Close();\r
Sniffer.FlashLog();\r
Config.Location = (WindowState == FormWindowState.Normal ? Bounds : RestoreBounds).Location;\r
- Config.ShowHpInPercent = _mainLabels.ShowHpInPercent;\r
+ Config.ShowHpInPercent = shipInfoPanel.ShowHpInPercent;\r
Config.Save();\r
Sniffer.SaveState();\r
_proxyManager.Shutdown();\r
_listFormGroup.Main.ChangeWindowState(WindowState);\r
}\r
\r
- public TimeOutChecker SuppressActivate = new TimeOutChecker();\r
+ public readonly TimeOutChecker SuppressActivate = new TimeOutChecker();\r
\r
private void MainForm_Activated(object sender, EventArgs e)\r
{\r
var prev = CurrentAutoScaleDimensions;\r
foreach (var control in new Control[]\r
{\r
- this, linkLabelGuide, hqPanel.Login,\r
+ this, shipInfoPanel.Guide, hqPanel.Login,\r
_configDialog, _configDialog.NotificationConfigDialog,\r
contextMenuStripMain, _errorDialog\r
})\r
Sniffer.ItemCounter.Margin = Config.MarginEquips;\r
hqPanel.Update();\r
Sniffer.Achievement.ResetHours = Config.ResetHours;\r
- labelAkashiRepair.Visible = labelAkashiRepairTimer.Visible =\r
- labelPresetAkashiTimer.Visible = Config.UsePresetAkashi;\r
+ labelAkashiRepair.Visible = labelAkashiRepairTimer.Visible = Config.UsePresetAkashi;\r
Sniffer.WarnBadDamageWithDameCon = Config.WarnBadDamageWithDameCon;\r
}\r
\r
ProcessRequestMain(lines[0], lines[1], lines[2]);\r
}\r
\r
- private void ShowShipOnShipList(object sender, EventArgs ev)\r
+ private void ShowShipOnShipList(int id)\r
{\r
if (!_listFormGroup.Visible)\r
return;\r
- var idx = (int)((Control)sender).Tag;\r
- var ship = (_combinedFleet\r
- ? Sniffer.Fleets[0].Ships.Concat(Sniffer.Fleets[1].Ships).ToArray()\r
- : Sniffer.Fleets[_currentFleet].Ships)[idx];\r
- if (!ship.Empty)\r
- _listFormGroup.ShowShip(ship.Id);\r
+ _listFormGroup.ShowShip(id);\r
}\r
\r
-\r
private void UpdateItemInfo()\r
{\r
hqPanel.Update();\r
\r
private void UpdateShipInfo()\r
{\r
- SetCurrentFleet();\r
- SetCombined();\r
- UpdatePanelShipInfo();\r
+ shipInfoPanel.SetCurrentFleet();\r
+ shipInfoPanel.Update();\r
NotifyDamagedShip();\r
UpdateChargeInfo();\r
UpdateRepairList();\r
_listFormGroup.UpdateList();\r
}\r
\r
- private bool _inSortie;\r
-\r
- private void SetCurrentFleet()\r
- {\r
- var inSortie = Sniffer.InSortie;\r
- if (_inSortie || inSortie == -1)\r
- {\r
- _inSortie = inSortie != -1;\r
- return;\r
- }\r
- _inSortie = true;\r
- if (inSortie == 10)\r
- {\r
- _combinedFleet = true;\r
- _currentFleet = 0;\r
- }\r
- else\r
- {\r
- _combinedFleet = false;\r
- _currentFleet = inSortie;\r
- }\r
- }\r
-\r
- private bool _prevCombined;\r
-\r
- private void SetCombined()\r
- {\r
- if (Sniffer.IsCombinedFleet && !_prevCombined)\r
- {\r
- _combinedFleet = true;\r
- _currentFleet = 0;\r
- }\r
- _prevCombined = Sniffer.IsCombinedFleet;\r
- }\r
-\r
private void UpdatePanelShipInfo()\r
{\r
- var ships = Sniffer.Fleets[_currentFleet].ActualShips;\r
- panel7Ships.Visible = ships.Count == 7;\r
- _mainLabels.SetShipLabels(ships);\r
- ShowCombinedFleet();\r
+ shipInfoPanel.Update();\r
ShowCurrentFleetNumber();\r
- UpdateAkashiTimer();\r
- UpdateFighterPower(IsCombinedFighterPower);\r
- UpdateLoS();\r
- UpdateCondTimers();\r
- }\r
-\r
- private void ShowCombinedFleet()\r
- {\r
- if (!Sniffer.IsCombinedFleet)\r
- _combinedFleet = false;\r
- labelFleet1.Text = _combinedFleet ? CombinedName : "第一";\r
- panelCombinedFleet.Visible = _combinedFleet;\r
- if (_combinedFleet)\r
- _mainLabels.SetCombinedShipLabels(Sniffer.Fleets[0].ActualShips, Sniffer.Fleets[1].ActualShips);\r
+ labelFleet1.Text = shipInfoPanel.CombinedFleet ? CombinedName : "第一";\r
}\r
\r
private void ShowCurrentFleetNumber()\r
{\r
var labels = new[] {labelCheckFleet1, labelCheckFleet2, labelCheckFleet3, labelCheckFleet4};\r
for (var i = 0; i < labels.Length; i++)\r
- labels[i].Visible = _currentFleet == i;\r
+ labels[i].Visible = shipInfoPanel.CurrentFleet == i;\r
}\r
\r
- private bool IsCombinedFighterPower => _combinedFleet &&\r
- (Sniffer.Battle.BattleState == BattleState.None ||\r
- Sniffer.Battle.EnemyIsCombined);\r
-\r
private string CombinedName\r
{\r
get\r
_notificationManager.Flash();\r
}\r
\r
- private void UpdateFighterPower(bool combined)\r
- {\r
- var fleets = Sniffer.Fleets;\r
- var fp = combined\r
- ? fleets[0].FighterPower + fleets[1].FighterPower\r
- : fleets[_currentFleet].FighterPower;\r
- labelFighterPower.Text = fp.Min.ToString("D");\r
- var cr = combined\r
- ? fleets[0].ContactTriggerRate + fleets[1].ContactTriggerRate\r
- : fleets[_currentFleet].ContactTriggerRate;\r
- var text = "制空: " + (fp.Diff ? fp.RangeString : fp.Min.ToString()) +\r
- $" 触接: {cr * 100:f1}";\r
- _toolTip.SetToolTip(labelFighterPower, text);\r
- _toolTip.SetToolTip(labelFighterPowerCaption, text);\r
- }\r
-\r
- private void UpdateLoS()\r
- {\r
- var fleet = Sniffer.Fleets[_currentFleet];\r
- labelLoS.Text = RoundDown(fleet.GetLineOfSights(1)).ToString("F1");\r
- var text = $"係数2: {RoundDown(fleet.GetLineOfSights(2)):F1}\r\n" +\r
- $"係数3: {RoundDown(fleet.GetLineOfSights(3)):F1}\r\n" +\r
- $"係数4: {RoundDown(fleet.GetLineOfSights(4)):F1}";\r
- _toolTip.SetToolTip(labelLoS, text);\r
- _toolTip.SetToolTip(labelLoSCaption, text);\r
- }\r
-\r
- private double RoundDown(double number)\r
- {\r
- return Floor(number * 10) / 10.0;\r
- }\r
-\r
private void UpdateBattleInfo()\r
{\r
- ResetBattleInfo();\r
_listFormGroup.UpdateBattleResult();\r
_listFormGroup.UpdateAirBattleResult();\r
- if (Sniffer.Battle.BattleState == BattleState.None)\r
- return;\r
- panelBattleInfo.BringToFront();\r
- var battle = Sniffer.Battle;\r
- labelFormation.Text = new[] {"同航戦", "反航戦", "T字有利", "T字不利"}[battle.Formation[2] - 1];\r
- UpdateBattleFighterPower();\r
- if ((Config.Spoilers & Spoiler.ResultRank) != 0)\r
- ShowResultRank();\r
+ shipInfoPanel.UpdateBattleInfo();\r
}\r
\r
private void UpdateCellInfo()\r
_listFormGroup.UpdateCellInfo();\r
}\r
\r
- private void ResetBattleInfo()\r
- {\r
- labelFormation.Text = "";\r
- labelEnemyFighterPower.Text = "";\r
- labelFighterPower.ForeColor = DefaultForeColor;\r
- labelFighterPowerCaption.Text = "制空";\r
- labelResultRank.Text = "判定";\r
- panelBattleInfo.Visible = Sniffer.Battle.BattleState != BattleState.None;\r
- }\r
-\r
- private void UpdateBattleFighterPower()\r
- {\r
- UpdateEnemyFighterPower();\r
- var battle = Sniffer.Battle;\r
- labelFighterPower.ForeColor = AirControlLevelColor(battle);\r
- labelFighterPowerCaption.Text = AirControlLevelString(battle);\r
- if (battle.BattleState == BattleState.AirRaid)\r
- {\r
- UpdateAirRaidFighterPower();\r
- }\r
- else\r
- {\r
- UpdateFighterPower(Sniffer.IsCombinedFleet && battle.EnemyIsCombined);\r
- }\r
- }\r
-\r
- private void UpdateEnemyFighterPower()\r
- {\r
- var fp = Sniffer.Battle.EnemyFighterPower;\r
- labelEnemyFighterPower.Text = fp.AirCombat + fp.UnknownMark;\r
- var toolTip = fp.AirCombat == fp.Interception ? "" : "防空: " + fp.Interception + fp.UnknownMark;\r
- _toolTip.SetToolTip(labelEnemyFighterPower, toolTip);\r
- _toolTip.SetToolTip(labelEnemyFighterPowerCaption, toolTip);\r
- }\r
-\r
- private void UpdateAirRaidFighterPower()\r
- {\r
- var fp = Sniffer.Battle.FighterPower;\r
- labelFighterPower.Text = fp.Min.ToString();\r
- var toolTop = fp.Diff ? fp.RangeString : "";\r
- _toolTip.SetToolTip(labelFighterPower, toolTop);\r
- _toolTip.SetToolTip(labelFighterPowerCaption, toolTop);\r
- }\r
-\r
- private static Color AirControlLevelColor(BattleInfo battle)\r
- {\r
- return new[]\r
- {DefaultForeColor, DefaultForeColor, CUDColors.Blue, CUDColors.Green, CUDColors.Orange, CUDColors.Red}[\r
- battle.BattleState == BattleState.Night ? 0 : battle.AirControlLevel + 1];\r
- }\r
-\r
- private static string AirControlLevelString(BattleInfo battle)\r
- {\r
- return new[] {"制空", "拮抗", "確保", "優勢", "劣勢", "喪失"}[\r
- battle.BattleState == BattleState.Night ? 0 : battle.AirControlLevel + 1];\r
- }\r
-\r
- private void ShowResultRank()\r
- {\r
- var result = new[] {"完全S", "勝利S", "勝利A", "勝利B", "敗北C", "敗北D", "敗北E"};\r
- labelResultRank.Text = result[(int)Sniffer.Battle.ResultRank];\r
- }\r
-\r
- private void labelResultRank_Click(object sender, EventArgs e)\r
- {\r
- ShowResultRank();\r
- }\r
-\r
private void UpdateChargeInfo()\r
{\r
var fuelSq = new[] {labelFuelSq1, labelFuelSq2, labelFuelSq3, labelFuelSq4};\r
{\r
foreach (var timer in _timers)\r
timer.UpdateTimers();\r
- UpdateCondTimers();\r
- UpdateAkashiTimer();\r
_timerEnabled = true;\r
}\r
\r
SetPreNotification(key, fleet, subject);\r
}\r
\r
- private void UpdateCondTimers()\r
- {\r
- DateTime timer;\r
- if (_combinedFleet)\r
- {\r
- var timer1 = Sniffer.GetConditionTimer(0);\r
- var timer2 = Sniffer.GetConditionTimer(1);\r
- timer = timer2 > timer1 ? timer2 : timer1;\r
- }\r
- else\r
- {\r
- timer = Sniffer.GetConditionTimer(_currentFleet);\r
- }\r
- if (timer == DateTime.MinValue)\r
- {\r
- labelCondTimerTitle.Text = "";\r
- labelCondTimer.Text = "";\r
- return;\r
- }\r
- var span = TimeSpan.FromSeconds(Ceiling((timer - _now).TotalSeconds));\r
- if (span >= TimeSpan.FromMinutes(9) && Config.NotifyConditions.Contains(40))\r
- {\r
- labelCondTimerTitle.Text = "cond40まで";\r
- labelCondTimer.Text = (span - TimeSpan.FromMinutes(9)).ToString(@"mm\:ss");\r
- labelCondTimer.ForeColor = DefaultForeColor;\r
- }\r
- else\r
- {\r
- labelCondTimerTitle.Text = "cond49まで";\r
- labelCondTimer.Text = (span >= TimeSpan.Zero ? span : TimeSpan.Zero).ToString(@"mm\:ss");\r
- labelCondTimer.ForeColor = span <= TimeSpan.Zero ? CUDColors.Red : DefaultForeColor;\r
- }\r
- }\r
-\r
private void NotifyCondTimers()\r
{\r
var notice = Sniffer.GetConditionNotice(_prev, _now);\r
}\r
}\r
\r
- private void UpdateAkashiTimer()\r
- {\r
- if (Config.UsePresetAkashi)\r
- UpdatePresetAkashiTimer();\r
- _mainLabels.SetAkashiTimer(Sniffer.Fleets[_currentFleet].ActualShips,\r
- Sniffer.AkashiTimer.GetTimers(_currentFleet, _now));\r
- }\r
-\r
- private void UpdatePresetAkashiTimer()\r
- {\r
- var akashi = Sniffer.AkashiTimer;\r
- var span = akashi.GetPresetDeckTimer(_now);\r
- var color = span == TimeSpan.Zero && akashi.CheckPresetRepairing() ? CUDColors.Red : DefaultForeColor;\r
- var text = span == TimeSpan.MinValue ? "" : span.ToString(@"mm\:ss");\r
- labelAkashiRepairTimer.ForeColor = color;\r
- labelAkashiRepairTimer.Text = text;\r
- if (akashi.CheckPresetRepairing() && !akashi.CheckRepairing(_currentFleet, _now))\r
- {\r
- labelPresetAkashiTimer.ForeColor = color;\r
- labelPresetAkashiTimer.Text = text;\r
- }\r
- else\r
- {\r
- labelPresetAkashiTimer.ForeColor = DefaultForeColor;\r
- labelPresetAkashiTimer.Text = "";\r
- }\r
- }\r
-\r
private void NotifyAkashiTimer()\r
{\r
var akashi = Sniffer.AkashiTimer;\r
if (!_started)\r
return;\r
var fleet = (int)((Label)sender).Tag;\r
- if (_currentFleet == fleet)\r
+ if (shipInfoPanel.CurrentFleet == fleet)\r
return;\r
- _combinedFleet = false;\r
- _currentFleet = fleet;\r
+ shipInfoPanel.CombinedFleet = false;\r
+ shipInfoPanel.CurrentFleet = fleet;\r
UpdatePanelShipInfo();\r
}\r
\r
{\r
if (!_started)\r
return;\r
- if (_currentFleet != 0)\r
+ if (shipInfoPanel.CurrentFleet != 0)\r
{\r
labelFleet_Click(sender, e);\r
return;\r
{\r
_clickSemaphore.Release();\r
}\r
- _combinedFleet = Sniffer.IsCombinedFleet && !_combinedFleet;\r
+ shipInfoPanel.CombinedFleet = Sniffer.IsCombinedFleet && !shipInfoPanel.CombinedFleet;\r
UpdatePanelShipInfo();\r
}\r
\r
private void labelFleet1_MouseHover(object sender, EventArgs e)\r
{\r
- labelFleet1.Text = _currentFleet == 0 && Sniffer.IsCombinedFleet && !_combinedFleet ? "連合" : "第一";\r
+ labelFleet1.Text = shipInfoPanel.CurrentFleet == 0 && Sniffer.IsCombinedFleet && !shipInfoPanel.CombinedFleet ? "連合" : "第一";\r
}\r
\r
private void labelFleet1_MouseLeave(object sender, EventArgs e)\r
{\r
- labelFleet1.Text = _combinedFleet ? CombinedName : "第一";\r
+ labelFleet1.Text = shipInfoPanel.CombinedFleet ? CombinedName : "第一";\r
}\r
\r
private void labelFleet_DoubleClick(object sender, EventArgs e)\r
return;\r
_doubleClickSemaphore.Release();\r
var text = TextGenerator.GenerateFleetData(Sniffer, 0);\r
- if (_combinedFleet)\r
+ if (shipInfoPanel.CombinedFleet)\r
text += TextGenerator.GenerateFleetData(Sniffer, 1);\r
CopyFleetText(text, (Label)sender);\r
}\r
--- /dev/null
+using System;\r
+using System.Drawing;\r
+using System.Linq;\r
+using System.Windows.Forms;\r
+using KancolleSniffer.Model;\r
+\r
+namespace KancolleSniffer.View\r
+{\r
+ public class ShipInfoPanel : PanelWithToolTip, IUpdateTimers\r
+ {\r
+ private readonly Panel _combinedFleet = new Panel\r
+ {\r
+ Location = new Point(0, 0),\r
+ Size = new Size(220, 113),\r
+ Visible = false\r
+ };\r
+\r
+ private readonly Panel _7Ships = new Panel\r
+ {\r
+ Location = new Point(0, 0),\r
+ Size = new Size(220, 113),\r
+ Visible = false\r
+ };\r
+\r
+ private readonly Panel _battleInfo = new Panel\r
+ {\r
+ Location = new Point(59, 116),\r
+ Size = new Size(157, 14),\r
+ Visible = false\r
+ };\r
+\r
+ private readonly Label _presetAkashiTimer = new Label\r
+ {\r
+ Location = new Point(2, 3),\r
+ Size = new Size(32, 12),\r
+ BackColor = CustomColors.ColumnColors.Bright\r
+ };\r
+\r
+ public LinkLabel Guide { get; } = new LinkLabel\r
+ {\r
+ AutoSize = true,\r
+ Font = new Font("MS UI Gothic", 9.75F, FontStyle.Regular, GraphicsUnit.Point, 128),\r
+ LinkArea = new LinkArea(0, 0),\r
+ Location = new Point(31, 51),\r
+ Text = "右クリックでメニューが出ます。"\r
+ };\r
+\r
+ private readonly Label _enemyFighterPower = new Label\r
+ {\r
+ Location = new Point(129, 1),\r
+ Size = new Size(29, 12),\r
+ TextAlign = ContentAlignment.MiddleRight\r
+ };\r
+\r
+ private readonly Label _enemyFighterPowerCaption = new Label\r
+ {\r
+ AutoSize = true,\r
+ Location = new Point(90, 1),\r
+ Text = "敵制空"\r
+ };\r
+\r
+ private readonly Label _formation = new Label\r
+ {\r
+ Location = new Point(40, 1),\r
+ Size = new Size(48, 12)\r
+ };\r
+\r
+ private readonly Label _resultRank = new Label\r
+ {\r
+ Location = new Point(1, 1),\r
+ Size = new Size(42, 12),\r
+ TabIndex = 0,\r
+ Text = "判定"\r
+ };\r
+\r
+ private readonly Label _lineOfSight = new Label\r
+ {\r
+ Location = new Point(85, 117),\r
+ Size = new Size(38, 12),\r
+ Text = "0.0",\r
+ TextAlign = ContentAlignment.MiddleRight\r
+ };\r
+\r
+ private readonly Label _lineOfSightCaption = new Label\r
+ {\r
+ AutoSize = true,\r
+ Location = new Point(59, 117),\r
+ Text = "索敵"\r
+ };\r
+\r
+ private readonly Label _fighterPower = new Label\r
+ {\r
+ Location = new Point(28, 117),\r
+ Size = new Size(29, 12),\r
+ Text = "0",\r
+ TextAlign = ContentAlignment.MiddleRight\r
+ };\r
+\r
+ private readonly Label _fighterPowerCaption = new Label\r
+ {\r
+ AutoSize = true,\r
+ Location = new Point(2, 117),\r
+ Text = "制空"\r
+ };\r
+\r
+ private readonly Label _condTimerCaption = new Label\r
+ {\r
+ Location = new Point(128, 117),\r
+ Size = new Size(60, 12)\r
+ };\r
+\r
+ private readonly Label _condTimer = new Label\r
+ {\r
+ AutoSize = true,\r
+ Location = new Point(186, 117)\r
+ };\r
+\r
+ private readonly MainShipLabels _mainLabels = new MainShipLabels();\r
+\r
+ public UpdateContext Context { get; set; }\r
+\r
+ public int CurrentFleet { get; set; }\r
+\r
+ public bool CombinedFleet { get; set; }\r
+\r
+ public Action<int> ShowShipOnList { get; set; }\r
+\r
+ public ShipInfoPanel()\r
+ {\r
+ Controls.AddRange(new Control[] {Guide, _presetAkashiTimer, _combinedFleet, _7Ships});\r
+ BorderStyle = BorderStyle.FixedSingle;\r
+ _mainLabels.CreateAllShipLabels(new MainShipPanels\r
+ {\r
+ PanelShipInfo = this,\r
+ Panel7Ships = _7Ships,\r
+ PanelCombinedFleet = _combinedFleet\r
+ }, ShipClickHandler);\r
+ _battleInfo.Controls.AddRange(new Control[]\r
+ {\r
+ _enemyFighterPower, _enemyFighterPowerCaption, _formation, _resultRank\r
+ });\r
+ Controls.AddRange(new Control[]\r
+ {\r
+ _battleInfo,\r
+ _lineOfSight, _lineOfSightCaption, _fighterPower, _fighterPowerCaption, _condTimer, _condTimerCaption\r
+ });\r
+ _resultRank.Click += ResultRankClick;\r
+ Size = new Size(220, 134);\r
+ }\r
+\r
+ private void ShipClickHandler(object sender, EventArgs e)\r
+ {\r
+ var idx = (int)((Control)sender).Tag;\r
+ var ship = (CombinedFleet\r
+ ? Context.Sniffer.Fleets[0].Ships.Concat(Context.Sniffer.Fleets[1].Ships)\r
+ : Context.Sniffer.Fleets[CurrentFleet].Ships).ElementAt(idx);\r
+ if (!ship.Empty)\r
+ ShowShipOnList(ship.Id);\r
+ }\r
+\r
+ public void ToggleHpPercent()\r
+ {\r
+ _mainLabels.ToggleHpPercent();\r
+ }\r
+\r
+ public bool ShowHpInPercent => _mainLabels.ShowHpInPercent;\r
+\r
+ private bool _inSortie;\r
+\r
+ public void SetCurrentFleet()\r
+ {\r
+ var inSortie = Context.Sniffer.InSortie;\r
+ if (_inSortie || inSortie == -1)\r
+ {\r
+ _inSortie = inSortie != -1;\r
+ return;\r
+ }\r
+ _inSortie = true;\r
+ if (inSortie == 10)\r
+ {\r
+ CombinedFleet = true;\r
+ CurrentFleet = 0;\r
+ }\r
+ else\r
+ {\r
+ CombinedFleet = false;\r
+ CurrentFleet = inSortie;\r
+ }\r
+ SetCombined();\r
+ }\r
+\r
+ private bool _prevCombined;\r
+\r
+ private void SetCombined()\r
+ {\r
+ if (Context.Sniffer.IsCombinedFleet && !_prevCombined)\r
+ {\r
+ CombinedFleet = true;\r
+ CurrentFleet = 0;\r
+ }\r
+ _prevCombined = Context.Sniffer.IsCombinedFleet;\r
+ }\r
+\r
+ public new void Update()\r
+ {\r
+ var ships = Context.Sniffer.Fleets[CurrentFleet].ActualShips;\r
+ _7Ships.Visible = ships.Count == 7;\r
+ _mainLabels.SetShipLabels(ships);\r
+ ShowCombinedFleet();\r
+ _presetAkashiTimer.Visible = Context.Config.UsePresetAkashi;\r
+ UpdateAkashiTimer();\r
+ UpdateFighterPower(IsCombinedFighterPower);\r
+ UpdateLoS();\r
+ UpdateCondTimers();\r
+ }\r
+\r
+ private void ShowCombinedFleet()\r
+ {\r
+ if (!Context.Sniffer.IsCombinedFleet)\r
+ CombinedFleet = false;\r
+ _combinedFleet.Visible = CombinedFleet;\r
+ if (CombinedFleet)\r
+ {\r
+ _mainLabels.SetCombinedShipLabels(Context.Sniffer.Fleets[0].ActualShips,\r
+ Context.Sniffer.Fleets[1].ActualShips);\r
+ }\r
+ }\r
+\r
+ private bool IsCombinedFighterPower => CombinedFleet &&\r
+ (Context.Sniffer.Battle.BattleState == BattleState.None ||\r
+ Context.Sniffer.Battle.EnemyIsCombined);\r
+\r
+ private void UpdateFighterPower(bool combined)\r
+ {\r
+ var fleets = Context.Sniffer.Fleets;\r
+ var fp = combined\r
+ ? fleets[0].FighterPower + fleets[1].FighterPower\r
+ : fleets[CurrentFleet].FighterPower;\r
+ _fighterPower.Text = fp.Min.ToString("D");\r
+ var cr = combined\r
+ ? fleets[0].ContactTriggerRate + fleets[1].ContactTriggerRate\r
+ : fleets[CurrentFleet].ContactTriggerRate;\r
+ var text = "制空: " + (fp.Diff ? fp.RangeString : fp.Min.ToString()) +\r
+ $" 触接: {cr * 100:f1}";\r
+ ToolTip.SetToolTip(_fighterPower, text);\r
+ ToolTip.SetToolTip(_fighterPowerCaption, text);\r
+ }\r
+\r
+ private void UpdateLoS()\r
+ {\r
+ var fleet = Context.Sniffer.Fleets[CurrentFleet];\r
+ _lineOfSight.Text = RoundDown(fleet.GetLineOfSights(1)).ToString("F1");\r
+ var text = $"係数2: {RoundDown(fleet.GetLineOfSights(2)):F1}\r\n" +\r
+ $"係数3: {RoundDown(fleet.GetLineOfSights(3)):F1}\r\n" +\r
+ $"係数4: {RoundDown(fleet.GetLineOfSights(4)):F1}";\r
+ ToolTip.SetToolTip(_lineOfSight, text);\r
+ ToolTip.SetToolTip(_lineOfSightCaption, text);\r
+ }\r
+\r
+ private double RoundDown(double number)\r
+ {\r
+ return Math.Floor(number * 10) / 10.0;\r
+ }\r
+\r
+ public void UpdateBattleInfo()\r
+ {\r
+ ResetBattleInfo();\r
+ if (Context.Sniffer.Battle.BattleState == BattleState.None)\r
+ return;\r
+ _battleInfo.BringToFront();\r
+ var battle = Context.Sniffer.Battle;\r
+ _formation.Text = new[] {"同航戦", "反航戦", "T字有利", "T字不利"}[battle.Formation[2] - 1];\r
+ UpdateBattleFighterPower();\r
+ if ((Context.Config.Spoilers & Spoiler.ResultRank) != 0)\r
+ ShowResultRank();\r
+ }\r
+\r
+ private void ResetBattleInfo()\r
+ {\r
+ _formation.Text = "";\r
+ _enemyFighterPower.Text = "";\r
+ _fighterPower.ForeColor = DefaultForeColor;\r
+ _fighterPowerCaption.Text = "制空";\r
+ _resultRank.Text = "判定";\r
+ _battleInfo.Visible = Context.Sniffer.Battle.BattleState != BattleState.None;\r
+ }\r
+\r
+ private void UpdateBattleFighterPower()\r
+ {\r
+ UpdateEnemyFighterPower();\r
+ var battle = Context.Sniffer.Battle;\r
+ _fighterPower.ForeColor = AirControlLevelColor(battle);\r
+ _fighterPowerCaption.Text = AirControlLevelString(battle);\r
+ if (battle.BattleState == BattleState.AirRaid)\r
+ {\r
+ UpdateAirRaidFighterPower();\r
+ }\r
+ else\r
+ {\r
+ UpdateFighterPower(Context.Sniffer.IsCombinedFleet && battle.EnemyIsCombined);\r
+ }\r
+ }\r
+\r
+ private void UpdateEnemyFighterPower()\r
+ {\r
+ var fp = Context.Sniffer.Battle.EnemyFighterPower;\r
+ _enemyFighterPower.Text = fp.AirCombat + fp.UnknownMark;\r
+ var toolTip = fp.AirCombat == fp.Interception ? "" : "防空: " + fp.Interception + fp.UnknownMark;\r
+ ToolTip.SetToolTip(_enemyFighterPower, toolTip);\r
+ ToolTip.SetToolTip(_enemyFighterPowerCaption, toolTip);\r
+ }\r
+\r
+ private void UpdateAirRaidFighterPower()\r
+ {\r
+ var fp = Context.Sniffer.Battle.FighterPower;\r
+ _fighterPower.Text = fp.Min.ToString();\r
+ var toolTop = fp.Diff ? fp.RangeString : "";\r
+ ToolTip.SetToolTip(_fighterPower, toolTop);\r
+ ToolTip.SetToolTip(_fighterPowerCaption, toolTop);\r
+ }\r
+\r
+ private static Color AirControlLevelColor(BattleInfo battle)\r
+ {\r
+ return new[]\r
+ {DefaultForeColor, DefaultForeColor, CUDColors.Blue, CUDColors.Green, CUDColors.Orange, CUDColors.Red}[\r
+ battle.BattleState == BattleState.Night ? 0 : battle.AirControlLevel + 1];\r
+ }\r
+\r
+ private static string AirControlLevelString(BattleInfo battle)\r
+ {\r
+ return new[] {"制空", "拮抗", "確保", "優勢", "劣勢", "喪失"}[\r
+ battle.BattleState == BattleState.Night ? 0 : battle.AirControlLevel + 1];\r
+ }\r
+\r
+ private void ShowResultRank()\r
+ {\r
+ var result = new[] {"完全S", "勝利S", "勝利A", "勝利B", "敗北C", "敗北D", "敗北E"};\r
+ _resultRank.Text = result[(int)Context.Sniffer.Battle.ResultRank];\r
+ }\r
+\r
+ private void ResultRankClick(object sender, EventArgs e)\r
+ {\r
+ ShowResultRank();\r
+ }\r
+\r
+ private void UpdateCondTimers()\r
+ {\r
+ DateTime timer;\r
+ if (CombinedFleet)\r
+ {\r
+ var timer1 = Context.Sniffer.GetConditionTimer(0);\r
+ var timer2 = Context.Sniffer.GetConditionTimer(1);\r
+ timer = timer2 > timer1 ? timer2 : timer1;\r
+ }\r
+ else\r
+ {\r
+ timer = Context.Sniffer.GetConditionTimer(CurrentFleet);\r
+ }\r
+ if (timer == DateTime.MinValue)\r
+ {\r
+ _condTimerCaption.Text = "";\r
+ _condTimer.Text = "";\r
+ return;\r
+ }\r
+ var span = TimeSpan.FromSeconds(Math.Ceiling((timer - Context.GetNow()).TotalSeconds));\r
+ if (span >= TimeSpan.FromMinutes(9) && Context.Config.NotifyConditions.Contains(40))\r
+ {\r
+ _condTimerCaption.Text = "cond40まで";\r
+ _condTimer.Text = (span - TimeSpan.FromMinutes(9)).ToString(@"mm\:ss");\r
+ _condTimer.ForeColor = DefaultForeColor;\r
+ }\r
+ else\r
+ {\r
+ _condTimerCaption.Text = "cond49まで";\r
+ _condTimer.Text = (span >= TimeSpan.Zero ? span : TimeSpan.Zero).ToString(@"mm\:ss");\r
+ _condTimer.ForeColor = span <= TimeSpan.Zero ? CUDColors.Red : DefaultForeColor;\r
+ }\r
+ }\r
+\r
+ public Label AkashiRepairTimer { get; set; }\r
+\r
+ public void UpdateTimers()\r
+ {\r
+ UpdateAkashiTimer();\r
+ UpdatePresetAkashiTimer();\r
+ }\r
+\r
+ private void UpdateAkashiTimer()\r
+ {\r
+ if (Context.Config.UsePresetAkashi)\r
+ UpdatePresetAkashiTimer();\r
+ _mainLabels.SetAkashiTimer(Context.Sniffer.Fleets[CurrentFleet].ActualShips,\r
+ Context.Sniffer.AkashiTimer.GetTimers(CurrentFleet, Context.GetNow()));\r
+ }\r
+\r
+ private void UpdatePresetAkashiTimer()\r
+ {\r
+ var now = Context.GetNow();\r
+ var akashi = Context.Sniffer.AkashiTimer;\r
+ var span = akashi.GetPresetDeckTimer(now);\r
+ var color = span == TimeSpan.Zero && akashi.CheckPresetRepairing() ? CUDColors.Red : DefaultForeColor;\r
+ var text = span == TimeSpan.MinValue ? "" : span.ToString(@"mm\:ss");\r
+ AkashiRepairTimer.ForeColor = color;\r
+ AkashiRepairTimer.Text = text;\r
+ if (akashi.CheckPresetRepairing() && !akashi.CheckRepairing(CurrentFleet, now))\r
+ {\r
+ _presetAkashiTimer.ForeColor = color;\r
+ _presetAkashiTimer.Text = text;\r
+ }\r
+ else\r
+ {\r
+ _presetAkashiTimer.ForeColor = DefaultForeColor;\r
+ _presetAkashiTimer.Text = "";\r
+ }\r
+ }\r
+ }\r
+}
\ No newline at end of file