diff --git a/ElectronicObserver/App.config b/ElectronicObserver/App.config index 9cc9c4010..934a8d4ff 100644 --- a/ElectronicObserver/App.config +++ b/ElectronicObserver/App.config @@ -1,15 +1,15 @@ - + - + - - + + - + diff --git a/ElectronicObserver/Assets.zip b/ElectronicObserver/Assets.zip index da2f52f9c..599a3125a 100644 Binary files a/ElectronicObserver/Assets.zip and b/ElectronicObserver/Assets.zip differ diff --git a/ElectronicObserver/Assets/Form/FleetPreset.png b/ElectronicObserver/Assets/Form/FleetPreset.png new file mode 100644 index 000000000..b51e36ade Binary files /dev/null and b/ElectronicObserver/Assets/Form/FleetPreset.png differ diff --git a/ElectronicObserver/Data/Battle/Phase/PhaseBaseAirRaid.cs b/ElectronicObserver/Data/Battle/Phase/PhaseBaseAirRaid.cs index e0ecce10f..aa3aba6a7 100644 --- a/ElectronicObserver/Data/Battle/Phase/PhaseBaseAirRaid.cs +++ b/ElectronicObserver/Data/Battle/Phase/PhaseBaseAirRaid.cs @@ -1,4 +1,5 @@ -using System; +using DynaJson; +using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; @@ -27,7 +28,7 @@ private IEnumerable GetSquadrons() foreach (KeyValuePair p in AirBattleData.api_map_squadron_plane) { - if (!(p.Value is Codeplex.Data.DynamicJson)) + if (!(p.Value is JsonObject)) continue; if (!p.Value.IsArray) continue; diff --git a/ElectronicObserver/Data/DevelopmentData.cs b/ElectronicObserver/Data/DevelopmentData.cs index 7230cf9a9..e90641db2 100644 --- a/ElectronicObserver/Data/DevelopmentData.cs +++ b/ElectronicObserver/Data/DevelopmentData.cs @@ -1,4 +1,5 @@ -using System; +using DynaJson; +using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; @@ -92,7 +93,7 @@ public override void LoadFromResponse(string apiname, dynamic data) void AddToDatabase(dynamic equipmentData) { var eq = new EquipmentData(); - eq.LoadFromResponse(apiname, Codeplex.Data.DynamicJson.Parse(equipmentData.ToString())); + eq.LoadFromResponse(apiname, JsonObject.Parse(equipmentData.ToString())); KCDatabase.Instance.Equipments.Add(eq); } diff --git a/ElectronicObserver/Data/EquipmentData.cs b/ElectronicObserver/Data/EquipmentData.cs index e41f4c7b7..5c9c35f3a 100644 --- a/ElectronicObserver/Data/EquipmentData.cs +++ b/ElectronicObserver/Data/EquipmentData.cs @@ -1,4 +1,4 @@ -using Codeplex.Data; +using DynaJson; using System; using System.Collections.Generic; using System.Diagnostics; @@ -113,7 +113,7 @@ public override void LoadFromResponse(string apiname, dynamic data) case "api_get_member/ship3": //存在しないアイテムを追加…すると処理に不都合があるので、ID:1で我慢 一瞬だし無問題(?) { int id = data; - data = new DynamicJson(); + data = new JsonObject(); data.api_id = id; data.api_slotitem_id = 1; data.api_locked = 0; diff --git a/ElectronicObserver/Data/EquipmentDataMaster.cs b/ElectronicObserver/Data/EquipmentDataMaster.cs index 45f6606e0..e679247c0 100644 --- a/ElectronicObserver/Data/EquipmentDataMaster.cs +++ b/ElectronicObserver/Data/EquipmentDataMaster.cs @@ -344,8 +344,10 @@ public bool IsAntiSubmarineAircraft EquipmentID == 226 || // 九五式爆雷 EquipmentID == 227; // 二式爆雷 - /// 爆雷投射機かどうか(爆雷は含まない) - public bool IsDepthChargeProjector => CategoryType == EquipmentTypes.DepthCharge && !IsDepthCharge; + /// 爆雷投射機かどうか(爆雷/対潜迫撃砲は含まない) + public bool IsDepthChargeProjector => + EquipmentID == 44 || // 九四式爆雷投射機 + EquipmentID == 45; // 三式爆雷投射機 /// 夜間作戦航空要員かどうか @@ -357,9 +359,11 @@ public bool IsAntiSubmarineAircraft public bool IsHightAltitudeFighter => EquipmentID == 350 || // Me163B EquipmentID == 351 || // 試製 秋水 - EquipmentID == 352; // 秋水 - + EquipmentID == 352; // 秋水 + /// 対空噴進弾幕が発動可能なロケットランチャーかどうか + public bool IsAARocketLauncher => + EquipmentID == 274; diff --git a/ElectronicObserver/Data/FleetData.cs b/ElectronicObserver/Data/FleetData.cs index 628f757e4..20535f33f 100644 --- a/ElectronicObserver/Data/FleetData.cs +++ b/ElectronicObserver/Data/FleetData.cs @@ -530,17 +530,21 @@ public bool CanAnchorageRepair get { // 流石に資源チェックまではしない - var flagship = KCDatabase.Instance.Ships[_members[0]]; - - return IsFlagshipRepairShip && - flagship.HPRate > 0.5 && - flagship.RepairingDockID == -1 && - ExpeditionState == 0 && - MembersInstance.Take(2 + flagship.SlotInstance.Count(eq => eq != null && eq.MasterEquipment.CategoryType == EquipmentTypes.RepairFacility)) - .Any(ship => ship != null && 0.5 < ship.HPRate && ship.HPRate < 1.0 && ship.RepairingDockID == -1); + return CanAnchorageRepairWithMember(MembersInstance); } } + public static bool CanAnchorageRepairWithMember(IEnumerable membersInstance) + { + var flagship = membersInstance.FirstOrDefault(); + return flagship?.MasterShip?.ShipType == ShipTypes.RepairShip && + flagship.HPRate > 0.5 && + flagship.RepairingDockID == -1 && + membersInstance.All(s => s == null || (KCDatabase.Instance.Fleet[s.Fleet]?.ExpeditionState ?? 0) == 0) && + membersInstance.Take(2 + flagship.SlotInstance.Count(eq => eq?.MasterEquipment?.CategoryType == EquipmentTypes.RepairFacility)) + .Any(ship => ship?.RepairingDockID == -1 && 0.5 < ship.HPRate && ship.HPRate < 1.0); + } + /// /// 疲労が回復すると予測される日時 (疲労していない場合は null) diff --git a/ElectronicObserver/Data/FleetPresetData.cs b/ElectronicObserver/Data/FleetPresetData.cs new file mode 100644 index 000000000..aef74aeb4 --- /dev/null +++ b/ElectronicObserver/Data/FleetPresetData.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ElectronicObserver.Data +{ + public class FleetPresetData : APIWrapper, IIdentifiable + { + public int PresetID => (int)RawData.api_preset_no; + + public string Name => RawData.api_name; + + private int[] _members; + public ReadOnlyCollection Members => Array.AsReadOnly(_members); + + public IEnumerable MembersInstance => Members.Select(id => KCDatabase.Instance.Ships[id]); + + + public override void LoadFromResponse(string apiname, dynamic data) + { + _members = (int[])data.api_ship; + base.LoadFromResponse(apiname, (object)data); + } + + + public int ID => PresetID; + } +} diff --git a/ElectronicObserver/Data/FleetPresetManager.cs b/ElectronicObserver/Data/FleetPresetManager.cs new file mode 100644 index 000000000..275f0115c --- /dev/null +++ b/ElectronicObserver/Data/FleetPresetManager.cs @@ -0,0 +1,81 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ElectronicObserver.Data +{ + public class FleetPresetManager : APIWrapper + { + public IDDictionary Presets { get; private set; } + + public int MaximumCount { get; private set; } + + + public event Action PresetChanged; + + + public FleetPresetManager() + { + Presets = new IDDictionary(); + } + + + public override void LoadFromRequest(string apiname, Dictionary data) + { + switch (apiname) + { + case "api_req_hensei/preset_delete": + Presets.Remove(int.Parse(data["api_preset_no"])); + PresetChanged(); + break; + } + } + + public override void LoadFromResponse(string apiname, dynamic data) + { + switch (apiname) + { + case "api_get_member/preset_deck": + { + MaximumCount = (int)data.api_max_num; + + Presets.Clear(); + + foreach (KeyValuePair elem in data.api_deck) + { + var preset = new FleetPresetData(); + preset.LoadFromResponse(apiname, elem.Value); + Presets.Add(preset); + } + PresetChanged(); + } + break; + + case "api_req_hensei/preset_register": + { + int id = (int)data.api_preset_no; + if (Presets.ContainsKey(id)) + { + Presets[id].LoadFromResponse(apiname, data); + } + else + { + var preset = new FleetPresetData(); + preset.LoadFromResponse(apiname, data); + Presets.Add(preset); + } + PresetChanged(); + } + break; + } + + base.LoadFromResponse(apiname, (object)data); + } + + + public FleetPresetData this[int index] => Presets[index]; + + } +} diff --git a/ElectronicObserver/Data/KCDatabase.cs b/ElectronicObserver/Data/KCDatabase.cs index 11ea1e646..6d3c7bec1 100644 --- a/ElectronicObserver/Data/KCDatabase.cs +++ b/ElectronicObserver/Data/KCDatabase.cs @@ -159,6 +159,12 @@ public sealed class KCDatabase /// public IDDictionary RelocatedEquipments { get; private set; } + /// + /// 艦隊編成プリセットデータ + /// + public FleetPresetManager FleetPreset { get; private set; } + + private KCDatabase() { @@ -186,12 +192,12 @@ private KCDatabase() ShipGroup = new ShipGroupManager(); BaseAirCorps = new IDDictionary(); RelocatedEquipments = new IDDictionary(); + FleetPreset = new FleetPresetManager(); } public void Load() { - { var temp = (ShipGroupManager)ShipGroup.Load(); if (temp != null) diff --git a/ElectronicObserver/Data/MissionClearCondition.cs b/ElectronicObserver/Data/MissionClearCondition.cs index b5e9b9c4c..72d703342 100644 --- a/ElectronicObserver/Data/MissionClearCondition.cs +++ b/ElectronicObserver/Data/MissionClearCondition.cs @@ -76,17 +76,41 @@ public static MissionClearConditionResult Check(int missionID, FleetData fleet) .CheckLevelSum(185) .CheckShipCount(5) .CheckEscortFleetDD3() - .CheckAA(162) + .CheckAA(59) .CheckASW(280) .CheckLOS(60); - case 103: // 南西方面連絡線哨戒(unchecked) + case 103: // 南西方面連絡線哨戒 return result .CheckFlagshipLevel(40) + .CheckLevelSum(200) .CheckShipCount(5) - .CheckEscortLeaderCount(1) - .CheckSmallShipCount(3) + .CheckEscortFleet() .CheckFirepower(300) - .CheckASW(200); + .CheckAA(200) + .CheckASW(200) + .CheckLOS(120); + case 104: // 小笠原沖哨戒線(unchecked) + return result + .CheckFlagshipLevel(50) + .CheckLevelSum(260) + .CheckShipCount(5) + .CheckEscortFleet() // 適当 + .CheckFirepower(280) + .CheckAA(274) + .CheckASW(240) + .CheckLOS(150) + .SuppressWarnings(); + case 105: // 小笠原沖戦闘哨戒(unchecked) + return result + .CheckFlagshipLevel(55) + .CheckLevelSum(357) + .CheckShipCount(6) + .CheckEscortFleetDD3() // 適当 + .CheckFirepower(330) + .CheckAA(314) + .CheckASW(270) + .CheckLOS(180) + .SuppressWarnings(); case 9: // タンカー護衛任務 return result @@ -145,30 +169,51 @@ public static MissionClearConditionResult Check(int missionID, FleetData fleet) .CheckLOS(140); case 111: // 敵泊地強襲反撃作戦 return result - .CheckFlagshipLevel(50) + .CheckFlagshipLevel(45) + .CheckLevelSum(220) .CheckShipCount(6) .CheckShipCountByType(ShipTypes.HeavyCruiser, 1) .CheckShipCountByType(ShipTypes.LightCruiser, 1) .CheckShipCountByType(ShipTypes.Destroyer, 3) - .CheckFirepower(360); + .CheckFirepower(360) + .CheckAA(160) + .CheckASW(160) + .CheckLOS(140); case 112: // 南西諸島離島哨戒作戦 return result .CheckFlagshipLevel(50) + .CheckLevelSum(250) .CheckShipCountByType(ShipTypes.SeaplaneTender, 1) .CheckShipCountByType(ShipTypes.LightCruiser, 1) .CheckSmallShipCount(4) - .CheckFirepower(400); - /* - case 113: // 南西諸島離島防衛作戦(unchecked) - return result - .CheckFlagshipLevel(55) - .CheckShipCountByType(ShipTypes.HeavyCruiser, 2) - .CheckShipCountByType(ShipTypes.LightCruiser, 1) - .CheckShipCountByType(ShipTypes.Destroyer, 2) - .CheckSubmarineCount(1) - .CheckFirepower(500) - .CheckASW(280); - */ + .CheckFirepower(400) + .CheckAA(220) + .CheckASW(220) + .CheckLOS(190); + case 113: // 南西諸島離島防衛作戦 + return result + .CheckFlagshipLevel(55) + .CheckLevelSum(300) + .CheckShipCountByType(ShipTypes.HeavyCruiser, 2) + .CheckShipCountByType(ShipTypes.LightCruiser, 1) + .CheckShipCountByType(ShipTypes.Destroyer, 2) + .CheckSubmarineCount(1) + .CheckFirepower(500) + .CheckASW(280); + case 114: // 南西諸島捜索撃滅戦(unchecked) + return result + .CheckFlagshipLevel(60) + .CheckLevelSum(346) + .CheckShipCount(6) + .CheckShipCountByType(ShipTypes.SeaplaneTender, 1) + .CheckShipCountByType(ShipTypes.LightCruiser, 1) + .CheckShipCountByType(ShipTypes.Destroyer, 2) + .CheckFirepower(510) + .CheckAA(400) + .CheckASW(285) + .CheckLOS(385) + .SuppressWarnings(); + case 17: // 敵地偵察作戦 return result .CheckFlagshipLevel(20) @@ -259,6 +304,26 @@ public static MissionClearConditionResult Check(int missionID, FleetData fleet) .CheckFlagshipLevel(5) .CheckFlagshipType(ShipTypes.TrainingCruiser) .CheckShipCountByType(ShipTypes.Destroyer, 2); + case 131: // 西方海域偵察作戦 + return result + .CheckFlagshipLevel(50) + .CheckLevelSum(200) + .CheckShipCount(5) + .CheckFlagshipType(ShipTypes.SeaplaneTender) + .CheckShipCountByType(ShipTypes.Destroyer, 3) + .CheckAA(240) + .CheckASW(240) + .CheckLOS(300); + case 132: // 西方潜水艦作戦 + return result + .CheckFlagshipLevel(55) + .CheckLevelSum(270) + .CheckShipCount(5) + .CheckFlagshipType(ShipTypes.SubmarineTender) + .CheckSubmarineCount(3) + .CheckFirepower(60) + .CheckAA(80) + .CheckASW(50); case 33: // 前衛支援任務 return result @@ -310,6 +375,19 @@ public static MissionClearConditionResult Check(int missionID, FleetData fleet) .CheckFlagshipType(ShipTypes.LightCruiser) .CheckShipCountByType(ShipTypes.SeaplaneTender, 2) .CheckShipCountByType(ShipTypes.Destroyer, 2); + case 141: // ラバウル方面艦隊進出(unchecked) + return result + .CheckFlagshipLevel(55) + .CheckLevelSum(299) + .CheckShipCount(6) + .CheckFlagshipType(ShipTypes.HeavyCruiser) + .CheckShipCountByType(ShipTypes.LightCruiser, 1) + .CheckShipCountByType(ShipTypes.Destroyer, 3) + .CheckFirepower(450) + .CheckAA(350) + .CheckASW(330) + .CheckLOS(250) + .SuppressWarnings(); case 41: // ブルネイ泊地沖哨戒 return result @@ -319,15 +397,16 @@ public static MissionClearConditionResult Check(int missionID, FleetData fleet) .CheckFirepower(60) .CheckAA(80) .CheckASW(210); - /* - case 42: // ミ船団護衛(一号船団)(unchecked) + case 42: // ミ船団護衛(一号船団) return result - .CheckFlagshipLevel(50) + .CheckFlagshipLevel(45) .CheckLevelSum(200) .CheckShipCount(4) .CheckEscortFleet(); - case 43: // ミ船団護衛(二号船団)(unchecked) + case 43: // ミ船団護衛(二号船団) return result + .CheckFlagshipLevel(55) + .CheckLevelSum(300) .CheckShipCount(6) .OrCondition( r => r @@ -339,18 +418,33 @@ public static MissionClearConditionResult Check(int missionID, FleetData fleet) .CheckShipCountByType(ShipTypes.Destroyer, 4) ) .CheckFirepower(500) - .CheckASW(280); - case 44: // 航空装備輸送任務(unchecked) + .CheckAA(280) + .CheckASW(280) + .CheckLOS(179); + case 44: // 航空装備輸送任務 return result - .CheckFlagshipLevel(60) - .CheckAircraftCarrierCount(2) + .CheckFlagshipLevel(35) + .CheckLevelSum(210) + .CheckShipCount(6) + .CheckAircraftCarrierCount(1) .CheckShipCountByType(ShipTypes.SeaplaneTender, 1) .CheckShipCountByType(ShipTypes.LightCruiser, 1) - .CheckShipCountByType(ShipTypes.Destroyer, 2) + .CheckSmallShipCount(2) .CheckEquippedShipCount(EquipmentTypes.TransportContainer, 3) .CheckEquipmentCount(EquipmentTypes.TransportContainer, 6) - .CheckASW(200); - */ + .CheckAA(200) + .CheckASW(200) + .CheckLOS(150); + case 45: // ボーキサイト船団護衛 + return result + .CheckFlagshipLevel(50) + .CheckLevelSum(240) + .CheckFlagshipType(ShipTypes.LightAircraftCarrier) + .CheckSmallShipCount(4) + .CheckAA(240) + .CheckASW(300) + .CheckLOS(180); + default: { // イベント海域での支援遠征への対応 @@ -416,6 +510,12 @@ public MissionClearConditionResult AddMessage(string message) failureReason.Add(message); return this; } + public MissionClearConditionResult SuppressWarnings() + { + failureReason.Add("(未確定)"); + IsSuceeded = true; + return this; + } public MissionClearConditionResult Fail(string reason) { Assert(false, () => reason); diff --git a/ElectronicObserver/Data/QuestManager.cs b/ElectronicObserver/Data/QuestManager.cs index 0c5074724..d922f310d 100644 --- a/ElectronicObserver/Data/QuestManager.cs +++ b/ElectronicObserver/Data/QuestManager.cs @@ -1,5 +1,4 @@ -using Codeplex.Data; -using ElectronicObserver.Utility.Mathematics; +using ElectronicObserver.Utility.Mathematics; using System; using System.Collections.Generic; using System.Linq; diff --git a/ElectronicObserver/Data/ShipData.cs b/ElectronicObserver/Data/ShipData.cs index 9c1120aee..328331211 100644 --- a/ElectronicObserver/Data/ShipData.cs +++ b/ElectronicObserver/Data/ShipData.cs @@ -681,7 +681,7 @@ private double GetDayBattleEquipmentLevelBonus() break; case EquipmentTypes.DepthCharge: - if (slot.MasterEquipment.IsDepthChargeProjector) + if (!slot.MasterEquipment.IsDepthCharge) basepower += Math.Sqrt(slot.Level) * 0.75; break; @@ -1148,7 +1148,7 @@ private int CalculateAntiSubmarinePower(int engagementForm = 1) case EquipmentTypes.DepthCharge: if (slot.IsDepthCharge) depthChargeCount++; - else + else if (slot.IsDepthChargeProjector) depthChargeProjectorCount++; break; case EquipmentTypes.SonarLarge: diff --git a/ElectronicObserver/Data/ShipType.cs b/ElectronicObserver/Data/ShipType.cs index 24b9179d5..7676db477 100644 --- a/ElectronicObserver/Data/ShipType.cs +++ b/ElectronicObserver/Data/ShipType.cs @@ -1,4 +1,4 @@ -using Codeplex.Data; +using DynaJson; using System; using System.Collections.Generic; using System.Collections.ObjectModel; @@ -68,10 +68,6 @@ public ShipType() public override void LoadFromResponse(string apiname, dynamic data) { - // api_equip_type の置換処理 - // checkme: 無駄が多い気がするのでもっといい案があったら是非 - data = DynamicJson.Parse(Regex.Replace(data.ToString(), @"""(?\d+?)""", @"""api_id_${id}""")); - base.LoadFromResponse(apiname, (object)data); @@ -82,7 +78,7 @@ IEnumerable getType() foreach (KeyValuePair type in RawData.api_equip_type) { if ((double)type.Value != 0) - yield return Convert.ToInt32(type.Key.Substring(7)); //skip api_id_ + yield return Convert.ToInt32(type.Key); } } diff --git a/ElectronicObserver/ElectronicObserver.csproj b/ElectronicObserver/ElectronicObserver.csproj index f0a5a90eb..d2ccbc951 100644 --- a/ElectronicObserver/ElectronicObserver.csproj +++ b/ElectronicObserver/ElectronicObserver.csproj @@ -56,8 +56,8 @@ true - - ..\Libraries\DynamicJson.dll + + ..\packages\DynaJson.2.0.0\lib\net45\DynaJson.dll ..\packages\log4net.2.0.8\lib\net45-full\log4net.dll @@ -155,6 +155,8 @@ + + @@ -228,6 +230,9 @@ + + + @@ -581,6 +586,12 @@ FormCompass.cs + + Form + + + FormFleetPreset.cs + Form @@ -797,6 +808,9 @@ FormCompass.cs + + FormFleetPreset.cs + FormJson.cs @@ -865,7 +879,9 @@ - + + Designer + diff --git a/ElectronicObserver/Notifier/NotifierAnchorageRepair.cs b/ElectronicObserver/Notifier/NotifierAnchorageRepair.cs index 2b5c0f21b..905f92bf3 100644 --- a/ElectronicObserver/Notifier/NotifierAnchorageRepair.cs +++ b/ElectronicObserver/Notifier/NotifierAnchorageRepair.cs @@ -14,7 +14,7 @@ public class NotifierAnchorageRepair : NotifierBase /// /// 通知レベル - /// 0 = いつでも、1 = 明石旗艦の時、2 = 修理艦もいる時 + /// 0 = いつでも、1 = 明石旗艦の時、2 = 修理艦もいる時、3 = 2 + プリセット編成時 /// public int NotificationLevel { get; set; } @@ -81,6 +81,11 @@ protected override void UpdateTimerTick() case 2: //修理艦もいる時 clear = fleets.Fleets.Values.Any(f => f.CanAnchorageRepair); break; + + case 3: // プリセット込み + clear = fleets.Fleets.Values.Any(f => f.CanAnchorageRepair) || + KCDatabase.Instance.FleetPreset.Presets.Values.Any(p => FleetData.CanAnchorageRepairWithMember(p.MembersInstance)); + break; } if (clear) diff --git a/ElectronicObserver/Observer/APIObserver.cs b/ElectronicObserver/Observer/APIObserver.cs index 2e8c82a6b..192910fac 100644 --- a/ElectronicObserver/Observer/APIObserver.cs +++ b/ElectronicObserver/Observer/APIObserver.cs @@ -1,4 +1,4 @@ -using Codeplex.Data; +using DynaJson; using ElectronicObserver.Observer.kcsapi; using ElectronicObserver.Utility; using ElectronicObserver.Utility.Mathematics; @@ -121,6 +121,7 @@ private APIObserver() new kcsapi.api_req_sortie.ld_shooting(), new kcsapi.api_req_combined_battle.ld_shooting(), new kcsapi.api_req_map.anchorage_repair(), + new kcsapi.api_get_member.preset_deck(), new kcsapi.api_req_quest.clearitemget(), new kcsapi.api_req_nyukyo.start(), @@ -135,7 +136,9 @@ private APIObserver() new kcsapi.api_req_hensei.combined(), new kcsapi.api_req_member.updatecomment(), new kcsapi.api_req_air_corps.change_name(), - new kcsapi.api_req_quest.stop() + new kcsapi.api_req_quest.stop(), + new kcsapi.api_req_hensei.preset_register(), + new kcsapi.api_req_hensei.preset_delete(), }; @@ -430,7 +433,7 @@ public void LoadResponse(string path, string data) SystemEvents.UpdateTimerEnabled = false; - var json = DynamicJson.Parse(data.Substring(7)); //remove "svdata=" + var json = JsonObject.Parse(data.Substring(7)); //remove "svdata=" int result = (int)json.api_result; if (result != 1) diff --git a/ElectronicObserver/Observer/kcsapi/api_get_member/preset_deck.cs b/ElectronicObserver/Observer/kcsapi/api_get_member/preset_deck.cs new file mode 100644 index 000000000..bbe5c712d --- /dev/null +++ b/ElectronicObserver/Observer/kcsapi/api_get_member/preset_deck.cs @@ -0,0 +1,21 @@ +using ElectronicObserver.Data; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ElectronicObserver.Observer.kcsapi.api_get_member +{ + public class preset_deck : APIBase + { + public override void OnResponseReceived(dynamic data) + { + KCDatabase.Instance.FleetPreset.LoadFromResponse(APIName, data); + + base.OnResponseReceived((object)data); + } + + public override string APIName => "api_get_member/preset_deck"; + } +} diff --git a/ElectronicObserver/Observer/kcsapi/api_req_hensei/preset_delete.cs b/ElectronicObserver/Observer/kcsapi/api_req_hensei/preset_delete.cs new file mode 100644 index 000000000..de73439df --- /dev/null +++ b/ElectronicObserver/Observer/kcsapi/api_req_hensei/preset_delete.cs @@ -0,0 +1,23 @@ +using ElectronicObserver.Data; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ElectronicObserver.Observer.kcsapi.api_req_hensei +{ + public class preset_delete : APIBase + { + public override void OnRequestReceived(Dictionary data) + { + KCDatabase.Instance.FleetPreset.LoadFromRequest(APIName, data); + + base.OnRequestReceived(data); + } + + public override bool IsRequestSupported => true; + + public override string APIName => "api_req_hensei/preset_delete"; + } +} diff --git a/ElectronicObserver/Observer/kcsapi/api_req_hensei/preset_register.cs b/ElectronicObserver/Observer/kcsapi/api_req_hensei/preset_register.cs new file mode 100644 index 000000000..68d0d3170 --- /dev/null +++ b/ElectronicObserver/Observer/kcsapi/api_req_hensei/preset_register.cs @@ -0,0 +1,21 @@ +using ElectronicObserver.Data; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ElectronicObserver.Observer.kcsapi.api_req_hensei +{ + public class preset_register : APIBase + { + public override void OnResponseReceived(dynamic data) + { + KCDatabase.Instance.FleetPreset.LoadFromResponse(APIName, data); + + base.OnResponseReceived((object)data); + } + + public override string APIName => "api_req_hensei/preset_register"; + } +} diff --git a/ElectronicObserver/Observer/kcsapi/api_req_nyukyo/start.cs b/ElectronicObserver/Observer/kcsapi/api_req_nyukyo/start.cs index 4cbc4f317..883d78140 100644 --- a/ElectronicObserver/Observer/kcsapi/api_req_nyukyo/start.cs +++ b/ElectronicObserver/Observer/kcsapi/api_req_nyukyo/start.cs @@ -1,5 +1,4 @@ -using Codeplex.Data; -using ElectronicObserver.Data; +using ElectronicObserver.Data; using ElectronicObserver.Utility.Mathematics; using System; using System.Collections.Generic; diff --git a/ElectronicObserver/Other/Information/apilist.txt b/ElectronicObserver/Other/Information/apilist.txt index 3f2257f5a..0eae61e55 100644 --- a/ElectronicObserver/Other/Information/apilist.txt +++ b/ElectronicObserver/Other/Information/apilist.txt @@ -1182,7 +1182,7 @@ Request.api_req_hensei/preset_register :編成登録 api_preset_no :登録先 api_req_hensei/preset_register :編成登録 - api_data :編成データ preset_deck 参照 + api_data :編成データ 更新したもの単体(preset_deck での 1 にあたる) Request.api_req_hensei/preset_select :編成展開 api_deck_id :展開する艦隊ID diff --git a/ElectronicObserver/Other/Information/kcmemo.md b/ElectronicObserver/Other/Information/kcmemo.md index f70a403d3..4931c2479 100644 --- a/ElectronicObserver/Other/Information/kcmemo.md +++ b/ElectronicObserver/Other/Information/kcmemo.md @@ -1477,6 +1477,7 @@ Bismarck dreiに対する魚雷装備・試製51cm連装砲といったものの |330|季|空母機動部隊、演習始め!|演習勝利4|要空母系2/駆逐2, 要空母旗艦, デイリー扱い| |337|季|「十八駆」演習!|演習S勝利3|要(霞/霰/陽炎/不知火)4, デイリー扱い| |339|季|「十九駆」演習!|演習S勝利3|要磯波/浦波/綾波/敷波, デイリー扱い|進捗は2/5開始(1/3で50%, 2/3で80%) +|342|季|小艦艇群演習強化任務|演習A勝利4|要(駆逐+海防+min(軽巡級, 1))4, デイリー扱い|進捗は1/5開始(3/4で80%) |402|日|「遠征」を3回成功させよう!|遠征成功3 |403|日|「遠征」を10回成功させよう!|遠征成功10 |404|週|大規模遠征作戦、発令!|遠征成功30 @@ -1487,6 +1488,7 @@ Bismarck dreiに対する魚雷装備・試製51cm連装砲といったものの |428|季|近海に侵入する敵潜を制圧せよ!|「対潜警戒任務」「海峡警備行動」「長時間対潜警戒」成功各2|1エリア達成ごとに進捗が進む |434|年(2月)|特設護衛船団司令部、活動開始!|「警備任務」「海上護衛任務」「兵站強化任務」「海峡警備行動」「タンカー護衛任務」成功各1| |436|年(3月)|練習航海及び警備任務を実施せよ!|「練習航海」「長距離練習航海」「警備任務」「対潜警戒任務」「強行偵察任務」成功各1| +|437|年(5月)|小笠原沖哨戒線の強化を実施せよ!|「対潜警戒任務」「小笠原沖哨戒線遠征」「小笠原沖戦闘哨戒」「南西方面航空偵察作戦」成功各1?| |503|日|艦隊大整備!|入渠5 |504|日|艦隊酒保祭り!|補給15回 |605|日|新装備「開発」指令|開発1(失敗可) diff --git a/ElectronicObserver/Resource/ResourceManager.cs b/ElectronicObserver/Resource/ResourceManager.cs index 6aee49a49..c68ade0d7 100644 --- a/ElectronicObserver/Resource/ResourceManager.cs +++ b/ElectronicObserver/Resource/ResourceManager.cs @@ -64,7 +64,7 @@ public enum IconContent ItemBlueprint, ItemCatapult, ItemPresentBox, - ItemActionReport, + ItemActionReport, FormArsenal, FormBattle, FormCompass, @@ -91,7 +91,8 @@ public enum IconContent FormAntiAirDefense, FormFleetImageGenerator, FormExpChecker, - FormExpeditionCheck, + FormExpeditionCheck, + FormFleetPreset, FleetNoShip, FleetDocking, FleetSortieDamaged, @@ -298,9 +299,9 @@ private void LoadFromArchive(string path) LoadImageFromArchive(Icons, archive, mstpath + @"Item/Blueprint.png", "Item_Blueprint"); LoadImageFromArchive(Icons, archive, mstpath + @"Item/Catapult.png", "Item_Catapult"); LoadImageFromArchive(Icons, archive, mstpath + @"Item/PresentBox.png", "Item_PresentBox"); - LoadImageFromArchive(Icons, archive, mstpath + @"Item/ActionReport.png", "Item_ActionReport"); + LoadImageFromArchive(Icons, archive, mstpath + @"Item/ActionReport.png", "Item_ActionReport"); - LoadImageFromArchive(Icons, archive, mstpath + @"Form/Arsenal.png", "Form_Arsenal"); + LoadImageFromArchive(Icons, archive, mstpath + @"Form/Arsenal.png", "Form_Arsenal"); LoadImageFromArchive(Icons, archive, mstpath + @"Form/Battle.png", "Form_Battle"); LoadImageFromArchive(Icons, archive, mstpath + @"Form/Compass.png", "Form_Compass"); LoadImageFromArchive(Icons, archive, mstpath + @"Form/Dock.png", "Form_Dock"); @@ -326,9 +327,10 @@ private void LoadFromArchive(string path) LoadImageFromArchive(Icons, archive, mstpath + @"Form/AntiAirDefense.png", "Form_AntiAirDefense"); LoadImageFromArchive(Icons, archive, mstpath + @"Form/FleetImageGenerator.png", "Form_FleetImageGenerator"); LoadImageFromArchive(Icons, archive, mstpath + @"Form/ExpChecker.png", "Form_ExpChecker"); - LoadImageFromArchive(Icons, archive, mstpath + @"Form/ExpeditionCheck.png", "Form_ExpeditionCheck"); + LoadImageFromArchive(Icons, archive, mstpath + @"Form/ExpeditionCheck.png", "Form_ExpeditionCheck"); + LoadImageFromArchive(Icons, archive, mstpath + @"Form/FleetPreset.png", "Form_FleetPreset"); - LoadImageFromArchive(Icons, archive, mstpath + @"Fleet/NoShip.png", "Fleet_NoShip"); + LoadImageFromArchive(Icons, archive, mstpath + @"Fleet/NoShip.png", "Fleet_NoShip"); LoadImageFromArchive(Icons, archive, mstpath + @"Fleet/Docking.png", "Fleet_Docking"); LoadImageFromArchive(Icons, archive, mstpath + @"Fleet/SortieDamaged.png", "Fleet_SortieDamaged"); LoadImageFromArchive(Icons, archive, mstpath + @"Fleet/Sortie.png", "Fleet_Sortie"); diff --git a/ElectronicObserver/Utility/Configuration.cs b/ElectronicObserver/Utility/Configuration.cs index 00b19ef98..a07b91aef 100644 --- a/ElectronicObserver/Utility/Configuration.cs +++ b/ElectronicObserver/Utility/Configuration.cs @@ -1,10 +1,6 @@ -using Codeplex.Data; -using ElectronicObserver.Data; -using ElectronicObserver.Observer; -using ElectronicObserver.Resource.Record; +using ElectronicObserver.Resource.Record; using ElectronicObserver.Utility.Mathematics; using ElectronicObserver.Utility.Storage; -using ElectronicObserver.Window.Dialog; using System; using System.Collections.Generic; using System.Drawing; @@ -12,7 +8,6 @@ using System.Linq; using System.Runtime.Serialization; using System.Text; -using System.Threading.Tasks; using System.Windows.Forms; namespace ElectronicObserver.Utility diff --git a/ElectronicObserver/Utility/Data/Calculator.cs b/ElectronicObserver/Utility/Data/Calculator.cs index e95c07ff0..f5499c4b9 100644 --- a/ElectronicObserver/Utility/Data/Calculator.cs +++ b/ElectronicObserver/Utility/Data/Calculator.cs @@ -220,7 +220,7 @@ public static int GetAirSuperiority(BaseAirCorpsData aircorps, bool isAircraftLe int air = 0; double reconBonus = 1.0; - + foreach (var sq in aircorps.Squadrons.Values) { if (sq == null || sq.State != 1) @@ -378,14 +378,33 @@ public static double GetSearchingAbility_New33(FleetData fleet, int branchWeight continue; } - ret += Math.Sqrt(ship.LOSBase); + // 装備シナジーがあるので合計値から引いていく + int losBase = ship.LOSTotal; double equipmentBonus = 0; foreach (var eq in ship.AllSlotInstance.Where(eq => eq != null)) { - var category = eq.MasterEquipment.CategoryType; + losBase -= eq.MasterEquipment.LOS; + if (eq.EquipmentID == 315) // SG レーダー(初期型) だけ装備シナジー補正が乗らないので :( + { + switch (ship.MasterShip.ShipClass) + { + case 65: // Iowa級 + case 69: // Lexington級 + case 83: // Casablanca級 + case 84: // Essex級 + case 87: // John C.Butler級 + case 91: // Fletcher級 + case 93: // Colorado級 + case 95: // Northampton級 + case 99: // Atlanta級 + losBase -= 4; + break; + } + } + double equipmentRate; switch (category) { @@ -440,7 +459,7 @@ public static double GetSearchingAbility_New33(FleetData fleet, int branchWeight equipmentBonus += equipmentRate * (eq.MasterEquipment.LOS + levelRate * Math.Sqrt(eq.Level)); } - ret += equipmentBonus * branchWeight; + ret += Math.Sqrt(losBase) + equipmentBonus * branchWeight; } // 司令部Lv補正 @@ -1252,7 +1271,7 @@ public static int GetAACutinKind(int shipID, int[] slot) if (eq.IsHighAngleGunWithAADirector) highangle_director++; - switch(eq.EquipmentID) + switch (eq.EquipmentID) { case 275: // 10cm連装高角砲改+増設機銃 highangle_musashi++; @@ -1270,7 +1289,7 @@ public static int GetAACutinKind(int shipID, int[] slot) highangle_atlanta_gfcs++; break; } - + } else if (eq.CategoryType == EquipmentTypes.AADirector) { @@ -1825,6 +1844,40 @@ public static int GetShootDownCount(int enemyAircraftCount, double proportionalA } + /// + /// 対空噴進弾幕の発動確率を求めます。 + /// + /// 対象の艦船。 + public static double GetAARocketBarrageProbability(ShipData ship) + { + if (ship == null) + return 0; + + switch (ship.MasterShip.ShipType) + { + case ShipTypes.AviationBattleship: + case ShipTypes.LightAircraftCarrier: + case ShipTypes.AircraftCarrier: + case ShipTypes.ArmoredAircraftCarrier: + case ShipTypes.SeaplaneTender: + case ShipTypes.AviationCruiser: + { + int rocketLauncherCount = ship.AllSlotInstanceMaster.Count(eq => eq?.IsAARocketLauncher ?? false); + if (rocketLauncherCount == 0) + return 0; + + double rocket = (0.9 * ship.LuckTotal + GetAdjustedAAValue(ship)) / 281.0 + ((rocketLauncherCount - 1) * 0.15); + if (ship.MasterShip.ShipClass == 2) // 伊勢型 + rocket += 0.25; + + return rocket; + } + + default: + return 0; + } + } + /// diff --git a/ElectronicObserver/Utility/SoftwareInformation.cs b/ElectronicObserver/Utility/SoftwareInformation.cs index eab3688e7..c34769161 100644 --- a/ElectronicObserver/Utility/SoftwareInformation.cs +++ b/ElectronicObserver/Utility/SoftwareInformation.cs @@ -29,20 +29,20 @@ public static class SoftwareInformation /// /// バージョン(日本語, ソフトウェア名を含みます) /// - public static string VersionJapanese => SoftwareNameJapanese + "四五型改"; + public static string VersionJapanese => SoftwareNameJapanese + "四六型"; /// /// バージョン(英語) /// - public static string VersionEnglish => "4.5.1"; + public static string VersionEnglish => "4.6.0"; /// /// 更新日時 /// - public static DateTime UpdateTime => DateTimeHelper.CSVStringToTime("2020/04/26 15:00:00"); + public static DateTime UpdateTime => DateTimeHelper.CSVStringToTime("2020/06/07 23:00:00"); diff --git a/ElectronicObserver/Window/Dialog/DialogAlbumMasterShip.cs b/ElectronicObserver/Window/Dialog/DialogAlbumMasterShip.cs index f9c1a07cd..9e9eb912b 100644 --- a/ElectronicObserver/Window/Dialog/DialogAlbumMasterShip.cs +++ b/ElectronicObserver/Window/Dialog/DialogAlbumMasterShip.cs @@ -297,16 +297,19 @@ private void UpdateAlbumPage(int shipID) ToolTipInfo.SetToolTip(ResourceName, string.Format("リソース名: {0}\r\nグラフィック ver. {1}\r\nボイス ver. {2}\r\n母港ボイス ver. {3}\r\n({4})", ship.ResourceName, ship.ResourceGraphicVersion, ship.ResourceVoiceVersion, ship.ResourcePortVoiceVersion, Constants.GetVoiceFlag(ship.VoiceFlag))); - - ShipType.Text = ship.IsLandBase ? "陸上施設" : ship.ShipTypeName; { + string shipClassName = Constants.GetShipClass(ship.ShipClass); + bool isShipClassUnknown = shipClassName == "不明"; + + ShipType.Text = (ship.IsAbyssalShip ? "深海" : isShipClassUnknown ? "" : shipClassName) + (ship.IsLandBase ? "陸上施設" : ship.ShipTypeName); + var tip = new StringBuilder(); if (ship.IsAbyssalShip) tip.AppendLine($"艦型ID: {ship.ShipClass}"); - else if (Constants.GetShipClass(ship.ShipClass) == "不明") + else if (isShipClassUnknown) tip.AppendLine($"艦型不明: {ship.ShipClass}"); else - tip.AppendLine($"{Constants.GetShipClass(ship.ShipClass)}: {ship.ShipClass}"); + tip.AppendLine($"{shipClassName}: {ship.ShipClass}"); tip.AppendLine(); tip.AppendLine("装備可能:"); @@ -533,9 +536,9 @@ private void UpdateAlbumPage(int shipID) if (eq.AA != 0) sb.AppendFormat("対空 {0:+0;-0}\r\n", eq.AA); if (eq.Armor != 0) sb.AppendFormat("装甲 {0:+0;-0}\r\n", eq.Armor); if (eq.ASW != 0) sb.AppendFormat("対潜 {0:+0;-0}\r\n", eq.ASW); - if (eq.Evasion != 0) sb.AppendFormat("回避 {0:+0;-0}\r\n", eq.Evasion); + if (eq.Evasion != 0) sb.AppendFormat("{0} {1:+0;-0}\r\n", eq.CategoryType == EquipmentTypes.Interceptor ? "迎撃" : "回避", eq.Evasion); if (eq.LOS != 0) sb.AppendFormat("索敵 {0:+0;-0}\r\n", eq.LOS); - if (eq.Accuracy != 0) sb.AppendFormat("命中 {0:+0;-0}\r\n", eq.Accuracy); + if (eq.Accuracy != 0) sb.AppendFormat("{0} {1:+0;-0}\r\n", eq.CategoryType == EquipmentTypes.Interceptor ? "対爆" : "命中", eq.Accuracy); if (eq.Bomber != 0) sb.AppendFormat("爆装 {0:+0;-0}\r\n", eq.Bomber); sb.AppendLine("(右クリックで図鑑)"); diff --git a/ElectronicObserver/Window/Dialog/DialogAntiAirDefense.Designer.cs b/ElectronicObserver/Window/Dialog/DialogAntiAirDefense.Designer.cs index c7cb43a05..68471385f 100644 --- a/ElectronicObserver/Window/Dialog/DialogAntiAirDefense.Designer.cs +++ b/ElectronicObserver/Window/Dialog/DialogAntiAirDefense.Designer.cs @@ -28,365 +28,379 @@ protected override void Dispose(bool disposing) /// private void InitializeComponent() { - this.components = new System.ComponentModel.Container(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle9 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle7 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle8 = new System.Windows.Forms.DataGridViewCellStyle(); - this.splitContainer1 = new System.Windows.Forms.SplitContainer(); - this.AnnihilationProbability = new System.Windows.Forms.TextBox(); - this.AdjustedFleetAA = new System.Windows.Forms.TextBox(); - this.label6 = new System.Windows.Forms.Label(); - this.ShowAll = new System.Windows.Forms.CheckBox(); - this.label5 = new System.Windows.Forms.Label(); - this.label4 = new System.Windows.Forms.Label(); - this.AACutinKind = new System.Windows.Forms.ComboBox(); - this.label3 = new System.Windows.Forms.Label(); - this.Formation = new System.Windows.Forms.ComboBox(); - this.label2 = new System.Windows.Forms.Label(); - this.EnemySlotCount = new System.Windows.Forms.NumericUpDown(); - this.label1 = new System.Windows.Forms.Label(); - this.FleetID = new System.Windows.Forms.ComboBox(); - this.ResultView = new System.Windows.Forms.DataGridView(); - this.ResultView_ShipName = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ResultView_AntiAir = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ResultView_AdjustedAntiAir = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ResultView_ProportionalAirDefense = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ResultView_FixedAirDefense = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ResultView_ShootDownBoth = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ResultView_ShootDownProportional = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ResultView_ShootDownFixed = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ResultView_ShootDownFailed = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ToolTipInfo = new System.Windows.Forms.ToolTip(this.components); - ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); - this.splitContainer1.Panel1.SuspendLayout(); - this.splitContainer1.Panel2.SuspendLayout(); - this.splitContainer1.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.EnemySlotCount)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.ResultView)).BeginInit(); - this.SuspendLayout(); - // - // splitContainer1 - // - this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; - this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; - this.splitContainer1.Location = new System.Drawing.Point(0, 0); - this.splitContainer1.Name = "splitContainer1"; - this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal; - // - // splitContainer1.Panel1 - // - this.splitContainer1.Panel1.Controls.Add(this.AnnihilationProbability); - this.splitContainer1.Panel1.Controls.Add(this.AdjustedFleetAA); - this.splitContainer1.Panel1.Controls.Add(this.label6); - this.splitContainer1.Panel1.Controls.Add(this.ShowAll); - this.splitContainer1.Panel1.Controls.Add(this.label5); - this.splitContainer1.Panel1.Controls.Add(this.label4); - this.splitContainer1.Panel1.Controls.Add(this.AACutinKind); - this.splitContainer1.Panel1.Controls.Add(this.label3); - this.splitContainer1.Panel1.Controls.Add(this.Formation); - this.splitContainer1.Panel1.Controls.Add(this.label2); - this.splitContainer1.Panel1.Controls.Add(this.EnemySlotCount); - this.splitContainer1.Panel1.Controls.Add(this.label1); - this.splitContainer1.Panel1.Controls.Add(this.FleetID); - this.splitContainer1.Panel1MinSize = 75; - // - // splitContainer1.Panel2 - // - this.splitContainer1.Panel2.Controls.Add(this.ResultView); - this.splitContainer1.Size = new System.Drawing.Size(784, 361); - this.splitContainer1.SplitterDistance = 75; - this.splitContainer1.TabIndex = 0; - // - // AnnihilationProbability - // - this.AnnihilationProbability.Location = new System.Drawing.Point(600, 41); - this.AnnihilationProbability.Name = "AnnihilationProbability"; - this.AnnihilationProbability.ReadOnly = true; - this.AnnihilationProbability.Size = new System.Drawing.Size(80, 23); - this.AnnihilationProbability.TabIndex = 13; - this.AnnihilationProbability.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; - // - // AdjustedFleetAA - // - this.AdjustedFleetAA.Location = new System.Drawing.Point(441, 41); - this.AdjustedFleetAA.Name = "AdjustedFleetAA"; - this.AdjustedFleetAA.ReadOnly = true; - this.AdjustedFleetAA.Size = new System.Drawing.Size(80, 23); - this.AdjustedFleetAA.TabIndex = 12; - this.AdjustedFleetAA.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; - // - // label6 - // - this.label6.AutoSize = true; - this.label6.Location = new System.Drawing.Point(527, 44); - this.label6.Name = "label6"; - this.label6.Size = new System.Drawing.Size(67, 15); - this.label6.TabIndex = 11; - this.label6.Text = "全滅確率:"; - // - // ShowAll - // - this.ShowAll.AutoSize = true; - this.ShowAll.Location = new System.Drawing.Point(539, 14); - this.ShowAll.Name = "ShowAll"; - this.ShowAll.Size = new System.Drawing.Size(112, 19); - this.ShowAll.TabIndex = 10; - this.ShowAll.Text = "すべて選択可能に"; - this.ToolTipInfo.SetToolTip(this.ShowAll, "有効な場合、すべての対空カットインを選択肢に表示します。\r\n無効な場合、現在の艦隊で発動可能なカットインのみを表示します。"); - this.ShowAll.UseVisualStyleBackColor = true; - this.ShowAll.CheckedChanged += new System.EventHandler(this.ShowAll_CheckedChanged); - // - // label5 - // - this.label5.AutoSize = true; - this.label5.Location = new System.Drawing.Point(368, 44); - this.label5.Name = "label5"; - this.label5.Size = new System.Drawing.Size(67, 15); - this.label5.TabIndex = 8; - this.label5.Text = "艦隊防空:"; - // - // label4 - // - this.label4.AutoSize = true; - this.label4.Location = new System.Drawing.Point(188, 15); - this.label4.Name = "label4"; - this.label4.Size = new System.Drawing.Size(85, 15); - this.label4.TabIndex = 7; - this.label4.Text = "対空カットイン:"; - // - // AACutinKind - // - this.AACutinKind.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.AACutinKind.FormattingEnabled = true; - this.AACutinKind.Location = new System.Drawing.Point(282, 12); - this.AACutinKind.Name = "AACutinKind"; - this.AACutinKind.Size = new System.Drawing.Size(240, 23); - this.AACutinKind.TabIndex = 6; - this.AACutinKind.SelectedIndexChanged += new System.EventHandler(this.AACutinKind_SelectedIndexChanged); - // - // label3 - // - this.label3.AutoSize = true; - this.label3.Location = new System.Drawing.Point(12, 44); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(43, 15); - this.label3.TabIndex = 5; - this.label3.Text = "陣形:"; - // - // Formation - // - this.Formation.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.Formation.FormattingEnabled = true; - this.Formation.Items.AddRange(new object[] { - "単縦陣ほか", - "複縦陣", - "輪形陣"}); - this.Formation.Location = new System.Drawing.Point(61, 41); - this.Formation.Name = "Formation"; - this.Formation.Size = new System.Drawing.Size(121, 23); - this.Formation.TabIndex = 4; - this.Formation.SelectedIndexChanged += new System.EventHandler(this.Formation_SelectedIndexChanged); - // - // label2 - // - this.label2.AutoSize = true; - this.label2.Location = new System.Drawing.Point(188, 44); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(88, 15); - this.label2.TabIndex = 3; - this.label2.Text = "敵スロット機数:"; - // - // EnemySlotCount - // - this.EnemySlotCount.Location = new System.Drawing.Point(282, 41); - this.EnemySlotCount.Maximum = new decimal(new int[] { - 999, - 0, - 0, - 0}); - this.EnemySlotCount.Minimum = new decimal(new int[] { - 1, - 0, - 0, - 0}); - this.EnemySlotCount.Name = "EnemySlotCount"; - this.EnemySlotCount.Size = new System.Drawing.Size(80, 23); - this.EnemySlotCount.TabIndex = 2; - this.EnemySlotCount.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; - this.EnemySlotCount.Value = new decimal(new int[] { - 36, - 0, - 0, - 0}); - this.EnemySlotCount.ValueChanged += new System.EventHandler(this.EnemySlotCount_ValueChanged); - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(12, 15); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(43, 15); - this.label1.TabIndex = 1; - this.label1.Text = "艦隊:"; - // - // FleetID - // - this.FleetID.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.FleetID.FormattingEnabled = true; - this.FleetID.Items.AddRange(new object[] { - "第1艦隊", - "第2艦隊", - "第3艦隊", - "第4艦隊", - "連合艦隊"}); - this.FleetID.Location = new System.Drawing.Point(61, 12); - this.FleetID.Name = "FleetID"; - this.FleetID.Size = new System.Drawing.Size(121, 23); - this.FleetID.TabIndex = 0; - this.FleetID.SelectedIndexChanged += new System.EventHandler(this.FleetID_SelectedIndexChanged); - // - // ResultView - // - this.ResultView.AllowUserToAddRows = false; - this.ResultView.AllowUserToDeleteRows = false; - this.ResultView.AllowUserToResizeColumns = false; - this.ResultView.AllowUserToResizeRows = false; - this.ResultView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.ResultView.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.ResultView_ShipName, - this.ResultView_AntiAir, - this.ResultView_AdjustedAntiAir, - this.ResultView_ProportionalAirDefense, - this.ResultView_FixedAirDefense, - this.ResultView_ShootDownBoth, - this.ResultView_ShootDownProportional, - this.ResultView_ShootDownFixed, - this.ResultView_ShootDownFailed}); - dataGridViewCellStyle9.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleRight; - dataGridViewCellStyle9.BackColor = System.Drawing.SystemColors.Window; - dataGridViewCellStyle9.Font = new System.Drawing.Font("Meiryo UI", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Pixel); - dataGridViewCellStyle9.ForeColor = System.Drawing.SystemColors.ControlText; - dataGridViewCellStyle9.SelectionBackColor = System.Drawing.SystemColors.Window; - dataGridViewCellStyle9.SelectionForeColor = System.Drawing.SystemColors.ControlText; - dataGridViewCellStyle9.WrapMode = System.Windows.Forms.DataGridViewTriState.False; - this.ResultView.DefaultCellStyle = dataGridViewCellStyle9; - this.ResultView.Dock = System.Windows.Forms.DockStyle.Fill; - this.ResultView.Location = new System.Drawing.Point(0, 0); - this.ResultView.Name = "ResultView"; - this.ResultView.ReadOnly = true; - this.ResultView.RowHeadersVisible = false; - this.ResultView.RowTemplate.Height = 21; - this.ResultView.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.ResultView.Size = new System.Drawing.Size(784, 282); - this.ResultView.TabIndex = 0; - this.ResultView.CellFormatting += new System.Windows.Forms.DataGridViewCellFormattingEventHandler(this.ResultView_CellFormatting); - // - // ResultView_ShipName - // - this.ResultView_ShipName.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; - dataGridViewCellStyle7.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; - this.ResultView_ShipName.DefaultCellStyle = dataGridViewCellStyle7; - this.ResultView_ShipName.HeaderText = "艦名"; - this.ResultView_ShipName.Name = "ResultView_ShipName"; - this.ResultView_ShipName.ReadOnly = true; - this.ResultView_ShipName.Width = 56; - // - // ResultView_AntiAir - // - this.ResultView_AntiAir.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; - this.ResultView_AntiAir.HeaderText = "対空"; - this.ResultView_AntiAir.Name = "ResultView_AntiAir"; - this.ResultView_AntiAir.ReadOnly = true; - this.ResultView_AntiAir.Width = 56; - // - // ResultView_AdjustedAntiAir - // - this.ResultView_AdjustedAntiAir.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; - this.ResultView_AdjustedAntiAir.HeaderText = "加重対空"; - this.ResultView_AdjustedAntiAir.Name = "ResultView_AdjustedAntiAir"; - this.ResultView_AdjustedAntiAir.ReadOnly = true; - this.ResultView_AdjustedAntiAir.Width = 80; - // - // ResultView_ProportionalAirDefense - // - this.ResultView_ProportionalAirDefense.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; - dataGridViewCellStyle8.Format = "p2"; - this.ResultView_ProportionalAirDefense.DefaultCellStyle = dataGridViewCellStyle8; - this.ResultView_ProportionalAirDefense.HeaderText = "割合撃墜"; - this.ResultView_ProportionalAirDefense.Name = "ResultView_ProportionalAirDefense"; - this.ResultView_ProportionalAirDefense.ReadOnly = true; - this.ResultView_ProportionalAirDefense.Width = 80; - // - // ResultView_FixedAirDefense - // - this.ResultView_FixedAirDefense.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; - this.ResultView_FixedAirDefense.HeaderText = "固定撃墜"; - this.ResultView_FixedAirDefense.Name = "ResultView_FixedAirDefense"; - this.ResultView_FixedAirDefense.ReadOnly = true; - this.ResultView_FixedAirDefense.Width = 80; - // - // ResultView_ShootDownBoth - // - this.ResultView_ShootDownBoth.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; - this.ResultView_ShootDownBoth.HeaderText = "両方成功"; - this.ResultView_ShootDownBoth.Name = "ResultView_ShootDownBoth"; - this.ResultView_ShootDownBoth.ReadOnly = true; - this.ResultView_ShootDownBoth.ToolTipText = "割合撃墜・固定撃墜の両方に成功した場合の撃墜数"; - this.ResultView_ShootDownBoth.Width = 80; - // - // ResultView_ShootDownProportional - // - this.ResultView_ShootDownProportional.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; - this.ResultView_ShootDownProportional.HeaderText = "割合のみ"; - this.ResultView_ShootDownProportional.Name = "ResultView_ShootDownProportional"; - this.ResultView_ShootDownProportional.ReadOnly = true; - this.ResultView_ShootDownProportional.ToolTipText = "割合撃墜に成功した場合の撃墜数"; - this.ResultView_ShootDownProportional.Width = 77; - // - // ResultView_ShootDownFixed - // - this.ResultView_ShootDownFixed.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; - this.ResultView_ShootDownFixed.HeaderText = "固定のみ"; - this.ResultView_ShootDownFixed.Name = "ResultView_ShootDownFixed"; - this.ResultView_ShootDownFixed.ReadOnly = true; - this.ResultView_ShootDownFixed.ToolTipText = "固定撃墜に成功した場合の撃墜数"; - this.ResultView_ShootDownFixed.Width = 77; - // - // ResultView_ShootDownFailed - // - this.ResultView_ShootDownFailed.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; - this.ResultView_ShootDownFailed.HeaderText = "両方失敗"; - this.ResultView_ShootDownFailed.Name = "ResultView_ShootDownFailed"; - this.ResultView_ShootDownFailed.ReadOnly = true; - this.ResultView_ShootDownFailed.ToolTipText = "固定撃墜・割合撃墜の両方に失敗した場合の撃墜数"; - this.ResultView_ShootDownFailed.Width = 80; - // - // ToolTipInfo - // - this.ToolTipInfo.AutoPopDelay = 30000; - this.ToolTipInfo.InitialDelay = 500; - this.ToolTipInfo.ReshowDelay = 100; - this.ToolTipInfo.ShowAlways = true; - // - // DialogAntiAirDefense - // - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; - this.ClientSize = new System.Drawing.Size(784, 361); - this.Controls.Add(this.splitContainer1); - this.Font = new System.Drawing.Font("Meiryo UI", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Pixel); - this.Name = "DialogAntiAirDefense"; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; - this.Text = "対空砲火詳細"; - this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.DialogAntiAirDefense_FormClosed); - this.Load += new System.EventHandler(this.DialogAntiAirDefense_Load); - this.splitContainer1.Panel1.ResumeLayout(false); - this.splitContainer1.Panel1.PerformLayout(); - this.splitContainer1.Panel2.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); - this.splitContainer1.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.EnemySlotCount)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.ResultView)).EndInit(); - this.ResumeLayout(false); + this.components = new System.ComponentModel.Container(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle4 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.AnnihilationProbability = new System.Windows.Forms.TextBox(); + this.AdjustedFleetAA = new System.Windows.Forms.TextBox(); + this.label6 = new System.Windows.Forms.Label(); + this.ShowAll = new System.Windows.Forms.CheckBox(); + this.label5 = new System.Windows.Forms.Label(); + this.label4 = new System.Windows.Forms.Label(); + this.AACutinKind = new System.Windows.Forms.ComboBox(); + this.label3 = new System.Windows.Forms.Label(); + this.Formation = new System.Windows.Forms.ComboBox(); + this.label2 = new System.Windows.Forms.Label(); + this.EnemySlotCount = new System.Windows.Forms.NumericUpDown(); + this.label1 = new System.Windows.Forms.Label(); + this.FleetID = new System.Windows.Forms.ComboBox(); + this.ResultView = new System.Windows.Forms.DataGridView(); + this.ToolTipInfo = new System.Windows.Forms.ToolTip(this.components); + this.ResultView_ShipName = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ResultView_AntiAir = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ResultView_AdjustedAntiAir = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ResultView_ProportionalAirDefense = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ResultView_FixedAirDefense = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ResultView_ShootDownBoth = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ResultView_ShootDownProportional = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ResultView_ShootDownFixed = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ResultView_ShootDownFailed = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ResultView_AARocketBarrageProbability = new System.Windows.Forms.DataGridViewTextBoxColumn(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.EnemySlotCount)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.ResultView)).BeginInit(); + this.SuspendLayout(); + // + // splitContainer1 + // + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.splitContainer1.Location = new System.Drawing.Point(0, 0); + this.splitContainer1.Name = "splitContainer1"; + this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.AnnihilationProbability); + this.splitContainer1.Panel1.Controls.Add(this.AdjustedFleetAA); + this.splitContainer1.Panel1.Controls.Add(this.label6); + this.splitContainer1.Panel1.Controls.Add(this.ShowAll); + this.splitContainer1.Panel1.Controls.Add(this.label5); + this.splitContainer1.Panel1.Controls.Add(this.label4); + this.splitContainer1.Panel1.Controls.Add(this.AACutinKind); + this.splitContainer1.Panel1.Controls.Add(this.label3); + this.splitContainer1.Panel1.Controls.Add(this.Formation); + this.splitContainer1.Panel1.Controls.Add(this.label2); + this.splitContainer1.Panel1.Controls.Add(this.EnemySlotCount); + this.splitContainer1.Panel1.Controls.Add(this.label1); + this.splitContainer1.Panel1.Controls.Add(this.FleetID); + this.splitContainer1.Panel1MinSize = 75; + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.ResultView); + this.splitContainer1.Size = new System.Drawing.Size(884, 361); + this.splitContainer1.SplitterDistance = 75; + this.splitContainer1.TabIndex = 0; + // + // AnnihilationProbability + // + this.AnnihilationProbability.Location = new System.Drawing.Point(600, 41); + this.AnnihilationProbability.Name = "AnnihilationProbability"; + this.AnnihilationProbability.ReadOnly = true; + this.AnnihilationProbability.Size = new System.Drawing.Size(80, 23); + this.AnnihilationProbability.TabIndex = 13; + this.AnnihilationProbability.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + // + // AdjustedFleetAA + // + this.AdjustedFleetAA.Location = new System.Drawing.Point(441, 41); + this.AdjustedFleetAA.Name = "AdjustedFleetAA"; + this.AdjustedFleetAA.ReadOnly = true; + this.AdjustedFleetAA.Size = new System.Drawing.Size(80, 23); + this.AdjustedFleetAA.TabIndex = 12; + this.AdjustedFleetAA.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(527, 44); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(67, 15); + this.label6.TabIndex = 11; + this.label6.Text = "全滅確率:"; + // + // ShowAll + // + this.ShowAll.AutoSize = true; + this.ShowAll.Location = new System.Drawing.Point(539, 14); + this.ShowAll.Name = "ShowAll"; + this.ShowAll.Size = new System.Drawing.Size(112, 19); + this.ShowAll.TabIndex = 10; + this.ShowAll.Text = "すべて選択可能に"; + this.ToolTipInfo.SetToolTip(this.ShowAll, "有効な場合、すべての対空カットインを選択肢に表示します。\r\n無効な場合、現在の艦隊で発動可能なカットインのみを表示します。"); + this.ShowAll.UseVisualStyleBackColor = true; + this.ShowAll.CheckedChanged += new System.EventHandler(this.ShowAll_CheckedChanged); + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(368, 44); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(67, 15); + this.label5.TabIndex = 8; + this.label5.Text = "艦隊防空:"; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(188, 15); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(85, 15); + this.label4.TabIndex = 7; + this.label4.Text = "対空カットイン:"; + // + // AACutinKind + // + this.AACutinKind.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.AACutinKind.FormattingEnabled = true; + this.AACutinKind.Location = new System.Drawing.Point(282, 12); + this.AACutinKind.Name = "AACutinKind"; + this.AACutinKind.Size = new System.Drawing.Size(240, 23); + this.AACutinKind.TabIndex = 6; + this.AACutinKind.SelectedIndexChanged += new System.EventHandler(this.AACutinKind_SelectedIndexChanged); + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(12, 44); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(43, 15); + this.label3.TabIndex = 5; + this.label3.Text = "陣形:"; + // + // Formation + // + this.Formation.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.Formation.FormattingEnabled = true; + this.Formation.Items.AddRange(new object[] { + "単縦陣ほか", + "複縦陣", + "輪形陣"}); + this.Formation.Location = new System.Drawing.Point(61, 41); + this.Formation.Name = "Formation"; + this.Formation.Size = new System.Drawing.Size(121, 23); + this.Formation.TabIndex = 4; + this.Formation.SelectedIndexChanged += new System.EventHandler(this.Formation_SelectedIndexChanged); + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(188, 44); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(88, 15); + this.label2.TabIndex = 3; + this.label2.Text = "敵スロット機数:"; + // + // EnemySlotCount + // + this.EnemySlotCount.Location = new System.Drawing.Point(282, 41); + this.EnemySlotCount.Maximum = new decimal(new int[] { + 999, + 0, + 0, + 0}); + this.EnemySlotCount.Minimum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.EnemySlotCount.Name = "EnemySlotCount"; + this.EnemySlotCount.Size = new System.Drawing.Size(80, 23); + this.EnemySlotCount.TabIndex = 2; + this.EnemySlotCount.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + this.EnemySlotCount.Value = new decimal(new int[] { + 36, + 0, + 0, + 0}); + this.EnemySlotCount.ValueChanged += new System.EventHandler(this.EnemySlotCount_ValueChanged); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(12, 15); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(43, 15); + this.label1.TabIndex = 1; + this.label1.Text = "艦隊:"; + // + // FleetID + // + this.FleetID.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.FleetID.FormattingEnabled = true; + this.FleetID.Items.AddRange(new object[] { + "第1艦隊", + "第2艦隊", + "第3艦隊", + "第4艦隊", + "連合艦隊"}); + this.FleetID.Location = new System.Drawing.Point(61, 12); + this.FleetID.Name = "FleetID"; + this.FleetID.Size = new System.Drawing.Size(121, 23); + this.FleetID.TabIndex = 0; + this.FleetID.SelectedIndexChanged += new System.EventHandler(this.FleetID_SelectedIndexChanged); + // + // ResultView + // + this.ResultView.AllowUserToAddRows = false; + this.ResultView.AllowUserToDeleteRows = false; + this.ResultView.AllowUserToResizeColumns = false; + this.ResultView.AllowUserToResizeRows = false; + this.ResultView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.ResultView.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.ResultView_ShipName, + this.ResultView_AntiAir, + this.ResultView_AdjustedAntiAir, + this.ResultView_ProportionalAirDefense, + this.ResultView_FixedAirDefense, + this.ResultView_ShootDownBoth, + this.ResultView_ShootDownProportional, + this.ResultView_ShootDownFixed, + this.ResultView_ShootDownFailed, + this.ResultView_AARocketBarrageProbability}); + dataGridViewCellStyle4.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleRight; + dataGridViewCellStyle4.BackColor = System.Drawing.SystemColors.Window; + dataGridViewCellStyle4.Font = new System.Drawing.Font("Meiryo UI", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Pixel); + dataGridViewCellStyle4.ForeColor = System.Drawing.SystemColors.ControlText; + dataGridViewCellStyle4.SelectionBackColor = System.Drawing.SystemColors.Window; + dataGridViewCellStyle4.SelectionForeColor = System.Drawing.SystemColors.ControlText; + dataGridViewCellStyle4.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.ResultView.DefaultCellStyle = dataGridViewCellStyle4; + this.ResultView.Dock = System.Windows.Forms.DockStyle.Fill; + this.ResultView.Location = new System.Drawing.Point(0, 0); + this.ResultView.Name = "ResultView"; + this.ResultView.ReadOnly = true; + this.ResultView.RowHeadersVisible = false; + this.ResultView.RowTemplate.Height = 21; + this.ResultView.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.ResultView.Size = new System.Drawing.Size(884, 282); + this.ResultView.TabIndex = 0; + this.ResultView.CellFormatting += new System.Windows.Forms.DataGridViewCellFormattingEventHandler(this.ResultView_CellFormatting); + // + // ToolTipInfo + // + this.ToolTipInfo.AutoPopDelay = 30000; + this.ToolTipInfo.InitialDelay = 500; + this.ToolTipInfo.ReshowDelay = 100; + this.ToolTipInfo.ShowAlways = true; + // + // ResultView_ShipName + // + this.ResultView_ShipName.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + this.ResultView_ShipName.DefaultCellStyle = dataGridViewCellStyle1; + this.ResultView_ShipName.HeaderText = "艦名"; + this.ResultView_ShipName.Name = "ResultView_ShipName"; + this.ResultView_ShipName.ReadOnly = true; + this.ResultView_ShipName.Width = 56; + // + // ResultView_AntiAir + // + this.ResultView_AntiAir.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.ResultView_AntiAir.HeaderText = "対空"; + this.ResultView_AntiAir.Name = "ResultView_AntiAir"; + this.ResultView_AntiAir.ReadOnly = true; + this.ResultView_AntiAir.Width = 56; + // + // ResultView_AdjustedAntiAir + // + this.ResultView_AdjustedAntiAir.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.ResultView_AdjustedAntiAir.HeaderText = "加重対空"; + this.ResultView_AdjustedAntiAir.Name = "ResultView_AdjustedAntiAir"; + this.ResultView_AdjustedAntiAir.ReadOnly = true; + this.ResultView_AdjustedAntiAir.Width = 80; + // + // ResultView_ProportionalAirDefense + // + this.ResultView_ProportionalAirDefense.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + dataGridViewCellStyle2.Format = "p2"; + this.ResultView_ProportionalAirDefense.DefaultCellStyle = dataGridViewCellStyle2; + this.ResultView_ProportionalAirDefense.HeaderText = "割合撃墜"; + this.ResultView_ProportionalAirDefense.Name = "ResultView_ProportionalAirDefense"; + this.ResultView_ProportionalAirDefense.ReadOnly = true; + this.ResultView_ProportionalAirDefense.Width = 80; + // + // ResultView_FixedAirDefense + // + this.ResultView_FixedAirDefense.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.ResultView_FixedAirDefense.HeaderText = "固定撃墜"; + this.ResultView_FixedAirDefense.Name = "ResultView_FixedAirDefense"; + this.ResultView_FixedAirDefense.ReadOnly = true; + this.ResultView_FixedAirDefense.Width = 80; + // + // ResultView_ShootDownBoth + // + this.ResultView_ShootDownBoth.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.ResultView_ShootDownBoth.HeaderText = "両方成功"; + this.ResultView_ShootDownBoth.Name = "ResultView_ShootDownBoth"; + this.ResultView_ShootDownBoth.ReadOnly = true; + this.ResultView_ShootDownBoth.ToolTipText = "割合撃墜・固定撃墜の両方に成功した場合の撃墜数"; + this.ResultView_ShootDownBoth.Width = 80; + // + // ResultView_ShootDownProportional + // + this.ResultView_ShootDownProportional.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.ResultView_ShootDownProportional.HeaderText = "割合のみ"; + this.ResultView_ShootDownProportional.Name = "ResultView_ShootDownProportional"; + this.ResultView_ShootDownProportional.ReadOnly = true; + this.ResultView_ShootDownProportional.ToolTipText = "割合撃墜に成功した場合の撃墜数"; + this.ResultView_ShootDownProportional.Width = 77; + // + // ResultView_ShootDownFixed + // + this.ResultView_ShootDownFixed.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.ResultView_ShootDownFixed.HeaderText = "固定のみ"; + this.ResultView_ShootDownFixed.Name = "ResultView_ShootDownFixed"; + this.ResultView_ShootDownFixed.ReadOnly = true; + this.ResultView_ShootDownFixed.ToolTipText = "固定撃墜に成功した場合の撃墜数"; + this.ResultView_ShootDownFixed.Width = 77; + // + // ResultView_ShootDownFailed + // + this.ResultView_ShootDownFailed.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.ResultView_ShootDownFailed.HeaderText = "両方失敗"; + this.ResultView_ShootDownFailed.Name = "ResultView_ShootDownFailed"; + this.ResultView_ShootDownFailed.ReadOnly = true; + this.ResultView_ShootDownFailed.ToolTipText = "固定撃墜・割合撃墜の両方に失敗した場合の撃墜数"; + this.ResultView_ShootDownFailed.Width = 80; + // + // ResultView_AARocketBarrageProbability + // + this.ResultView_AARocketBarrageProbability.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + dataGridViewCellStyle3.Format = "p1"; + this.ResultView_AARocketBarrageProbability.DefaultCellStyle = dataGridViewCellStyle3; + this.ResultView_AARocketBarrageProbability.HeaderText = "噴進弾幕"; + this.ResultView_AARocketBarrageProbability.Name = "ResultView_AARocketBarrageProbability"; + this.ResultView_AARocketBarrageProbability.ReadOnly = true; + this.ResultView_AARocketBarrageProbability.ToolTipText = "対空噴進弾幕の発動確率"; + this.ResultView_AARocketBarrageProbability.Width = 80; + // + // DialogAntiAirDefense + // + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + this.ClientSize = new System.Drawing.Size(884, 361); + this.Controls.Add(this.splitContainer1); + this.Font = new System.Drawing.Font("Meiryo UI", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Pixel); + this.Name = "DialogAntiAirDefense"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "対空砲火詳細"; + this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.DialogAntiAirDefense_FormClosed); + this.Load += new System.EventHandler(this.DialogAntiAirDefense_Load); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel1.PerformLayout(); + this.splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.EnemySlotCount)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.ResultView)).EndInit(); + this.ResumeLayout(false); } @@ -405,6 +419,9 @@ private void InitializeComponent() private System.Windows.Forms.DataGridView ResultView; private System.Windows.Forms.CheckBox ShowAll; private System.Windows.Forms.ToolTip ToolTipInfo; + private System.Windows.Forms.TextBox AdjustedFleetAA; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.TextBox AnnihilationProbability; private System.Windows.Forms.DataGridViewTextBoxColumn ResultView_ShipName; private System.Windows.Forms.DataGridViewTextBoxColumn ResultView_AntiAir; private System.Windows.Forms.DataGridViewTextBoxColumn ResultView_AdjustedAntiAir; @@ -414,8 +431,6 @@ private void InitializeComponent() private System.Windows.Forms.DataGridViewTextBoxColumn ResultView_ShootDownProportional; private System.Windows.Forms.DataGridViewTextBoxColumn ResultView_ShootDownFixed; private System.Windows.Forms.DataGridViewTextBoxColumn ResultView_ShootDownFailed; - private System.Windows.Forms.TextBox AdjustedFleetAA; - private System.Windows.Forms.Label label6; - private System.Windows.Forms.TextBox AnnihilationProbability; + private System.Windows.Forms.DataGridViewTextBoxColumn ResultView_AARocketBarrageProbability; } } \ No newline at end of file diff --git a/ElectronicObserver/Window/Dialog/DialogAntiAirDefense.cs b/ElectronicObserver/Window/Dialog/DialogAntiAirDefense.cs index 233e4404e..46c6d22e7 100644 --- a/ElectronicObserver/Window/Dialog/DialogAntiAirDefense.cs +++ b/ElectronicObserver/Window/Dialog/DialogAntiAirDefense.cs @@ -78,7 +78,8 @@ private void DialogAntiAirDefense_Load(object sender, EventArgs e) return; } - FleetID.SelectedIndex = 0; + if (FleetID.SelectedIndex == -1) + FleetID.SelectedIndex = 0; Formation.SelectedIndex = 0; UpdateAACutinKind(ShowAll.Checked); @@ -133,6 +134,7 @@ private void Updated() int[] shootDownFailed = adjustedAAs.Select((val, i) => ships[i] == null ? 0 : Calculator.GetShootDownCount(enemyAircraftCount, 0, 0, aaCutinKind)).ToArray(); + double[] aaRocketBarrageProbability = ships.Select(ship => Calculator.GetAARocketBarrageProbability(ship)).ToArray(); ResultView.Rows.Clear(); @@ -145,7 +147,17 @@ private void Updated() rows[i] = new DataGridViewRow(); rows[i].CreateCells(ResultView); - rows[i].SetValues(ships[i].Name, ships[i].AABase, adjustedAAs[i], proportionalAAs[i], fixedAAs[i], shootDownBoth[i], shootDownProportional[i], shootDownFixed[i], shootDownFailed[i]); + rows[i].SetValues( + ships[i].Name, + ships[i].AABase, + adjustedAAs[i], + proportionalAAs[i], + fixedAAs[i], + shootDownBoth[i], + shootDownProportional[i], + shootDownFixed[i], + shootDownFailed[i], + aaRocketBarrageProbability[i]); } ResultView.Rows.AddRange(rows.Where(r => r != null).ToArray()); diff --git a/ElectronicObserver/Window/Dialog/DialogAntiAirDefense.resx b/ElectronicObserver/Window/Dialog/DialogAntiAirDefense.resx index 0216d0251..2bde270d3 100644 --- a/ElectronicObserver/Window/Dialog/DialogAntiAirDefense.resx +++ b/ElectronicObserver/Window/Dialog/DialogAntiAirDefense.resx @@ -147,7 +147,7 @@ True - - 17, 17 + + True \ No newline at end of file diff --git a/ElectronicObserver/Window/Dialog/DialogConfigurationNotifier.Designer.cs b/ElectronicObserver/Window/Dialog/DialogConfigurationNotifier.Designer.cs index 67d566854..8d39699be 100644 --- a/ElectronicObserver/Window/Dialog/DialogConfigurationNotifier.Designer.cs +++ b/ElectronicObserver/Window/Dialog/DialogConfigurationNotifier.Designer.cs @@ -83,10 +83,6 @@ private void InitializeComponent() this.DialogOpenImage = new System.Windows.Forms.OpenFileDialog(); this.ToolTipText = new System.Windows.Forms.ToolTip(this.components); this.AnchorageRepairNotificationLevel = new System.Windows.Forms.ComboBox(); - this.label10 = new System.Windows.Forms.Label(); - this.GroupAnchorageRepair = new System.Windows.Forms.GroupBox(); - this.label11 = new System.Windows.Forms.Label(); - this.GroupBaseAirCorps = new System.Windows.Forms.GroupBox(); this.BaseAirCorps_NotSupplied = new System.Windows.Forms.CheckBox(); this.BaseAirCorps_Tired = new System.Windows.Forms.CheckBox(); this.BaseAirCorps_NotOrganized = new System.Windows.Forms.CheckBox(); @@ -97,6 +93,10 @@ private void InitializeComponent() this.BaseAirCorps_EventMap = new System.Windows.Forms.CheckBox(); this.BaseAirCorps_EquipmentRelocation = new System.Windows.Forms.CheckBox(); this.BaseAirCorps_SquadronRelocation = new System.Windows.Forms.CheckBox(); + this.label10 = new System.Windows.Forms.Label(); + this.GroupAnchorageRepair = new System.Windows.Forms.GroupBox(); + this.label11 = new System.Windows.Forms.Label(); + this.GroupBaseAirCorps = new System.Windows.Forms.GroupBox(); this.GroupSound.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.SoundVolume)).BeginInit(); this.GroupImage.SuspendLayout(); @@ -755,61 +755,14 @@ private void InitializeComponent() this.AnchorageRepairNotificationLevel.Items.AddRange(new object[] { "いつでも", "明石旗艦の時", - "修理艦もいる時"}); + "修理艦もいる時", + "プリセット編成時"}); this.AnchorageRepairNotificationLevel.Location = new System.Drawing.Point(80, 20); this.AnchorageRepairNotificationLevel.Name = "AnchorageRepairNotificationLevel"; this.AnchorageRepairNotificationLevel.Size = new System.Drawing.Size(160, 23); this.AnchorageRepairNotificationLevel.TabIndex = 1; - this.ToolTipText.SetToolTip(this.AnchorageRepairNotificationLevel, "いつでも:20分経過したら通知します。\r\n明石旗艦の時:上記に加え、明石旗艦の時のみ通知します。\r\n修理艦もいるとき:上記に加え、実際に修理可能な条件の時のみ通知" + - "します。"); - // - // label10 - // - this.label10.AutoSize = true; - this.label10.Location = new System.Drawing.Point(93, 411); - this.label10.Name = "label10"; - this.label10.Size = new System.Drawing.Size(213, 15); - this.label10.TabIndex = 8; - this.label10.Text = "*テストを行った時点で設定が適用されます"; - // - // GroupAnchorageRepair - // - this.GroupAnchorageRepair.Controls.Add(this.AnchorageRepairNotificationLevel); - this.GroupAnchorageRepair.Controls.Add(this.label11); - this.GroupAnchorageRepair.Location = new System.Drawing.Point(12, 298); - this.GroupAnchorageRepair.Name = "GroupAnchorageRepair"; - this.GroupAnchorageRepair.Size = new System.Drawing.Size(602, 103); - this.GroupAnchorageRepair.TabIndex = 9; - this.GroupAnchorageRepair.TabStop = false; - this.GroupAnchorageRepair.Text = "泊地修理設定"; - // - // label11 - // - this.label11.AutoSize = true; - this.label11.Location = new System.Drawing.Point(7, 22); - this.label11.Name = "label11"; - this.label11.Size = new System.Drawing.Size(67, 15); - this.label11.TabIndex = 0; - this.label11.Text = "発動条件:"; - // - // GroupBaseAirCorps - // - this.GroupBaseAirCorps.Controls.Add(this.BaseAirCorps_SquadronRelocation); - this.GroupBaseAirCorps.Controls.Add(this.BaseAirCorps_EquipmentRelocation); - this.GroupBaseAirCorps.Controls.Add(this.BaseAirCorps_EventMap); - this.GroupBaseAirCorps.Controls.Add(this.BaseAirCorps_NormalMap); - this.GroupBaseAirCorps.Controls.Add(this.BaseAirCorps_Standby); - this.GroupBaseAirCorps.Controls.Add(this.BaseAirCorps_Retreat); - this.GroupBaseAirCorps.Controls.Add(this.BaseAirCorps_Rest); - this.GroupBaseAirCorps.Controls.Add(this.BaseAirCorps_NotOrganized); - this.GroupBaseAirCorps.Controls.Add(this.BaseAirCorps_Tired); - this.GroupBaseAirCorps.Controls.Add(this.BaseAirCorps_NotSupplied); - this.GroupBaseAirCorps.Location = new System.Drawing.Point(12, 298); - this.GroupBaseAirCorps.Name = "GroupBaseAirCorps"; - this.GroupBaseAirCorps.Size = new System.Drawing.Size(602, 103); - this.GroupBaseAirCorps.TabIndex = 10; - this.GroupBaseAirCorps.TabStop = false; - this.GroupBaseAirCorps.Text = "基地航空隊設定"; + this.ToolTipText.SetToolTip(this.AnchorageRepairNotificationLevel, "いつでも:20分経過したら通知します。\r\n明石旗艦の時:上記に加え、明石旗艦の時のみ通知します。\r\n修理艦もいる時:上記に加え、実際に修理可能な条件の時のみ通知し" + + "ます。\r\nプリセット編成時:上記に加え、修理条件を満たしたプリセット編成を含むときにも通知します。"); // // BaseAirCorps_NotSupplied // @@ -921,6 +874,54 @@ private void InitializeComponent() this.ToolTipText.SetToolTip(this.BaseAirCorps_SquadronRelocation, "基地のスロットの配置転換が完了したときに通知します。\r\n「装備の配置転換完了」とは異なり、装備欄に戻った機体は通知しません。\r\n"); this.BaseAirCorps_SquadronRelocation.UseVisualStyleBackColor = true; // + // label10 + // + this.label10.AutoSize = true; + this.label10.Location = new System.Drawing.Point(93, 411); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(213, 15); + this.label10.TabIndex = 8; + this.label10.Text = "*テストを行った時点で設定が適用されます"; + // + // GroupAnchorageRepair + // + this.GroupAnchorageRepair.Controls.Add(this.AnchorageRepairNotificationLevel); + this.GroupAnchorageRepair.Controls.Add(this.label11); + this.GroupAnchorageRepair.Location = new System.Drawing.Point(12, 298); + this.GroupAnchorageRepair.Name = "GroupAnchorageRepair"; + this.GroupAnchorageRepair.Size = new System.Drawing.Size(602, 103); + this.GroupAnchorageRepair.TabIndex = 9; + this.GroupAnchorageRepair.TabStop = false; + this.GroupAnchorageRepair.Text = "泊地修理設定"; + // + // label11 + // + this.label11.AutoSize = true; + this.label11.Location = new System.Drawing.Point(7, 22); + this.label11.Name = "label11"; + this.label11.Size = new System.Drawing.Size(67, 15); + this.label11.TabIndex = 0; + this.label11.Text = "発動条件:"; + // + // GroupBaseAirCorps + // + this.GroupBaseAirCorps.Controls.Add(this.BaseAirCorps_SquadronRelocation); + this.GroupBaseAirCorps.Controls.Add(this.BaseAirCorps_EquipmentRelocation); + this.GroupBaseAirCorps.Controls.Add(this.BaseAirCorps_EventMap); + this.GroupBaseAirCorps.Controls.Add(this.BaseAirCorps_NormalMap); + this.GroupBaseAirCorps.Controls.Add(this.BaseAirCorps_Standby); + this.GroupBaseAirCorps.Controls.Add(this.BaseAirCorps_Retreat); + this.GroupBaseAirCorps.Controls.Add(this.BaseAirCorps_Rest); + this.GroupBaseAirCorps.Controls.Add(this.BaseAirCorps_NotOrganized); + this.GroupBaseAirCorps.Controls.Add(this.BaseAirCorps_Tired); + this.GroupBaseAirCorps.Controls.Add(this.BaseAirCorps_NotSupplied); + this.GroupBaseAirCorps.Location = new System.Drawing.Point(12, 298); + this.GroupBaseAirCorps.Name = "GroupBaseAirCorps"; + this.GroupBaseAirCorps.Size = new System.Drawing.Size(602, 103); + this.GroupBaseAirCorps.TabIndex = 10; + this.GroupBaseAirCorps.TabStop = false; + this.GroupBaseAirCorps.Text = "基地航空隊設定"; + // // DialogConfigurationNotifier // this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; diff --git a/ElectronicObserver/Window/Dialog/DialogConfigurationNotifier.resx b/ElectronicObserver/Window/Dialog/DialogConfigurationNotifier.resx index d4c0dc970..2dd79f425 100644 --- a/ElectronicObserver/Window/Dialog/DialogConfigurationNotifier.resx +++ b/ElectronicObserver/Window/Dialog/DialogConfigurationNotifier.resx @@ -129,7 +129,4 @@ 296, 17 - - 455, 17 - \ No newline at end of file diff --git a/ElectronicObserver/Window/Dialog/DialogEquipmentList.Designer.cs b/ElectronicObserver/Window/Dialog/DialogEquipmentList.Designer.cs index 979dd1387..f6d3391e2 100644 --- a/ElectronicObserver/Window/Dialog/DialogEquipmentList.Designer.cs +++ b/ElectronicObserver/Window/Dialog/DialogEquipmentList.Designer.cs @@ -38,6 +38,7 @@ private void InitializeComponent() this.TopMenu_File = new System.Windows.Forms.ToolStripMenuItem(); this.TopMenu_File_CSVOutput = new System.Windows.Forms.ToolStripMenuItem(); this.TopMenu_File_Update = new System.Windows.Forms.ToolStripMenuItem(); + this.TopMenu_File_CopyToFleetAnalysis = new System.Windows.Forms.ToolStripMenuItem(); this.SaveCSVDialog = new System.Windows.Forms.SaveFileDialog(); this.splitContainer1 = new System.Windows.Forms.SplitContainer(); this.DetailView = new System.Windows.Forms.DataGridView(); @@ -46,7 +47,6 @@ private void InitializeComponent() this.DetailView_CountAll = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.DetailView_CountRemain = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.DetailView_EquippedShip = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.TopMenu_File_CopyToFleetAnalysis = new System.Windows.Forms.ToolStripMenuItem(); ((System.ComponentModel.ISupportInitialize)(this.EquipmentView)).BeginInit(); this.TopMenu.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); @@ -79,6 +79,7 @@ private void InitializeComponent() this.EquipmentView.Size = new System.Drawing.Size(320, 456); this.EquipmentView.TabIndex = 0; this.EquipmentView.CellFormatting += new System.Windows.Forms.DataGridViewCellFormattingEventHandler(this.EquipmentView_CellFormatting); + this.EquipmentView.CellMouseClick += new System.Windows.Forms.DataGridViewCellMouseEventHandler(this.EquipmentView_CellMouseClick); this.EquipmentView.SelectionChanged += new System.EventHandler(this.EquipmentView_SelectionChanged); this.EquipmentView.SortCompare += new System.Windows.Forms.DataGridViewSortCompareEventHandler(this.EquipmentView_SortCompare); this.EquipmentView.Sorted += new System.EventHandler(this.EquipmentView_Sorted); @@ -158,6 +159,13 @@ private void InitializeComponent() this.TopMenu_File_Update.Text = "更新(&U)"; this.TopMenu_File_Update.Click += new System.EventHandler(this.TopMenu_File_Update_Click); // + // TopMenu_File_CopyToFleetAnalysis + // + this.TopMenu_File_CopyToFleetAnalysis.Name = "TopMenu_File_CopyToFleetAnalysis"; + this.TopMenu_File_CopyToFleetAnalysis.Size = new System.Drawing.Size(207, 22); + this.TopMenu_File_CopyToFleetAnalysis.Text = "艦隊分析ページへコピー(&A)"; + this.TopMenu_File_CopyToFleetAnalysis.Click += new System.EventHandler(this.TopMenu_File_CopyToFleetAnalysis_Click); + // // SaveCSVDialog // this.SaveCSVDialog.Filter = "CSV|*.csv|File|*"; @@ -243,13 +251,6 @@ private void InitializeComponent() this.DetailView_EquippedShip.ReadOnly = true; this.DetailView_EquippedShip.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; // - // TopMenu_File_CopyToFleetAnalysis - // - this.TopMenu_File_CopyToFleetAnalysis.Name = "TopMenu_File_CopyToFleetAnalysis"; - this.TopMenu_File_CopyToFleetAnalysis.Size = new System.Drawing.Size(207, 22); - this.TopMenu_File_CopyToFleetAnalysis.Text = "艦隊分析ページへコピー(&A)"; - this.TopMenu_File_CopyToFleetAnalysis.Click += new System.EventHandler(this.TopMenu_File_CopyToFleetAnalysis_Click); - // // DialogEquipmentList // this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; diff --git a/ElectronicObserver/Window/Dialog/DialogEquipmentList.cs b/ElectronicObserver/Window/Dialog/DialogEquipmentList.cs index e7a052bbf..82fbffd45 100644 --- a/ElectronicObserver/Window/Dialog/DialogEquipmentList.cs +++ b/ElectronicObserver/Window/Dialog/DialogEquipmentList.cs @@ -275,6 +275,24 @@ private void UpdateView() remainCount[id] ); + { + StringBuilder sb = new StringBuilder(); + var eq = masterEquipments[id]; + + sb.AppendFormat("{0} {1}\r\n", eq.CategoryTypeInstance.Name, eq.Name, eq.EquipmentID); + if (eq.Firepower != 0) sb.AppendFormat("火力 {0:+0;-0}\r\n", eq.Firepower); + if (eq.Torpedo != 0) sb.AppendFormat("雷装 {0:+0;-0}\r\n", eq.Torpedo); + if (eq.AA != 0) sb.AppendFormat("対空 {0:+0;-0}\r\n", eq.AA); + if (eq.Armor != 0) sb.AppendFormat("装甲 {0:+0;-0}\r\n", eq.Armor); + if (eq.ASW != 0) sb.AppendFormat("対潜 {0:+0;-0}\r\n", eq.ASW); + if (eq.Evasion != 0) sb.AppendFormat("{0} {1:+0;-0}\r\n", eq.CategoryType == EquipmentTypes.Interceptor ? "迎撃" : "回避", eq.Evasion); + if (eq.LOS != 0) sb.AppendFormat("索敵 {0:+0;-0}\r\n", eq.LOS); + if (eq.Accuracy != 0) sb.AppendFormat("{0} {1:+0;-0}\r\n", eq.CategoryType == EquipmentTypes.Interceptor ? "対爆" : "命中", eq.Accuracy); + if (eq.Bomber != 0) sb.AppendFormat("爆装 {0:+0;-0}\r\n", eq.Bomber); + sb.AppendLine("(右クリックで図鑑)"); + + row.Cells[2].ToolTipText = sb.ToString(); + } rows.Add(row); } @@ -294,6 +312,21 @@ private void UpdateView() } + private void EquipmentView_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e) + { + if (0 <= e.RowIndex && e.RowIndex < EquipmentView.RowCount) + { + int equipmentID = (int)EquipmentView.Rows[e.RowIndex].Cells[0].Value; + + if ((e.Button & System.Windows.Forms.MouseButtons.Right) != 0) + { + Cursor = Cursors.AppStarting; + new DialogAlbumMasterEquipment(equipmentID).Show(Owner); + Cursor = Cursors.Default; + } + } + } + private class DetailCounter : IIdentifiable { @@ -326,7 +359,8 @@ public static int CalculateID(EquipmentData eq) return CalculateID(eq.Level, eq.AircraftLevel); } - public int ID => CalculateID(level, aircraftLevel); } + public int ID => CalculateID(level, aircraftLevel); + } /// @@ -484,9 +518,9 @@ private void DetailView_Sorted(object sender, EventArgs e) } - - - private void Menu_File_CSVOutput_Click(object sender, EventArgs e) + + + private void Menu_File_CSVOutput_Click(object sender, EventArgs e) { if (SaveCSVDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK) @@ -538,19 +572,20 @@ private void Menu_File_CSVOutput_Click(object sender, EventArgs e) } - /// - /// 「艦隊分析」装備情報反映用 - /// https://kancolle-fleetanalysis.firebaseapp.com/ - /// - private void TopMenu_File_CopyToFleetAnalysis_Click(object sender, EventArgs e) - { - Clipboard.SetText( - "[" + string.Join(",", KCDatabase.Instance.Equipments.Values.Where(eq => eq?.IsLocked ?? false) - .Select(eq => $"{{\"api_slotitem_id\":{eq.EquipmentID},\"api_level\":{eq.Level}}}")) + "]"); - } + + /// + /// 「艦隊分析」装備情報反映用 + /// https://kancolle-fleetanalysis.firebaseapp.com/ + /// + private void TopMenu_File_CopyToFleetAnalysis_Click(object sender, EventArgs e) + { + Clipboard.SetText( + "[" + string.Join(",", KCDatabase.Instance.Equipments.Values.Where(eq => eq?.IsLocked ?? false) + .Select(eq => $"{{\"api_slotitem_id\":{eq.EquipmentID},\"api_level\":{eq.Level}}}")) + "]"); + } - private void DialogEquipmentList_FormClosed(object sender, FormClosedEventArgs e) + private void DialogEquipmentList_FormClosed(object sender, FormClosedEventArgs e) { ResourceManager.DestroyIcon(Icon); diff --git a/ElectronicObserver/Window/FormFleet.cs b/ElectronicObserver/Window/FormFleet.cs index 7b20689df..02ca30266 100644 --- a/ElectronicObserver/Window/FormFleet.cs +++ b/ElectronicObserver/Window/FormFleet.cs @@ -1,5 +1,4 @@ -using Codeplex.Data; -using ElectronicObserver.Data; +using ElectronicObserver.Data; using ElectronicObserver.Observer; using ElectronicObserver.Resource; using ElectronicObserver.Utility.Data; @@ -587,7 +586,7 @@ public void Update(int shipMasterID) Condition.Text = ship.Condition.ToString(); Condition.Tag = ship.Condition; - SetConditionDesign(ship.Condition); + SetConditionDesign(Condition, ship.Condition); if (ship.Condition < 49) { @@ -726,6 +725,9 @@ private string GetEquipmentString(ShipData ship) Calculator.GetProportionalAirDefense(adjustedaa) ); + double rocket = Calculator.GetAARocketBarrageProbability(ship); + if (rocket > 0) + sb.AppendLine($"対空噴進弾幕: {rocket:p1}"); } { @@ -767,43 +769,6 @@ private string GetEquipmentString(ShipData ship) return sb.ToString(); } - private void SetConditionDesign(int cond) - { - - if (Condition.ImageAlign == ContentAlignment.MiddleCenter) - { - // icon invisible - Condition.ImageIndex = -1; - - if (cond < 20) - Condition.BackColor = Color.LightCoral; - else if (cond < 30) - Condition.BackColor = Color.LightSalmon; - else if (cond < 40) - Condition.BackColor = Color.Moccasin; - else if (cond < 50) - Condition.BackColor = Color.Transparent; - else - Condition.BackColor = Color.LightGreen; - - } - else - { - Condition.BackColor = Color.Transparent; - - if (cond < 20) - Condition.ImageIndex = (int)ResourceManager.IconContent.ConditionVeryTired; - else if (cond < 30) - Condition.ImageIndex = (int)ResourceManager.IconContent.ConditionTired; - else if (cond < 40) - Condition.ImageIndex = (int)ResourceManager.IconContent.ConditionLittleTired; - else if (cond < 50) - Condition.ImageIndex = (int)ResourceManager.IconContent.ConditionNormal; - else - Condition.ImageIndex = (int)ResourceManager.IconContent.ConditionSparkle; - - } - } public void ConfigurationChanged(FormFleet parent) { @@ -813,7 +778,7 @@ public void ConfigurationChanged(FormFleet parent) HP.MainFont = parent.MainFont; HP.SubFont = parent.SubFont; Condition.Font = parent.MainFont; - SetConditionDesign((Condition.Tag as int?) ?? 49); + SetConditionDesign(Condition, (Condition.Tag as int?) ?? 49); Equipments.Font = parent.SubFont; } @@ -829,6 +794,36 @@ public void Dispose() } } + public static void SetConditionDesign(ImageLabel label, int cond) + { + + if (label.ImageAlign == ContentAlignment.MiddleCenter) + { + // icon invisible + label.ImageIndex = -1; + + label.BackColor = + cond < 20 ? Color.LightCoral : + cond < 30 ? Color.LightSalmon : + cond < 40 ? Color.Moccasin : + cond < 50 ? Color.Transparent : + Color.LightGreen; + } + else + { + label.BackColor = Color.Transparent; + + label.ImageIndex = + cond < 20 ? (int)ResourceManager.IconContent.ConditionVeryTired : + cond < 30 ? (int)ResourceManager.IconContent.ConditionTired : + cond < 40 ? (int)ResourceManager.IconContent.ConditionLittleTired : + cond < 50 ? (int)ResourceManager.IconContent.ConditionNormal : + (int)ResourceManager.IconContent.ConditionSparkle; + + } + } + + @@ -1248,8 +1243,8 @@ private void ContextMenuFleet_CopyToFleetAnalysis_Click(object sender, EventArgs sb.Append("["); foreach (var ship in KCDatabase.Instance.Ships.Values.Where(s => s.IsLocked)) { - sb.AppendFormat(@"{{""api_ship_id"":{0},""api_lv"":{1},""api_kyouka"":[{2}]}},", - ship.ShipID, ship.Level, string.Join(",", (int[])ship.RawData.api_kyouka)); + sb.AppendFormat(@"{{""api_ship_id"":{0},""api_lv"":{1},""api_kyouka"":[{2}],""api_exp"":[{3}]}},", + ship.ShipID, ship.Level, string.Join(",", (int[])ship.RawData.api_kyouka), string.Join(",", (int[])ship.RawData.api_exp)); } sb.Remove(sb.Length - 1, 1); // remove "," sb.Append("]"); @@ -1263,9 +1258,12 @@ private void ContextMenuFleet_AntiAirDetails_Click(object sender, EventArgs e) var dialog = new DialogAntiAirDefense(); - dialog.SetFleetID(FleetID); - dialog.Show(this); + if (KCDatabase.Instance.Fleet.CombinedFlag != 0 && (FleetID == 1 || FleetID == 2)) + dialog.SetFleetID(5); + else + dialog.SetFleetID(FleetID); + dialog.Show(this); } diff --git a/ElectronicObserver/Window/FormFleetPreset.Designer.cs b/ElectronicObserver/Window/FormFleetPreset.Designer.cs new file mode 100644 index 000000000..395e5f2a4 --- /dev/null +++ b/ElectronicObserver/Window/FormFleetPreset.Designer.cs @@ -0,0 +1,89 @@ +namespace ElectronicObserver.Window +{ + partial class FormFleetPreset + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.ToolTipInfo = new System.Windows.Forms.ToolTip(this.components); + this.TablePresets = new System.Windows.Forms.TableLayoutPanel(); + this.SuspendLayout(); + // + // ToolTipInfo + // + this.ToolTipInfo.AutoPopDelay = 30000; + this.ToolTipInfo.InitialDelay = 500; + this.ToolTipInfo.ReshowDelay = 100; + // + // TablePresets + // + this.TablePresets.AutoSize = true; + this.TablePresets.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.TablePresets.ColumnCount = 7; + this.TablePresets.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.TablePresets.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.TablePresets.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.TablePresets.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.TablePresets.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.TablePresets.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.TablePresets.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.TablePresets.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.TablePresets.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.TablePresets.Location = new System.Drawing.Point(0, 0); + this.TablePresets.Name = "TablePresets"; + this.TablePresets.RowCount = 1; + this.TablePresets.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 21F)); + this.TablePresets.Size = new System.Drawing.Size(0, 21); + this.TablePresets.TabIndex = 4; + this.TablePresets.CellPaint += new System.Windows.Forms.TableLayoutCellPaintEventHandler(this.TablePresets_CellPaint); + // + // FormFleetPreset + // + this.AutoHidePortion = 150D; + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + this.AutoScroll = true; + this.ClientSize = new System.Drawing.Size(300, 200); + this.Controls.Add(this.TablePresets); + this.DoubleBuffered = true; + this.Font = new System.Drawing.Font("Meiryo UI", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Pixel); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; + this.HideOnClose = true; + this.Name = "FormFleetPreset"; + this.Text = "編成プリセット"; + this.Load += new System.EventHandler(this.FormFleetPreset_Load); + this.Click += new System.EventHandler(this.FormFleetPreset_Click); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.ToolTip ToolTipInfo; + private System.Windows.Forms.TableLayoutPanel TablePresets; + } +} \ No newline at end of file diff --git a/ElectronicObserver/Window/FormFleetPreset.cs b/ElectronicObserver/Window/FormFleetPreset.cs new file mode 100644 index 000000000..3887e993d --- /dev/null +++ b/ElectronicObserver/Window/FormFleetPreset.cs @@ -0,0 +1,263 @@ +using ElectronicObserver.Data; +using ElectronicObserver.Resource; +using ElectronicObserver.Window.Control; +using ElectronicObserver.Window.Support; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using WeifenLuo.WinFormsUI.Docking; + +namespace ElectronicObserver.Window +{ + public partial class FormFleetPreset : DockContent + { + + private class TablePresetControl : IDisposable + { + public ImageLabel Name; + public ImageLabel[] Ships; + + private ToolTip _tooltip; + + public TablePresetControl(FormFleetPreset parent) + { + ImageLabel CreateDefaultLabel() + { + return new ImageLabel + { + Text = "", + Anchor = AnchorStyles.Left, + ForeColor = parent.ForeColor, + Tag = null, + TextAlign = ContentAlignment.MiddleLeft, + Padding = new Padding(0, 1, 0, 1), + Margin = new Padding(2, 1, 2, 1), + AutoEllipsis = false, + AutoSize = true, + Visible = true, + + ImageList = ResourceManager.Instance.Icons, + ImageAlign = ContentAlignment.MiddleCenter, + ImageIndex = -1 + }; + } + + Name = CreateDefaultLabel(); + Name.ImageAlign = ContentAlignment.MiddleRight; + + // TODO: 本体側がもし 7 隻編成に対応したら変更してください + Ships = new ImageLabel[6]; + for (int i = 0; i < Ships.Length; i++) + { + Ships[i] = CreateDefaultLabel(); + + } + + _tooltip = parent.ToolTipInfo; + } + + + public void AddToTable(TableLayoutPanel table, int row) + { + table.Controls.Add(Name, 0, row); + for (int i = 0; i < Ships.Length; i++) + { + table.Controls.Add(Ships[i], 1 + i, row); + } + } + + public void Update(int presetID) + { + var preset = KCDatabase.Instance.FleetPreset[presetID]; + + if (preset == null) + { + Name.Text = "----"; + _tooltip.SetToolTip(Name, null); + + foreach (var ship in Ships) + { + ship.Text = string.Empty; + _tooltip.SetToolTip(ship, null); + } + return; + } + + + Name.Text = preset.Name; + + int lowestCondition = preset.MembersInstance.Select(s => s?.Condition ?? 49).DefaultIfEmpty(49).Min(); + FormFleet.SetConditionDesign(Name, lowestCondition); + + _tooltip.SetToolTip(Name, $"最低cond: {lowestCondition}"); + + for (int i = 0; i < Ships.Length; i++) + { + var ship = i >= preset.Members.Count ? null : preset.MembersInstance.ElementAt(i); + var label = Ships[i]; + + Ships[i].Text = ship?.Name ?? "-"; + + if (ship == null) + { + _tooltip.SetToolTip(Ships[i], null); + } + else + { + var sb = new StringBuilder(); + sb.AppendLine($"{ship.MasterShip.ShipTypeName} {ship.NameWithLevel}"); + sb.AppendLine($"HP: {ship.HPCurrent} / {ship.HPMax} ({ship.HPRate:p1}) [{Constants.GetDamageState(ship.HPRate)}]"); + sb.AppendLine($"cond: {ship.Condition}"); + sb.AppendLine(); + + var slot = ship.AllSlotInstance; + for (int e = 0; e < slot.Count; e++) + { + if (slot[e] == null) + continue; + + if (e < ship.MasterShip.Aircraft.Count) + { + sb.AppendLine($"[{ship.Aircraft[e]}/{ship.MasterShip.Aircraft[e]}] {slot[e].NameWithLevel}"); + } + else + { + sb.AppendLine(slot[e].NameWithLevel); + } + } + + _tooltip.SetToolTip(Ships[i], sb.ToString()); + } + } + + } + + public void ConfigurationChanged(FormFleetPreset parent) + { + var config = Utility.Configuration.Config; + var font = config.UI.MainFont; + + Name.Font = font; + Name.ImageAlign = config.FormFleet.ShowConditionIcon ? ContentAlignment.MiddleRight : ContentAlignment.MiddleCenter; + + foreach (var ship in Ships) + { + ship.Font = font; + + if (config.FormFleet.FixShipNameWidth) + { + ship.AutoSize = false; + ship.Size = new Size(config.FormFleet.FixedShipNameWidth, 20); + } + else + { + ship.AutoSize = true; + } + } + } + + public void Dispose() + { + Name.Dispose(); + foreach (var ship in Ships) + ship.Dispose(); + } + } + + + private List TableControls; + + + + public FormFleetPreset(FormMain parent) + { + InitializeComponent(); + + // some initialization + TableControls = new List(); + ConfigurationChanged(); + + Icon = ResourceManager.ImageToIcon(ResourceManager.Instance.Icons.Images[(int)ResourceManager.IconContent.FormFleetPreset]); + } + + private void FormFleetPreset_Load(object sender, EventArgs e) + { + KCDatabase.Instance.FleetPreset.PresetChanged += Updated; + + Utility.Configuration.Instance.ConfigurationChanged += ConfigurationChanged; + } + + private void ConfigurationChanged() + { + var config = Utility.Configuration.Config; + Font = Utility.Configuration.Config.UI.MainFont; + bool fixShipNameWidth = config.FormFleet.FixShipNameWidth; + + TablePresets.SuspendLayout(); + foreach (var item in TableControls) + item.ConfigurationChanged(this); + + for (int i = 1; i < TablePresets.ColumnCount; i++) + ControlHelper.SetTableColumnStyle(TablePresets, i, fixShipNameWidth ? + new ColumnStyle(SizeType.Absolute, config.FormFleet.FixedShipNameWidth + 4) : + new ColumnStyle(SizeType.AutoSize)); + ControlHelper.SetTableRowStyles(TablePresets, ControlHelper.GetDefaultRowStyle()); + TablePresets.ResumeLayout(); + } + + private void Updated() + { + var presets = KCDatabase.Instance.FleetPreset; + if (presets == null || presets.MaximumCount <= 0) + return; + + TablePresets.Enabled = false; + TablePresets.SuspendLayout(); + + if (TableControls.Count < presets.MaximumCount) + { + for (int i = TableControls.Count; i < presets.MaximumCount; i++) + { + var control = new TablePresetControl(this); + control.ConfigurationChanged(this); + TableControls.Add(control); + control.AddToTable(TablePresets, i); + } + + ControlHelper.SetTableRowStyles(TablePresets, ControlHelper.GetDefaultRowStyle()); + } + + for (int i = 0; i < TableControls.Count; i++) + { + TableControls[i].Update(i + 1); + } + + TablePresets.ResumeLayout(); + TablePresets.Enabled = true; + } + + + private void TablePresets_CellPaint(object sender, TableLayoutCellPaintEventArgs e) + { + e.Graphics.DrawLine(e.Row % 5 == 4 && e.Column == 0 ? Pens.Gray : Pens.Silver, e.CellBounds.X, e.CellBounds.Bottom - 1, e.CellBounds.Right - 1, e.CellBounds.Bottom - 1); + } + + + protected override string GetPersistString() + { + return "FleetPreset"; + } + + private void FormFleetPreset_Click(object sender, EventArgs e) + { + Utility.Logger.Add(1, Font.Name); + ConfigurationChanged(); + } + } +} diff --git a/ElectronicObserver/Window/FormFleetPreset.resx b/ElectronicObserver/Window/FormFleetPreset.resx new file mode 100644 index 000000000..823b989af --- /dev/null +++ b/ElectronicObserver/Window/FormFleetPreset.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/ElectronicObserver/Window/FormJson.cs b/ElectronicObserver/Window/FormJson.cs index 9a38c632d..693a42851 100644 --- a/ElectronicObserver/Window/FormJson.cs +++ b/ElectronicObserver/Window/FormJson.cs @@ -1,4 +1,5 @@ -using ElectronicObserver.Observer; +using DynaJson; +using ElectronicObserver.Observer; using ElectronicObserver.Resource; using System; using System.Collections.Generic; @@ -183,7 +184,7 @@ private void LoadFromFile(string path) throw new ArgumentException("JSON の開始文字を検出できませんでした。"); data = data.Substring(head); - LoadResponse(match.Groups[2].Value.Replace('@', '/'), Codeplex.Data.DynamicJson.Parse(data)); + LoadResponse(match.Groups[2].Value.Replace('@', '/'), JsonObject.Parse(data)); } @@ -205,7 +206,7 @@ private void CreateChildNode(TreeNode root) { dynamic json = root.Tag; - if (json == null || !(json is Codeplex.Data.DynamicJson)) + if (json == null || !(json is JsonObject)) { return; @@ -416,8 +417,8 @@ private void TreeContextMenu_Opening(object sender, CancelEventArgs e) // root is array, children > 0, root[0](=child) is object or array if ( root.GetNodeCount(false) > 0 && - json != null && json is Codeplex.Data.DynamicJson && json.IsArray && - root.FirstNode.Tag != null && root.FirstNode.Tag is Codeplex.Data.DynamicJson && (((dynamic)root.FirstNode.Tag).IsArray || ((dynamic)root.FirstNode.Tag).IsObject)) + json != null && json is JsonObject && json.IsArray && + root.FirstNode.Tag != null && root.FirstNode.Tag is JsonObject && (((dynamic)root.FirstNode.Tag).IsArray || ((dynamic)root.FirstNode.Tag).IsObject)) { TreeContextMenu_OutputCSV.Enabled = true; @@ -468,7 +469,7 @@ private void TreeContextMenu_OutputCSV_Click(object sender, EventArgs e) private StringBuilder BuildCSVHeader(StringBuilder sb, string currentPath, dynamic data) { - if (data is Codeplex.Data.DynamicJson) + if (data is JsonObject) { if (data.IsObject) @@ -500,7 +501,7 @@ private StringBuilder BuildCSVHeader(StringBuilder sb, string currentPath, dynam private StringBuilder BuildCSVContent(StringBuilder sb, dynamic data) { - if (data is Codeplex.Data.DynamicJson) + if (data is JsonObject) { if (data.IsObject) @@ -548,7 +549,7 @@ private StringBuilder BuildDocument(dynamic data) private StringBuilder BuildDocumentContent(StringBuilder sb, dynamic data, int indentLevel) { - if (data is Codeplex.Data.DynamicJson) + if (data is JsonObject) { if (data.IsObject) { @@ -573,7 +574,7 @@ private StringBuilder BuildDocumentContent(StringBuilder sb, dynamic data, int i foreach (dynamic elem in data) { - if (elem is Codeplex.Data.DynamicJson && (elem.IsObject || elem.IsArray)) + if (elem is JsonObject && (elem.IsObject || elem.IsArray)) { BuildDocumentContent(sb, elem, indentLevel); diff --git a/ElectronicObserver/Window/FormMain.Designer.cs b/ElectronicObserver/Window/FormMain.Designer.cs index 6bf1bf061..acd91e9c1 100644 --- a/ElectronicObserver/Window/FormMain.Designer.cs +++ b/ElectronicObserver/Window/FormMain.Designer.cs @@ -91,6 +91,7 @@ private void InitializeComponent() this.StripMenu_Tool_FleetImageGenerator = new System.Windows.Forms.ToolStripMenuItem(); this.StripMenu_Tool_BaseAirCorpsSimulation = new System.Windows.Forms.ToolStripMenuItem(); this.StripMenu_Tool_ExpChecker = new System.Windows.Forms.ToolStripMenuItem(); + this.StripMenu_Tool_ExpeditionCheck = new System.Windows.Forms.ToolStripMenuItem(); this.StripMenu_Debug = new System.Windows.Forms.ToolStripMenuItem(); this.StripMenu_Debug_LoadAPIFromFile = new System.Windows.Forms.ToolStripMenuItem(); this.StripMenu_Debug_LoadInitialAPI = new System.Windows.Forms.ToolStripMenuItem(); @@ -108,7 +109,7 @@ private void InitializeComponent() this.StripStatus_Clock = new System.Windows.Forms.ToolStripStatusLabel(); this.UIUpdateTimer = new System.Windows.Forms.Timer(this.components); this.MainDockPanel = new WeifenLuo.WinFormsUI.Docking.DockPanel(); - this.StripMenu_Tool_ExpeditionCheck = new System.Windows.Forms.ToolStripMenuItem(); + this.StripMenu_View_FleetPreset = new System.Windows.Forms.ToolStripMenuItem(); this.StripMenu.SuspendLayout(); this.StripStatus.SuspendLayout(); this.SuspendLayout(); @@ -279,6 +280,7 @@ private void InitializeComponent() this.StripMenu_View_Fleet, this.StripMenu_View_FleetOverview, this.StripMenu_View_ShipGroup, + this.StripMenu_View_FleetPreset, this.toolStripSeparator1, this.StripMenu_View_Dock, this.StripMenu_View_Arsenal, @@ -594,6 +596,13 @@ private void InitializeComponent() this.StripMenu_Tool_ExpChecker.Text = "必要経験値計算(&X)"; this.StripMenu_Tool_ExpChecker.Click += new System.EventHandler(this.StripMenu_Tool_ExpChecker_Click); // + // StripMenu_Tool_ExpeditionCheck + // + this.StripMenu_Tool_ExpeditionCheck.Name = "StripMenu_Tool_ExpeditionCheck"; + this.StripMenu_Tool_ExpeditionCheck.Size = new System.Drawing.Size(180, 22); + this.StripMenu_Tool_ExpeditionCheck.Text = "遠征可否チェック(&M)"; + this.StripMenu_Tool_ExpeditionCheck.Click += new System.EventHandler(this.StripMenu_Tool_ExpeditionCheck_Click); + // // StripMenu_Debug // this.StripMenu_Debug.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { @@ -731,12 +740,12 @@ private void InitializeComponent() this.MainDockPanel.Size = new System.Drawing.Size(640, 434); this.MainDockPanel.TabIndex = 0; // - // StripMenu_Tool_ExpeditionCheck + // StripMenu_View_FleetPreset // - this.StripMenu_Tool_ExpeditionCheck.Name = "StripMenu_Tool_ExpeditionCheck"; - this.StripMenu_Tool_ExpeditionCheck.Size = new System.Drawing.Size(180, 22); - this.StripMenu_Tool_ExpeditionCheck.Text = "遠征可否チェック(&M)"; - this.StripMenu_Tool_ExpeditionCheck.Click += new System.EventHandler(this.StripMenu_Tool_ExpeditionCheck_Click); + this.StripMenu_View_FleetPreset.Name = "StripMenu_View_FleetPreset"; + this.StripMenu_View_FleetPreset.Size = new System.Drawing.Size(182, 22); + this.StripMenu_View_FleetPreset.Text = "編成プリセット(&P)"; + this.StripMenu_View_FleetPreset.Click += new System.EventHandler(this.StripMenu_View_FleetPreset_Click); // // FormMain // @@ -845,5 +854,6 @@ private void InitializeComponent() private System.Windows.Forms.ToolStripMenuItem StripMenu_File_Notification_MuteAll; private System.Windows.Forms.ToolStripMenuItem StripMenu_Tool_ExpChecker; private System.Windows.Forms.ToolStripMenuItem StripMenu_Tool_ExpeditionCheck; - } + private System.Windows.Forms.ToolStripMenuItem StripMenu_View_FleetPreset; + } } diff --git a/ElectronicObserver/Window/FormMain.cs b/ElectronicObserver/Window/FormMain.cs index 51e3fa21c..1a9881f50 100644 --- a/ElectronicObserver/Window/FormMain.cs +++ b/ElectronicObserver/Window/FormMain.cs @@ -1,4 +1,4 @@ -using Codeplex.Data; +using DynaJson; using ElectronicObserver.Data; using ElectronicObserver.Notifier; using ElectronicObserver.Observer; @@ -63,6 +63,7 @@ public partial class FormMain : Form public FormWindowCapture fWindowCapture; public FormBaseAirCorps fBaseAirCorps; public FormJson fJson; + public FormFleetPreset fFleetPreset; #endregion @@ -131,6 +132,7 @@ private async void FormMain_Load(object sender, EventArgs e) StripMenu_WindowCapture.Image = ResourceManager.Instance.Icons.Images[(int)ResourceManager.IconContent.FormWindowCapture]; StripMenu_View_BaseAirCorps.Image = ResourceManager.Instance.Icons.Images[(int)ResourceManager.IconContent.FormBaseAirCorps]; StripMenu_View_Json.Image = ResourceManager.Instance.Icons.Images[(int)ResourceManager.IconContent.FormJson]; + StripMenu_View_FleetPreset.Image = ResourceManager.Instance.Icons.Images[(int)ResourceManager.IconContent.FormFleetPreset]; StripMenu_Tool_EquipmentList.Image = ResourceManager.Instance.Icons.Images[(int)ResourceManager.IconContent.FormEquipmentList]; StripMenu_Tool_DropRecord.Image = ResourceManager.Instance.Icons.Images[(int)ResourceManager.IconContent.FormDropRecord]; @@ -179,6 +181,7 @@ private async void FormMain_Load(object sender, EventArgs e) SubForms.Add(fWindowCapture = new FormWindowCapture(this)); SubForms.Add(fBaseAirCorps = new FormBaseAirCorps(this)); SubForms.Add(fJson = new FormJson(this)); + SubForms.Add(fFleetPreset = new FormFleetPreset(this)); ConfigurationChanged(); //設定から初期化 @@ -503,6 +506,8 @@ private IDockContent GetDockContentFromPersistString(string persistString) return fBaseAirCorps; case "Json": return fJson; + case "FleetPreset": + return fFleetPreset; default: if (persistString.StartsWith("ShipGroup")) { @@ -886,7 +891,7 @@ private void StripMenu_Debug_LoadRecordFromOld_Click(object sender, EventArgs e) using (StreamReader sr = new StreamReader(ofd.FileName)) { - dynamic json = DynamicJson.Parse(sr.ReadToEnd().Remove(0, 7)); + dynamic json = JsonObject.Parse(sr.ReadToEnd().Remove(0, 7)); foreach (dynamic elem in json.api_data.api_mst_ship) { @@ -939,7 +944,7 @@ private void StripMenu_Debug_LoadDataFromOld_Click(object sender, EventArgs e) using (StreamReader sr = new StreamReader(ofd.FileName)) { - dynamic json = DynamicJson.Parse(sr.ReadToEnd().Remove(0, 7)); + dynamic json = JsonObject.Parse(sr.ReadToEnd().Remove(0, 7)); foreach (dynamic elem in json.api_data.api_mst_ship) { @@ -1554,12 +1559,13 @@ private void StripMenu_View_Json_Click(object sender, EventArgs e) ShowForm(fJson); } - - + private void StripMenu_View_FleetPreset_Click(object sender, EventArgs e) + { + ShowForm(fFleetPreset); + } #endregion - } } diff --git a/ElectronicObserver/Window/Support/WindowPlacementManager.cs b/ElectronicObserver/Window/Support/WindowPlacementManager.cs index 4eb7a8aab..eae97da14 100644 --- a/ElectronicObserver/Window/Support/WindowPlacementManager.cs +++ b/ElectronicObserver/Window/Support/WindowPlacementManager.cs @@ -1,4 +1,4 @@ -using Codeplex.Data; +using DynaJson; using ElectronicObserver.Utility.Storage; using System; using System.Collections.Generic; @@ -207,7 +207,7 @@ public static void LoadWindowPlacement(FormMain form, string path) } - WindowPlacementWrapper wp = DynamicJson.Parse(settings); + WindowPlacementWrapper wp = JsonObject.Parse(settings); if (wp.RawData.showCmd == SW.SHOWMINIMIZED) wp.RawData.showCmd = SW.SHOWNORMAL; @@ -273,7 +273,7 @@ public static void SaveWindowPlacement(FormMain form, string path) GetWindowPlacement(form.Handle, out wp.RawData); - string settings = DynamicJson.Serialize(wp); + string settings = JsonObject.Serialize(wp); using (StreamWriter sw = new StreamWriter(path)) { diff --git a/ElectronicObserver/packages.config b/ElectronicObserver/packages.config index c9b9c2ee9..535d403bb 100644 --- a/ElectronicObserver/packages.config +++ b/ElectronicObserver/packages.config @@ -1,5 +1,6 @@  + \ No newline at end of file diff --git a/Libraries/DynamicJson.dll b/Libraries/DynamicJson.dll deleted file mode 100644 index c2e00db3d..000000000 Binary files a/Libraries/DynamicJson.dll and /dev/null differ diff --git a/Licenses/DynaJson.txt b/Licenses/DynaJson.txt new file mode 100644 index 000000000..814e0f7e9 --- /dev/null +++ b/Licenses/DynaJson.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2019 Kazuhiro Fujieda + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/Licenses/Ms-PL.txt b/Licenses/Ms-PL.txt deleted file mode 100644 index 76e253095..000000000 --- a/Licenses/Ms-PL.txt +++ /dev/null @@ -1,30 +0,0 @@ -Microsoft Public License (Ms-PL) - -Published: October 12, 2006 - -This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. -1. Definitions - -The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. - -A “contribution” is the original software, or any additions or changes to the software. - -A “contributor” is any person that distributes its contribution under this license. - -“Licensed patents” are a contributor’s patent claims that read directly on its contribution. -2. Grant of Rights - -(A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. - -(B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. -3. Conditions and Limitations - -(A) No Trademark License- This license does not grant you rights to use any contributors’ name, logo, or trademarks. - -(B) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. - -(C) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. - -(D) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. - -(E) The software is licensed “as-is.” You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. diff --git a/README.md b/README.md index 092299c59..a69a13696 100644 --- a/README.md +++ b/README.md @@ -51,7 +51,7 @@ ## 使用しているライブラリ -* [DynamicJson](http://dynamicjson.codeplex.com/) (JSON データの読み書き) - [Ms-PL](https://github.com/andanteyk/ElectronicObserver/blob/master/Licenses/Ms-PL.txt) +* [DynaJson](https://github.com/fujieda/DynaJson) (JSON データの読み書き) - [MIT License](https://github.com/andanteyk/ElectronicObserver/blob/master/Licenses/DynaJson.txt) * [DockPanel Suite](http://dockpanelsuite.com/) (ウィンドウレイアウト) - [MIT License](https://github.com/andanteyk/ElectronicObserver/blob/master/Licenses/DockPanelSuite.txt) * [Nekoxy](https://github.com/veigr/Nekoxy) (通信キャプチャ) - [MIT License](https://github.com/andanteyk/ElectronicObserver/blob/master/Licenses/Nekoxy.txt) * [TrotiNet](http://trotinet.sourceforge.net/) - [GNU Lesser General Public License v3.0](https://github.com/andanteyk/ElectronicObserver/blob/master/Licenses/LGPL.txt)