@property (strong) NSDate *repairTime;
@property (strong) HMKCDeck* fleet;
+@property (strong) NSNumber *deckID;
@property (strong) NSArray *members;
@property (strong) NSObjectController *fleetController;
@implementation HMAnchorageRepairManager
+static NSMutableArray *sRepairableDeckIDs;
+
++ (void)initialize
+{
+ static dispatch_once_t onceToken;
+ dispatch_once(&onceToken, ^{
+ sRepairableDeckIDs = [NSMutableArray new];
+ });
+}
+
- (instancetype)initWithDeck:(HMKCDeck *)deck
{
self = [super init];
if(self) {
_fleet = deck;
+ _deckID = _fleet.id;
_fleetController = [NSObjectController new];
_fleetController.managedObjectContext = deck.managedObjectContext;
[self.fleetController addObserver:self
forKeyPath:@"selection.ship_0"
- options:0
+ options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld
context:@"0"];
[self.fleetController addObserver:self
forKeyPath:@"selection.ship_1"
- (NSDate *)repairTime
{
+ if(!self.repairable) return nil;
+
return HMStandardDefaults.repairTime;;
}
- (void)setRepairTime:(NSDate *)repairTime
HMKCMasterShipObject *flagShipMaster = flagShip.master_ship;
id stype = flagShipMaster.stype;
id stypeId = [stype valueForKey:@"id"];
- return [self.repairShipIds containsObject:stypeId];
+ BOOL result = [self.repairShipIds containsObject:stypeId];
+ if(!result && [sRepairableDeckIDs containsObject:self.deckID]) {
+ [sRepairableDeckIDs removeObject:self.deckID];
+ } else if(result && ![sRepairableDeckIDs containsObject:self.deckID]) {
+ [sRepairableDeckIDs addObject:self.deckID];
+ }
+ return result;
}
- (NSNumber *)repairableShipCount
- (void)resetRepairTime
{
+ BOOL prevRepairable = [sRepairableDeckIDs containsObject:self.deckID];
+ if(!prevRepairable && !self.repairable) return;
+
if(self.repairable) {
self.repairTime = [NSDate dateWithTimeIntervalSinceNow:0.0];
} else {