OSDN Git Service

戦況のネタバレ具合を制御できるようにする
authorKazuhiro Fujieda <fujieda@users.osdn.me>
Thu, 4 Jan 2018 12:11:25 +0000 (21:11 +0900)
committerKazuhiro Fujieda <fujieda@users.osdn.me>
Sat, 27 Jan 2018 08:33:59 +0000 (17:33 +0900)
KancolleSniffer/BattleInfo.cs
KancolleSniffer/BattleResultPanel.cs
KancolleSniffer/Config.cs
KancolleSniffer/ConfigDialog.Designer.cs
KancolleSniffer/ConfigDialog.cs
KancolleSniffer/ListForm.Designer.cs
KancolleSniffer/ListForm.cs
KancolleSniffer/MainForm.cs

index c083ebe..8cd90f2 100644 (file)
@@ -157,6 +157,23 @@ namespace KancolleSniffer
                 : new Record[0];\r
         }\r
 \r
+        private void SetResult()\r
+        {\r
+            Result = new BattleResult\r
+            {\r
+                Friend = new BattleResult.Combined\r
+                {\r
+                    Main = _friend.Select(r => r.SnapShot).ToArray(),\r
+                    Guard = _guard.Select(r => r.SnapShot).ToArray()\r
+                },\r
+                Enemy = new BattleResult.Combined\r
+                {\r
+                    Main = _enemy.Select(r => r.SnapShot).ToArray(),\r
+                    Guard = _enemyGuard.Select(r => r.SnapShot).ToArray()\r
+                }\r
+            };\r
+        }\r
+\r
         private void FlagshipRecovery(string request, ShipStatus flagship)\r
         {\r
             var type = int.Parse(HttpUtility.ParseQueryString(request)["api_recovery_type"] ?? "0");\r
@@ -492,23 +509,6 @@ namespace KancolleSniffer
                 _shipInfo.ClearBadlyDamagedShips();\r
         }\r
 \r
-        private void SetResult()\r
-        {\r
-            Result = new BattleResult\r
-            {\r
-                Friend = new BattleResult.Combined\r
-                {\r
-                    Main = _friend.Select(r => r.SnapShot).ToArray(),\r
-                    Guard = _guard.Select(r => r.SnapShot).ToArray()\r
-                },\r
-                Enemy = new BattleResult.Combined\r
-                {\r
-                    Main = _enemy.Select(r => r.SnapShot).ToArray(),\r
-                    Guard = _enemyGuard.Select(r => r.SnapShot).ToArray()\r
-                }\r
-            };\r
-        }\r
-\r
         public void SetEscapeShips(dynamic json)\r
         {\r
             _escapingShips.Clear();\r
index f816e91..1046e3f 100644 (file)
@@ -12,6 +12,7 @@
 // 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.Linq;\r
@@ -30,6 +31,11 @@ namespace KancolleSniffer
         private bool _hpPercent;\r
         private readonly List<ShipLabel> _hpLabels = new List<ShipLabel>();\r
         private readonly ToolTip _toolTip = new ToolTip {ShowAlways = true};\r
+        private readonly BattleInfo.BattleResult[] _result = new BattleInfo.BattleResult[2];\r
+        private Label _phaseLabel;\r
+        private BattleState _prevBattleState;\r
+\r
+        public bool Spoiler { get; set; }\r
 \r
         public BattleResultPanel()\r
         {\r
@@ -47,9 +53,102 @@ namespace KancolleSniffer
 \r
         public void Update(Sniffer sniffer)\r
         {\r
+\r
+            if (_prevBattleState == BattleState.None)\r
+                _result[0] = _result[1] = null;\r
+            var state = _prevBattleState = sniffer.Battle.BattleState;\r
+            if (state != BattleState.Day && state != BattleState.Night)\r
+                return;\r
+            if (Spoiler)\r
+            {\r
+                ShowResult(sniffer.Battle.Result);\r
+                if (state == BattleState.Day)\r
+                {\r
+                    _result[0] = sniffer.Battle.Result;\r
+                    SetPhase("昼戦");\r
+                }\r
+                else if (state == BattleState.Night)\r
+                {\r
+                    _result[1] = sniffer.Battle.Result;\r
+                    SetPhase("夜戦");\r
+                }\r
+            }\r
+            else\r
+            {\r
+                ClearResult();\r
+                _phaseLabel.Text = "結果";\r
+                _phaseLabel.BorderStyle = BorderStyle.FixedSingle;\r
+                _phaseLabel.Cursor = Cursors.Hand;\r
+                if (state == BattleState.Day)\r
+                {\r
+                    _result[0] = sniffer.Battle.Result;\r
+                }\r
+                else if (state == BattleState.Night)\r
+                {\r
+                    _result[1] = sniffer.Battle.Result;\r
+                }\r
+            }\r
+        }\r
+\r
+        private void PhaseLabelClick(object sender, EventArgs ev)\r
+        {\r
+            switch (_phaseLabel.Text)\r
+            {\r
+                case "結果":\r
+                    if (_result[0] != null)\r
+                    {\r
+                        ShowResult(_result[0]);\r
+                        SetPhase("昼戦");\r
+                    }\r
+                    else if (_result[1] != null)\r
+                    {\r
+                        ShowResult(_result[1]);\r
+                        SetPhase("夜戦");\r
+                    }\r
+                    break;\r
+                case "昼戦":\r
+                    if (_result[1] != null)\r
+                    {\r
+                        ShowResult(_result[1]);\r
+                        SetPhase("夜戦");\r
+                    }\r
+                    break;\r
+                case "夜戦":\r
+                    if (_result[0] != null)\r
+                    {\r
+                        ShowResult(_result[0]);\r
+                        SetPhase("昼戦");\r
+                    }\r
+                    break;\r
+            }\r
+        }\r
+\r
+        private void SetPhase(string phase)\r
+        {\r
+            _phaseLabel.Text = phase;\r
+            if (_result[0] != null && _result[1] != null)\r
+            {\r
+                _phaseLabel.BorderStyle = BorderStyle.FixedSingle;\r
+                _phaseLabel.Cursor = Cursors.Hand;\r
+            }\r
+            else\r
+            {\r
+                _phaseLabel.BorderStyle = BorderStyle.None;\r
+                _phaseLabel.Cursor = Cursors.Default;\r
+            }\r
+        }\r
+\r
+        private void ClearResult()\r
+        {\r
+            foreach (var panel in _panelList)\r
+                panel.Visible = false;\r
+        }\r
+\r
+        private void ShowResult(BattleInfo.BattleResult result)\r
+        {\r
             SuspendLayout();\r
-            var friend = sniffer.Battle.Result.Friend;\r
-            var enemy = sniffer.Battle.Result.Enemy;\r
+            var friend = result.Friend;\r
+            var enemy = result.Enemy;\r
 \r
             var fleet = new[] {"第一", "第二", "第三", "第四"};\r
             _friendLabels[0][1].Text = fleet[friend.Main[0].Fleet];\r
@@ -128,6 +227,13 @@ namespace KancolleSniffer
         private void CreateLabels()\r
         {\r
             SuspendLayout();\r
+            _phaseLabel = new Label\r
+            {\r
+                Location = new Point(93, 2),\r
+                Size = new Size(31, 14)\r
+            };\r
+            _phaseLabel.Click += PhaseLabelClick;\r
+            Controls.Add(_phaseLabel);\r
             for (var i = 0; i < 14; i++)\r
             {\r
                 var y = 1 + LineHeight * i;\r
index 85fa241..fc88372 100644 (file)
@@ -174,6 +174,15 @@ namespace KancolleSniffer
         public Size ListSize { get; set; }\r
     }\r
 \r
+    [Flags]\r
+    public enum Spoiler\r
+    {\r
+        ResultRank = 1,\r
+        AirBattleResult = 1 << 1,\r
+        BattleResult = 1 << 2,\r
+        All = (1 << 3) - 1\r
+    }\r
+\r
     public class Config\r
     {\r
         private readonly string _baseDir = AppDomain.CurrentDomain.BaseDirectory;\r
@@ -197,6 +206,7 @@ namespace KancolleSniffer
         public List<int> NotifyConditions { get; set; }\r
         public List<int> ResetHours { get; set; }\r
         public bool AlwaysShowResultRank { get; set; }\r
+        public Spoiler Spoilers { get; set; }\r
         public bool UsePresetAkashi { get; set; }\r
         public SoundConfig Sounds { get; set; } = new SoundConfig();\r
         public bool DebugLogging { get; set; }\r
@@ -246,6 +256,11 @@ namespace KancolleSniffer
                         ns[i] = ns[i] ^ NotificationType.Pushbullet | NotificationType.Push;\r
                 }\r
                 ComposeNotificationFlags();\r
+                if (AlwaysShowResultRank)\r
+                {\r
+                    Spoilers = Spoiler.All;\r
+                    AlwaysShowResultRank = false;\r
+                }\r
                 if (SaveLocationPerMachine)\r
                 {\r
                     foreach (var l in LocationList)\r
index 037f4cf..d79131a 100644 (file)
@@ -70,8 +70,9 @@ namespace KancolleSniffer
             this.tabPageAchievement = new System.Windows.Forms.TabPage();\r
             this.checkBoxPresetAkashi = new System.Windows.Forms.CheckBox();\r
             this.groupBox3 = new System.Windows.Forms.GroupBox();\r
-            this.radioButtonResultRankWhenClick = new System.Windows.Forms.RadioButton();\r
-            this.radioButtonResultRankAlways = new System.Windows.Forms.RadioButton();\r
+            this.checkBoxBattleResult = new System.Windows.Forms.CheckBox();\r
+            this.checkBoxAirBattleResult = new System.Windows.Forms.CheckBox();\r
+            this.checkBoxResultRank = new System.Windows.Forms.CheckBox();\r
             this.groupBox2 = new System.Windows.Forms.GroupBox();\r
             this.checkBoxReset02 = new System.Windows.Forms.CheckBox();\r
             this.buttonResetAchievement = new System.Windows.Forms.Button();\r
@@ -467,37 +468,46 @@ namespace KancolleSniffer
             // \r
             // groupBox3\r
             // \r
-            this.groupBox3.Controls.Add(this.radioButtonResultRankWhenClick);\r
-            this.groupBox3.Controls.Add(this.radioButtonResultRankAlways);\r
+            this.groupBox3.Controls.Add(this.checkBoxBattleResult);\r
+            this.groupBox3.Controls.Add(this.checkBoxAirBattleResult);\r
+            this.groupBox3.Controls.Add(this.checkBoxResultRank);\r
             this.groupBox3.Location = new System.Drawing.Point(11, 65);\r
             this.groupBox3.Name = "groupBox3";\r
             this.groupBox3.Padding = new System.Windows.Forms.Padding(6);\r
             this.groupBox3.Size = new System.Drawing.Size(234, 48);\r
             this.groupBox3.TabIndex = 18;\r
             this.groupBox3.TabStop = false;\r
-            this.groupBox3.Text = "勝利判定と航空戦の結果の表示";\r
-            // \r
-            // radioButtonResultRankWhenClick\r
-            // \r
-            this.radioButtonResultRankWhenClick.AutoSize = true;\r
-            this.radioButtonResultRankWhenClick.Location = new System.Drawing.Point(65, 21);\r
-            this.radioButtonResultRankWhenClick.Name = "radioButtonResultRankWhenClick";\r
-            this.radioButtonResultRankWhenClick.Size = new System.Drawing.Size(88, 16);\r
-            this.radioButtonResultRankWhenClick.TabIndex = 1;\r
-            this.radioButtonResultRankWhenClick.TabStop = true;\r
-            this.radioButtonResultRankWhenClick.Text = "クリックしたとき";\r
-            this.radioButtonResultRankWhenClick.UseVisualStyleBackColor = true;\r
-            // \r
-            // radioButtonResultRankAlways\r
-            // \r
-            this.radioButtonResultRankAlways.AutoSize = true;\r
-            this.radioButtonResultRankAlways.Location = new System.Drawing.Point(9, 21);\r
-            this.radioButtonResultRankAlways.Name = "radioButtonResultRankAlways";\r
-            this.radioButtonResultRankAlways.Size = new System.Drawing.Size(50, 16);\r
-            this.radioButtonResultRankAlways.TabIndex = 0;\r
-            this.radioButtonResultRankAlways.TabStop = true;\r
-            this.radioButtonResultRankAlways.Text = "すぐに";\r
-            this.radioButtonResultRankAlways.UseVisualStyleBackColor = true;\r
+            this.groupBox3.Text = "ネタバレ";\r
+            // \r
+            // checkBoxBattleResult\r
+            // \r
+            this.checkBoxBattleResult.AutoSize = true;\r
+            this.checkBoxBattleResult.Location = new System.Drawing.Point(147, 21);\r
+            this.checkBoxBattleResult.Name = "checkBoxBattleResult";\r
+            this.checkBoxBattleResult.Size = new System.Drawing.Size(48, 16);\r
+            this.checkBoxBattleResult.TabIndex = 2;\r
+            this.checkBoxBattleResult.Text = "戦況";\r
+            this.checkBoxBattleResult.UseVisualStyleBackColor = true;\r
+            // \r
+            // checkBoxAirBattleResult\r
+            // \r
+            this.checkBoxAirBattleResult.AutoSize = true;\r
+            this.checkBoxAirBattleResult.Location = new System.Drawing.Point(84, 21);\r
+            this.checkBoxAirBattleResult.Name = "checkBoxAirBattleResult";\r
+            this.checkBoxAirBattleResult.Size = new System.Drawing.Size(60, 16);\r
+            this.checkBoxAirBattleResult.TabIndex = 1;\r
+            this.checkBoxAirBattleResult.Text = "航空戦";\r
+            this.checkBoxAirBattleResult.UseVisualStyleBackColor = true;\r
+            // \r
+            // checkBoxResultRank\r
+            // \r
+            this.checkBoxResultRank.AutoSize = true;\r
+            this.checkBoxResultRank.Location = new System.Drawing.Point(9, 21);\r
+            this.checkBoxResultRank.Name = "checkBoxResultRank";\r
+            this.checkBoxResultRank.Size = new System.Drawing.Size(72, 16);\r
+            this.checkBoxResultRank.TabIndex = 0;\r
+            this.checkBoxResultRank.Text = "勝利判定";\r
+            this.checkBoxResultRank.UseVisualStyleBackColor = true;\r
             // \r
             // groupBox2\r
             // \r
@@ -1302,8 +1312,6 @@ namespace KancolleSniffer
         private System.Windows.Forms.OpenFileDialog openDebugLogDialog;\r
         private System.Windows.Forms.GroupBox groupBox3;\r
         private System.Windows.Forms.GroupBox groupBox2;\r
-        private System.Windows.Forms.RadioButton radioButtonResultRankWhenClick;\r
-        private System.Windows.Forms.RadioButton radioButtonResultRankAlways;\r
         private System.Windows.Forms.CheckBox checkBoxPresetAkashi;\r
         private System.Windows.Forms.TabPage tabPageCollabo;\r
         private System.Windows.Forms.GroupBox groupBoxKancolleDb;\r
@@ -1332,5 +1340,8 @@ namespace KancolleSniffer
         private System.Windows.Forms.TextBox textBoxPushoverUserKey;\r
         private System.Windows.Forms.TabPage tabPageExternalService;\r
         private System.Windows.Forms.CheckBox checkBoxRepeat;\r
+        private System.Windows.Forms.CheckBox checkBoxBattleResult;\r
+        private System.Windows.Forms.CheckBox checkBoxAirBattleResult;\r
+        private System.Windows.Forms.CheckBox checkBoxResultRank;\r
     }\r
 }
\ No newline at end of file
index e2a5368..52c7a12 100644 (file)
@@ -85,8 +85,9 @@ namespace KancolleSniffer
 \r
             checkBoxReset02.Checked = _config.ResetHours.Contains(2);\r
             checkBoxReset14.Checked = _config.ResetHours.Contains(14);\r
-            radioButtonResultRankAlways.Checked = _config.AlwaysShowResultRank;\r
-            radioButtonResultRankWhenClick.Checked = !_config.AlwaysShowResultRank;\r
+            checkBoxResultRank.Checked = (_config.Spoilers & Spoiler.ResultRank) != 0;\r
+            checkBoxAirBattleResult.Checked = (_config.Spoilers & Spoiler.AirBattleResult) != 0;\r
+            checkBoxBattleResult.Checked = (_config.Spoilers & Spoiler.BattleResult) != 0;\r
             checkBoxPresetAkashi.Checked = _config.UsePresetAkashi;\r
 \r
             numericUpDownSoundVolume.Value = _config.Sounds.Volume;\r
@@ -191,7 +192,9 @@ namespace KancolleSniffer
             if (checkBoxReset14.Checked)\r
                 _config.ResetHours.Add(14);\r
 \r
-            _config.AlwaysShowResultRank = radioButtonResultRankAlways.Checked;\r
+            _config.Spoilers = (checkBoxResultRank.Checked ? Spoiler.ResultRank : 0) |\r
+                               (checkBoxAirBattleResult.Checked ? Spoiler.AirBattleResult : 0) |\r
+                               (checkBoxBattleResult.Checked ? Spoiler.BattleResult : 0);\r
             _config.UsePresetAkashi = checkBoxPresetAkashi.Checked;\r
 \r
             _config.Sounds.Volume = (int)numericUpDownSoundVolume.Value;\r
index 16dcd96..2c37518 100644 (file)
@@ -422,6 +422,7 @@ namespace KancolleSniffer
             this.battleResultPanel.Location = new System.Drawing.Point(6, 73);\r
             this.battleResultPanel.Name = "battleResultPanel";\r
             this.battleResultPanel.Size = new System.Drawing.Size(238, 213);\r
+            this.battleResultPanel.Spoiler = false;\r
             this.battleResultPanel.TabIndex = 0;\r
             // \r
             // antiAirPanel\r
index 5ad98a9..109e128 100644 (file)
@@ -94,13 +94,14 @@ namespace KancolleSniffer
 \r
         public void UpdateAirBattleResult()\r
         {\r
-            airBattleResultPanel.ShowResultAutomatic = true;\r
+            airBattleResultPanel.ShowResultAutomatic = (_config.Spoilers & Spoiler.AirBattleResult) != 0;\r
             airBattleResultPanel.SetResult(_sniffer.Battle.AirBattleResults);\r
         }\r
 \r
         public void UpdateBattleResult()\r
         {\r
             battleResultPanel.SetShowHpPercent(shipListPanel.ShowHpInPercent);\r
+            battleResultPanel.Spoiler = (_config.Spoilers & Spoiler.BattleResult) != 0;\r
             battleResultPanel.Update(_sniffer);\r
         }\r
 \r
index 1d521a2..5d56b84 100644 (file)
@@ -612,17 +612,17 @@ namespace KancolleSniffer
         private void UpdateBattleInfo()\r
         {\r
             ResetBattleInfo();\r
+            _listForm.UpdateBattleResult();\r
             if (_sniffer.Battle.BattleState == BattleState.None)\r
                 return;\r
             panelBattleInfo.BringToFront();\r
             var battle = _sniffer.Battle;\r
             labelFormation.Text = battle.Formation;\r
             UpdateBattleFighterPower();\r
-            if (_config.AlwaysShowResultRank)\r
+            if ((_config.Spoilers & Spoiler.ResultRank) != 0)\r
                 ShowResultRank();\r
             if (_sniffer.Battle.BattleState == BattleState.Day)\r
                 _listForm.UpdateAirBattleResult();\r
-            _listForm.UpdateBattleResult();\r
         }\r
 \r
         private void ResetBattleInfo()\r