OSDN Git Service

泊地修理用のクラスを作成
authormasakih <masakih@users.sourceforge.jp>
Mon, 20 Jul 2015 11:50:20 +0000 (20:50 +0900)
committermasakih <masakih@users.sourceforge.jp>
Mon, 20 Jul 2015 11:50:20 +0000 (20:50 +0900)
KCD.xcodeproj/project.pbxproj
KCD/HMAnchorageRepairManager.h [new file with mode: 0644]
KCD/HMAnchorageRepairManager.m [new file with mode: 0644]

index 9d71773..7a30d37 100644 (file)
@@ -82,6 +82,7 @@
                F49688651B3AFE4900D3CEDE /* HMProgressPanel.xib in Resources */ = {isa = PBXBuildFile; fileRef = F49688631B3AFE4900D3CEDE /* HMProgressPanel.xib */; };
                F49688671B3EA16800D3CEDE /* RemoveDatabaseFileAndRestart.app in Resources */ = {isa = PBXBuildFile; fileRef = F49688661B3EA16800D3CEDE /* RemoveDatabaseFileAndRestart.app */; };
                F49828FC1902A226000D6BBE /* HMStrokeTextFieldCell.m in Sources */ = {isa = PBXBuildFile; fileRef = F49828FB1902A226000D6BBE /* HMStrokeTextFieldCell.m */; };
+               F499E88D1B5BCA7300189029 /* HMAnchorageRepairManager.m in Sources */ = {isa = PBXBuildFile; fileRef = F499E88C1B5BCA7300189029 /* HMAnchorageRepairManager.m */; };
                F4A2AF521A074DCF0024BD9E /* HMScreenshotListWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = F4A2AF501A074DCF0024BD9E /* HMScreenshotListWindowController.m */; };
                F4A2AF541A074DE40024BD9E /* HMScreenshotListWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = F4A2AF561A074DE40024BD9E /* HMScreenshotListWindowController.xib */; };
                F4A2AF581A0930160024BD9E /* Quartz.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F4A2AF571A0930160024BD9E /* Quartz.framework */; };
                F49688661B3EA16800D3CEDE /* RemoveDatabaseFileAndRestart.app */ = {isa = PBXFileReference; lastKnownFileType = wrapper.application; path = RemoveDatabaseFileAndRestart.app; sourceTree = "<group>"; };
                F49828FA1902A226000D6BBE /* HMStrokeTextFieldCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HMStrokeTextFieldCell.h; sourceTree = "<group>"; };
                F49828FB1902A226000D6BBE /* HMStrokeTextFieldCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HMStrokeTextFieldCell.m; sourceTree = "<group>"; };
+               F499E88B1B5BCA7300189029 /* HMAnchorageRepairManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HMAnchorageRepairManager.h; sourceTree = "<group>"; };
+               F499E88C1B5BCA7300189029 /* HMAnchorageRepairManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HMAnchorageRepairManager.m; sourceTree = "<group>"; };
                F4A2AF4F1A074DCF0024BD9E /* HMScreenshotListWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HMScreenshotListWindowController.h; sourceTree = "<group>"; };
                F4A2AF501A074DCF0024BD9E /* HMScreenshotListWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HMScreenshotListWindowController.m; sourceTree = "<group>"; };
                F4A2AF551A074DE40024BD9E /* ja */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = ja; path = ja.lproj/HMScreenshotListWindowController.xib; sourceTree = "<group>"; };
                                F495462A1B14CBA600E0D8D0 /* HMBookmarkManager.m */,
                                F4F6E80A1B2BC81C0008B66E /* HMPeriodicNotifier.h */,
                                F4F6E80B1B2BC81C0008B66E /* HMPeriodicNotifier.m */,
+                               F499E88B1B5BCA7300189029 /* HMAnchorageRepairManager.h */,
+                               F499E88C1B5BCA7300189029 /* HMAnchorageRepairManager.m */,
                                F4D2CBBF18ACE7D7000EBC59 /* Command */,
                                F4BEEEA918D890660006F70C /* UI */,
                                F4BEEEA818D88FF30006F70C /* CoreData */,
                        isa = PBXSourcesBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
+                               F499E88D1B5BCA7300189029 /* HMAnchorageRepairManager.m in Sources */,
                                F4513EE818B77A5300073552 /* HMMemberKDockCommand.m in Sources */,
                                F426802B194D0F4800B2C27F /* HMMemberShip2Command.m in Sources */,
                                F4AA06101931869E00844688 /* HMBattleResultCommand.m in Sources */,
diff --git a/KCD/HMAnchorageRepairManager.h b/KCD/HMAnchorageRepairManager.h
new file mode 100644 (file)
index 0000000..52acce2
--- /dev/null
@@ -0,0 +1,20 @@
+//
+//  HMAnchorageRepairManager.h
+//  KCD
+//
+//  Created by Hori,Masaki on 2015/07/19.
+//  Copyright (c) 2015年 Hori,Masaki. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+@class HMKCDeck;
+
+@interface HMAnchorageRepairManager : NSObject
+
+- (instancetype)initWithDeck:(HMKCDeck *)deck;
+@property (readonly) NSDate *repairTime;
+
+@property (readonly) NSNumber *repairableShipCount;
+
+@end
diff --git a/KCD/HMAnchorageRepairManager.m b/KCD/HMAnchorageRepairManager.m
new file mode 100644 (file)
index 0000000..cb0cb4c
--- /dev/null
@@ -0,0 +1,180 @@
+//
+//  HMAnchorageRepairManager.m
+//  KCD
+//
+//  Created by Hori,Masaki on 2015/07/19.
+//  Copyright (c) 2015年 Hori,Masaki. All rights reserved.
+//
+
+#import "HMAnchorageRepairManager.h"
+
+#import "HMServerDataStore.h"
+#import "HMKCDeck+Extension.h"
+#import "HMKCShipObject+Extensions.h"
+#import "HMKCMasterShipObject.h"
+#import "HMKCSlotItemObject+Extensions.h"
+#import "HMKCMasterSlotItemObject.h"
+
+
+@interface HMAnchorageRepairManager ()
+
+
+@property (strong) NSDate *repairTime;
+
+@property (strong) HMKCDeck* fleet;
+@property (strong) NSArray *members;
+
+@property (strong) NSObjectController *fleetController;
+@property (strong) NSArrayController *memberController;
+
+@end
+
+@implementation HMAnchorageRepairManager
+
+- (instancetype)initWithDeck:(HMKCDeck *)deck
+{
+       self = [super init];
+       if(self) {
+               _fleet = deck;
+               
+               _fleetController = [NSObjectController new];
+               _fleetController.managedObjectContext = deck.managedObjectContext;
+               _fleetController.entityName = @"Deck";
+               _fleetController.fetchPredicate = [NSPredicate predicateWithFormat:@"id = %@", deck.id];
+               NSError *error = nil;
+               [_fleetController fetchWithRequest:nil merge:NO error:&error];
+               if(error) {
+                       NSLog(@"%@", error);
+               }
+               
+               [self.fleetController addObserver:self
+                                                         forKeyPath:@"selection.ship_0"
+                                                                options:0
+                                                                context:@"0"];
+               [self.fleetController addObserver:self
+                                                          forKeyPath:@"selection.ship_1"
+                                                                 options:0
+                                                                 context:@"1"];
+               [self.fleetController addObserver:self
+                                                          forKeyPath:@"selection.ship_2"
+                                                                 options:0
+                                                                 context:@"2"];
+               [self.fleetController addObserver:self
+                                                          forKeyPath:@"selection.ship_3"
+                                                                 options:0
+                                                                 context:@"3"];
+               [self.fleetController addObserver:self
+                                                          forKeyPath:@"selection.ship_4"
+                                                                 options:0
+                                                                 context:@"4"];
+               [self.fleetController addObserver:self
+                                                          forKeyPath:@"selection.ship_5"
+                                                                 options:0
+                                                                 context:@"5"];
+               
+               [self buildMembers];
+               
+               [self resetRepairTime];
+       }
+       return self;
+}
+
+- (void)dealloc
+{
+       NSArray *shipKeys = @[@"ship_0", @"ship_1", @"ship_2", @"ship_3", @"ship_4", @"ship_5"];
+       for (NSString *key in shipKeys) {
+               [_fleetController removeObserver:self
+                                                         forKeyPath:[NSString stringWithFormat:@"selection.%@", key]];
+       }
+}
+
+- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
+{
+       id contextObject = (__bridge id)(context);
+       
+//     if([contextObject isEqual:@"members"]) {
+//             
+//             return;
+//     }
+       if([contextObject isKindOfClass:[NSString class]]) {
+               
+               [self resetRepairTime];
+               [self buildMembers];
+               return;
+       }
+       
+       [super observeValueForKeyPath:keyPath ofObject:object change:change     context:context];
+}
+
+- (void)buildMembers
+{
+//     NSString *observeKeyPath = @"arrangedObjects.equippedItem";
+//     
+//     [self.memberController removeObserver:self forKeyPath:observeKeyPath];
+//     
+//     NSArray *shipKeys = @[@"ship_0", @"ship_1", @"ship_2", @"ship_3", @"ship_4", @"ship_5"];
+//     HMServerDataStore *store = [HMServerDataStore defaultManager];
+//     NSMutableArray *array = [NSMutableArray new];
+//     [shipKeys enumerateObjectsUsingBlock:^(NSString *key, NSUInteger idx, BOOL *stop) {
+//             id shipID = [_fleet valueForKey:key];
+//             NSError *error = nil;
+//             NSArray *ships = [store objectsWithEntityName:@"Ship"
+//                                                                                             error:&error
+//                                                                       predicateFormat:@"id = %ld", [shipID integerValue]];
+//             if(error) {
+//                     NSLog(@"%s error: %@", __PRETTY_FUNCTION__, error);
+//             }
+//             if(ships.count != 0) {
+//                     [array addObject:ships[0]];
+//             }
+//     }];
+//     _members = array;
+//     _memberController = [[NSArrayController alloc] initWithContent:array];
+//     [self.memberController addObserver:self
+//                                                     forKeyPath:observeKeyPath
+//                                                        options:0
+//                                                        context:@"members"];
+}
+
+- (NSArray *)repairShipIds
+{
+       return @[@(19)];
+}
+- (NSArray *)repairSlotItemIds
+{
+       return @[@(31)];
+}
+- (BOOL)repairable
+{
+       HMKCShipObject *flagShip = self.fleet[0];
+       HMKCMasterShipObject *flagShipMaster = flagShip.master_ship;
+       id stype = flagShipMaster.stype;
+       id stypeId = [stype valueForKey:@"id"];
+       return [self.repairShipIds containsObject:stypeId];
+}
+
+- (NSNumber *)repairableShipCount
+{
+       if(![self repairable]) return @0;
+       
+       NSUInteger count = 2;
+       HMKCShipObject *flagShip = self.fleet[0];
+       for(HMKCSlotItemObject *item in flagShip.equippedItem) {
+               if([self.repairSlotItemIds containsObject:item.master_slotItem.type_2]) {
+                       count++;
+               }
+       }
+       return @(count);
+}
+
+- (void)resetRepairTime
+{
+       if(self.repairable) {
+               self.repairTime = [NSDate dateWithTimeIntervalSinceNow:0.0];
+       } else {
+               self.repairTime = nil;
+       }
+}
+
+
+@end