{\r
var sniffer = new Sniffer();\r
SniffLogFile(sniffer, "practice_001");\r
- PAssert.That(() => !sniffer.Battle.HasDamagedShip);\r
+ PAssert.That(() => !sniffer.BadlyDamagedShips.Any());\r
}\r
\r
/// <summary>\r
var sniffer = new Sniffer();\r
SniffLogFile(sniffer, "battle_002");\r
AssertEqualBattleResult(sniffer, new[] {28, 1, 13});\r
- PAssert.That(() => sniffer.Battle.HasDamagedShip);\r
+ PAssert.That(() => sniffer.BadlyDamagedShips.Any());\r
}\r
\r
private void AssertEqualBattleResult(Sniffer sniffer, IEnumerable<int> expected, string msg = null)\r
var sniffer = new Sniffer();\r
SniffLogFile(sniffer, "combined_surface_001");\r
AssertEauqlCombinedResult(sniffer, new[] {40, 77, 77, 33, 51, 47}, new[] {39, 35, 11, 39, 37, 40});\r
- PAssert.That(() => !sniffer.Battle.HasDamagedShip);\r
+ PAssert.That(() => !sniffer.BadlyDamagedShips.Any());\r
\r
SniffLogFile(sniffer, "combined_surface_002");\r
AssertEauqlCombinedResult(sniffer, new[] {40, 77, 77, 33, 15, 6}, new[] {39, 35, 4, 3, 14, 40});\r
- PAssert.That(() => sniffer.Battle.HasDamagedShip);\r
+ PAssert.That(() => sniffer.BadlyDamagedShips.Any());\r
}\r
\r
private void AssertEauqlCombinedResult(Sniffer sniffer, IEnumerable<int> expected0, IEnumerable<int> expected1,\r
var sniffer = new Sniffer();\r
SniffLogFile(sniffer, "sp_midnight_001");\r
AssertEqualBattleResult(sniffer, new[] {1});\r
- PAssert.That(() => sniffer.Battle.HasDamagedShip);\r
+ PAssert.That(() => sniffer.BadlyDamagedShips.Any());\r
}\r
\r
/// <summary>\r
var sniffer = new Sniffer();\r
SniffLogFile(sniffer, "combined_air_001");\r
AssertEauqlCombinedResult(sniffer, new[] {40, 98, 90, 66, 78, 86}, new[] {47, 41, 5, 42, 43, 29});\r
- PAssert.That(() => sniffer.Battle.HasDamagedShip);\r
+ PAssert.That(() => sniffer.BadlyDamagedShips.Any());\r
\r
SniffLogFile(sniffer, "combined_air_002");\r
AssertEauqlCombinedResult(sniffer, new[] {13, 87, 90, 59, 69, 86}, new[] {47, 41, 5, 20, 43, 29});\r
SniffLogFile(sniffer, "combined_escape_001");\r
AssertEauqlCombinedResult(sniffer, new[] {37, 105, 106, 90, 66, 10}, new[] {41, 41, 37, 44, 43, 43},\r
"連合艦隊で2戦して大破が出るまで");\r
- PAssert.That(() => sniffer.Battle.HasDamagedShip);\r
+ PAssert.That(() => sniffer.BadlyDamagedShips.Any());\r
SniffLogFile(sniffer, "combined_escape_002");\r
PAssert.That(() => sniffer.GetShipStatuses(0)[5].Escaped && sniffer.GetShipStatuses(1)[1].Escaped,\r
"続けて護衛退避を実行");\r
- PAssert.That(() => !sniffer.Battle.HasDamagedShip);\r
+ PAssert.That(() => !sniffer.BadlyDamagedShips.Any());\r
SniffLogFile(sniffer, "combined_escape_003");\r
AssertEauqlCombinedResult(sniffer, new[] {37, 105, 106, 90, 1, 10}, new[] {41, 41, 32, 44, 43, 43},\r
"もう一戦して大破が出るまで");\r
- PAssert.That(() => sniffer.Battle.HasDamagedShip);\r
+ PAssert.That(() => sniffer.BadlyDamagedShips.Any());\r
SniffLogFile(sniffer, "combined_escape_004");\r
PAssert.That(() => sniffer.GetShipStatuses(0)[5].Escaped && sniffer.GetShipStatuses(1)[1].Escaped &&\r
sniffer.GetShipStatuses(0)[4].Escaped && sniffer.GetShipStatuses(1)[2].Escaped,\r
"続けて護衛退避を実行");\r
- PAssert.That(() => !sniffer.Battle.HasDamagedShip);\r
+ PAssert.That(() => !sniffer.BadlyDamagedShips.Any());\r
}\r
\r
/// <summary>\r
var sniffer = new Sniffer();\r
SniffLogFile(sniffer, "battle_003");\r
AssertEqualBattleResult(sniffer, new[] {28, 2, 13});\r
- PAssert.That(() => !sniffer.Battle.HasDamagedShip, "夜戦の開始時は大破警告を出さない");\r
+ PAssert.That(() => !sniffer.BadlyDamagedShips.Any(), "夜戦の開始時は大破警告を出さない");\r
}\r
\r
/// <summary>\r
}\r
\r
/// <summary>\r
+ /// 出撃時に大破している艦娘がいたら警告する\r
+ /// </summary>\r
+ [TestMethod]\r
+ public void DamagedShipWarningOnMapStart()\r
+ {\r
+ var sniffer = new Sniffer();\r
+ SniffLogFile(sniffer, "mapstart_001");\r
+ PAssert.That(() => sniffer.BadlyDamagedShips.SequenceEqual(new[] {"大潮"}));\r
+ }\r
+\r
+ /// <summary>\r
/// 熟練度込みの制空値を正しく計算する\r
/// </summary>\r
[TestMethod]\r
public bool InBattle { get; set; }\r
public string Formation { get; private set; }\r
public int EnemyFighterPower { get; private set; }\r
- public bool HasDamagedShip { get; set; }\r
- public string[] DamagedShipNames { get; private set; }\r
public int AirControlLevel { get; private set; }\r
public BattleResultRank ResultRank { get; private set; }\r
public ShipStatus[] EnemyResultStatus { get; private set; }\r
foreach (var e in ships.Zip(_friend, (ship, now) => new {ship, now}))\r
e.now.UpdateShipStatus(e.ship);\r
if (warnDamagedShip)\r
- UpdateDamgedShipNames(ships);\r
+ _shipInfo.SetBadlyDamagedShips();\r
SetEnemyResultStatus();\r
}\r
\r
}\r
}\r
\r
- private void UpdateDamgedShipNames(IEnumerable<ShipStatus> ships)\r
- {\r
- DamagedShipNames =\r
- (from s in ships where s.DamageLevel == ShipStatus.Damage.Badly && !s.Escaped select s.Name).ToArray();\r
- HasDamagedShip = DamagedShipNames.Any();\r
- }\r
-\r
public void InspectCombinedBattle(dynamic json, bool surfaceFleet)\r
{\r
InBattle = true;\r
foreach (var e in ships.Zip(_friend.Concat(_guard), (ship, now) => new {ship, now}))\r
e.now.UpdateShipStatus(e.ship);\r
if (warnDamagedShip)\r
- UpdateDamgedShipNames(ships);\r
+ _shipInfo.SetBadlyDamagedShips();\r
SetEnemyResultStatus();\r
}\r
\r
public void CauseCombinedBattleEscape()\r
{\r
_shipInfo.SetEscapedShips(_escapingShips);\r
- UpdateDamgedShipNames(_shipInfo.GetShipStatuses(0).Concat(_shipInfo.GetShipStatuses(1)));\r
+ _shipInfo.SetBadlyDamagedShips();\r
}\r
\r
private class Record\r
InspectDeck(json.api_deck_port);\r
InspectShipData(json.api_ship);\r
InspectBasic(json.api_basic);\r
- _combinedFleetType = json.api_combined_flag() ? (int)json.api_combined_flag : 0;\r
+ if (json.api_combined_flag())\r
+ _combinedFleetType = (int)json.api_combined_flag;\r
_itemInfo.NowShips = ((object[])json.api_ship).Length;\r
}\r
else if (json.api_data()) // ship2\r
\r
public int[][] PresetDeck => _presetDeck;\r
\r
- public void StartSortie(string request)\r
+ public void InspectMapStart(string request)\r
{\r
var values = HttpUtility.ParseQueryString(request);\r
var fleet = int.Parse(values["api_deck_id"]) - 1;\r
{\r
_inSortie[0] = _inSortie[1] = true;\r
}\r
+ SetBadlyDamagedShips();\r
}\r
\r
public void RepairShip(int id)\r
return result > 0 ? result + (_hqLevel + 4) / 5 * 5 * -0.6142467 : 0.0;\r
}\r
\r
+ public string[] BadlyDamagedShips { get; private set; } = new string[0];\r
+\r
+ public void SetBadlyDamagedShips()\r
+ {\r
+ BadlyDamagedShips =\r
+ _inSortie.SelectMany((sortie, i) => sortie ? GetShipStatuses(i) : new ShipStatus[0])\r
+ .Where(s => !s.Escaped && s.DamageLevel == ShipStatus.Damage.Badly)\r
+ .Select(s => s.Name)\r
+ .ToArray();\r
+ }\r
+\r
+ public void ClearBadlyDamagedShips()\r
+ {\r
+ BadlyDamagedShips = new string[0];\r
+ }\r
+\r
public void SetEscapedShips(List<int> ships)\r
{\r
_escapedShips.AddRange(ships);\r
_logger.InspectBasic(data.api_basic);\r
_logger.InspectMaterial(data.api_material);\r
_shipInfo.InspectShip(data);\r
+ _shipInfo.ClearBadlyDamagedShips();\r
_conditionTimer.CalcRegenTime();\r
_missionInfo.InspectDeck(data.api_deck_port);\r
_dockInfo.InspectNDock(data.api_ndock);\r
_questInfo.QuestCount = (int)data.api_parallel_quest_count;\r
_battleInfo.CleanupResult();\r
_battleInfo.InBattle = false;\r
- _battleInfo.HasDamagedShip = false;\r
_shipInfo.ClearEscapedShips();\r
_miscTextInfo.ClearIfNeeded();\r
SaveState();\r
{\r
if (url.EndsWith("/battle"))\r
{\r
- _shipInfo.StartSortie(request); // 演習を出撃中とみなす\r
+ _shipInfo.InspectMapStart(request); // 演習を出撃中とみなす\r
_conditionTimer.InvalidateCond();\r
_miscTextInfo.ClearFlag = true;\r
}\r
}\r
if (url.EndsWith("api_req_map/start"))\r
{\r
- _shipInfo.StartSortie(request);\r
+ _shipInfo.InspectMapStart(request); // 出撃中判定が必要なので_conditionTimerより前\r
_conditionTimer.InvalidateCond();\r
_exMapInfo.InspectMapStart(data);\r
_logger.InspectMapStart(data);\r
_miscTextInfo.ClearFlag = true;\r
- return Update.Timer;\r
+ return Update.Timer | Update.Ship;\r
}\r
if (url.EndsWith("api_req_map/next"))\r
{\r
\r
public ShipStatus[] ShipList => _shipInfo.ShipList;\r
\r
+ public string[] BadlyDamagedShips => _shipInfo.BadlyDamagedShips;\r
+\r
public ItemStatus[] ItemList => _itemInfo.GetItemListWithOwner(ShipList);\r
\r
public AkashiTimer AkashiTimer => _akashiTimer;\r