\r
public State State { get; set; }\r
\r
- public void Invalidate()\r
- {\r
- _target = new ShipStatus[0];\r
- }\r
-\r
public bool IsRepaired(ShipStatus[] target) => _target.Zip(target, (a, b) => a.NowHp < b.NowHp).Any(x => x);\r
\r
public bool DeckChanged(IEnumerable<int> deck) => !_deck.SequenceEqual(deck);\r
var repair = _repairStatuses[fleet];\r
var fs = _shipInfo.GetStatus(deck[0]);\r
repair.State = State.Continue;\r
- if (!fs.Name.StartsWith("明石"))\r
+ if (!fs.Spec.IsRepairShip)\r
{\r
- repair.Invalidate();\r
+ repair.UpdateTarget(new ShipStatus[0]);\r
repair.Deck = deck;\r
return;\r
}\r
- var cap = fs.Slot.Count(item => item.Spec.Name == "艦艇修理施設") + 2;\r
+ if (repair.DeckChanged(deck))\r
+ {\r
+ repair.State = State.Reset;\r
+ repair.Deck = deck;\r
+ }\r
+ var target = RepairTarget(deck);\r
+ if (repair.IsRepaired(target))\r
+ repair.State = State.Reset;\r
+ repair.UpdateTarget(target);\r
+ }\r
+\r
+ private ShipStatus[] RepairTarget(int[] deck)\r
+ {\r
+ var fs = _shipInfo.GetStatus(deck[0]);\r
+ if (fs.DamageLevel >= ShipStatus.Damage.Half)\r
+ return new ShipStatus[0];\r
+ var cap = fs.Slot.Count(item => item.Spec.IsRepairFacility) + 2;\r
/*\r
* 泊地修理の条件を満たさない艦はMaxHp==NowHpのダミーを設定する。\r
* - 入渠中の艦娘は終わったときに回復扱いされないようNowHp=MaxHpに\r
* - 中破以上でNowHp=MaxHpにすると回復扱いされるのでNowHp=MaxHp=0に\r
*/\r
- var target = (from id in deck.Take(cap)\r
+ return (from id in deck.Take(cap)\r
let s = _shipInfo.GetStatus(id)\r
let full = new ShipStatus {NowHp = s.MaxHp, MaxHp = s.MaxHp}\r
let zero = new ShipStatus()\r
select _dockInfo.InNDock(id) ? full : s.DamageLevel >= ShipStatus.Damage.Half ? zero : s).ToArray();\r
- repair.State = State.Continue;\r
- if (repair.DeckChanged(deck) || repair.IsRepaired(target))\r
- repair.State = State.Reset;\r
- repair.UpdateTarget(target);\r
- repair.Deck = deck;\r
}\r
\r
public RepairSpan[] GetTimers(int fleet)\r