OSDN Git Service

連合艦隊の戦闘での大破チェック実装第一段
authormasakih <masakih@users.sourceforge.jp>
Sat, 16 Aug 2014 06:52:04 +0000 (15:52 +0900)
committermasakih <masakih@users.sourceforge.jp>
Sat, 16 Aug 2014 06:52:04 +0000 (15:52 +0900)
KCD/HMCalculateDamageCommand.h
KCD/HMCalculateDamageCommand.m
KCD/Temporary.xcdatamodeld/Temporary.xcdatamodel/contents

index aaf33b9..eb6be8a 100644 (file)
@@ -10,4 +10,5 @@
 
 @interface HMCalculateDamageCommand : HMJSONCommand
 
+@property BOOL calcSecondFleet;
 @end
index 2d8c375..25e4a7f 100644 (file)
@@ -81,7 +81,8 @@
                                                                                                 error:&error];
        // TODO: error handling
        
-       if(array.count != 6) {
+       NSInteger frendShipCount = 12;
+       if(array.count != frendShipCount) {
                // Battleエンティティ取得
                NSArray *battles = [self.store objectsWithEntityName:@"Battle"
                                                                                                   predicate:nil
@@ -94,7 +95,7 @@
                
                // Damage エンティティ作成6個
                NSMutableArray *damages = [NSMutableArray new];
-               for(NSInteger i = 0; i < 6; i++) {
+               for(NSInteger i = 0; i < frendShipCount; i++) {
                        id damage = [NSEntityDescription insertNewObjectForEntityForName:@"Damage"
                                                                                                          inManagedObjectContext:moc];
                        [damage setValue:battle forKeyPath:@"battle"];
        
        id hougeki1Damages = [self.json valueForKeyPath:damageKeyPath];
        NSInteger i = 0;
+       NSInteger offset = self.calcSecondFleet ? 6 : 0;
        for(NSArray *array in targetShips) {
                if(![array isKindOfClass:[NSArray class]]) {
                        i++;
                                continue;
                        }
                        
-                       id damageObject = [damages objectAtIndex:target - 1];
+                       id damageObject = [damages objectAtIndex:target - 1 + offset];
                        NSInteger damage = [[[hougeki1Damages objectAtIndex:i] objectAtIndex:j] integerValue];
                        damage += [[damageObject valueForKey:@"damage"] integerValue];
                        [damageObject setValue:@(damage) forKeyPath:@"damage"];
 {
        id koukuDamage = [self.json valueForKeyPath:fdamKeyPath];
        if(!koukuDamage || [koukuDamage isEqual:[NSNull null]]) return;
+       
+       NSInteger offset = self.calcSecondFleet ? 6 : 0;
        for(NSInteger i = 1; i <= 6; i++) {
-               id damageObject = [damages objectAtIndex:i - 1];
+               id damageObject = [damages objectAtIndex:i - 1 + offset];
                NSInteger damage = [[koukuDamage objectAtIndex:i] integerValue];
                damage += [[damageObject valueForKey:@"damage"] integerValue];
                [damageObject setValue:@(damage) forKeyPath:@"damage"];
                                                                                  error:&error];
        // TODO: error handling
        
-       if(damages.count != 6) {
+       if(damages.count != 12) {
                NSLog(@"Damage is invalid. count %lxd", damages.count);
                return;
        }
                return;
        }
        
-       // 艦隊メンバーを取得
        HMServerDataStore *serverStore = [HMServerDataStore oneTimeEditor];
-       NSArray *decks = [serverStore objectsWithEntityName:@"Deck"
-                                                                                                 error:NULL
-                                                                               predicateFormat:@"id = %@", [array[0] valueForKey:@"deckId"]];
-       if(decks.count == 0) {
-               NSLog(@"Deck is invalid. %s", __PRETTY_FUNCTION__);
-               return;
-       }
-       id deck = decks[0];
-       NSMutableArray *shipIds = [NSMutableArray new];
-       [shipIds addObject:[deck valueForKey:@"ship_0"]];
-       [shipIds addObject:[deck valueForKey:@"ship_1"]];
-       [shipIds addObject:[deck valueForKey:@"ship_2"]];
-       [shipIds addObject:[deck valueForKey:@"ship_3"]];
-       [shipIds addObject:[deck valueForKey:@"ship_4"]];
-       [shipIds addObject:[deck valueForKey:@"ship_5"]];
-       
-       NSMutableArray *ships = [NSMutableArray new];
-       for(id shipId in shipIds) {
-               NSArray *ship = [serverStore objectsWithEntityName:@"Ship"
-                                                                                                        error:NULL
-                                                                                  predicateFormat:@"id = %@", @([shipId integerValue])];
-               if(ship.count != 0 && ![ship[0] isEqual:[NSNull null]]) {
-                       [ships addObject:ship[0]];
+       NSPredicate *predicate = [NSPredicate predicateWithFormat:@"id = %@", [array[0] valueForKey:@"deckId"]];
+       BOOL firstRun = YES;
+       for(NSInteger i = 0; i < 2; i++) {
+               // 艦隊メンバーを取得
+               NSArray *decks = [serverStore objectsWithEntityName:@"Deck"
+                                                                                                 predicate:predicate
+                                                                                                         error:NULL];
+               
+               if(decks.count == 0) {
+                       NSLog(@"Deck is invalid. %s", __PRETTY_FUNCTION__);
+                       return;
                }
-       }
-       
-       NSUInteger shipCount = ships.count;
-       for(NSInteger i = 0; i < shipCount; i++) {
-               id ship = ships[i];
-               NSInteger damage = [[damages[i] valueForKey:@"damage"] integerValue];
-               NSInteger nowhp = [[ship valueForKey:@"nowhp"] integerValue];
-               nowhp -= damage;
-               [ship setValue:@(nowhp) forKeyPath:@"nowhp"];
+               id deck = decks[0];
+               NSMutableArray *shipIds = [NSMutableArray new];
+               [shipIds addObject:[deck valueForKey:@"ship_0"]];
+               [shipIds addObject:[deck valueForKey:@"ship_1"]];
+               [shipIds addObject:[deck valueForKey:@"ship_2"]];
+               [shipIds addObject:[deck valueForKey:@"ship_3"]];
+               [shipIds addObject:[deck valueForKey:@"ship_4"]];
+               [shipIds addObject:[deck valueForKey:@"ship_5"]];
+               
+               NSMutableArray *ships = [NSMutableArray new];
+               for(id shipId in shipIds) {
+                       NSArray *ship = [serverStore objectsWithEntityName:@"Ship"
+                                                                                                                error:NULL
+                                                                                          predicateFormat:@"id = %@", @([shipId integerValue])];
+                       if(ship.count != 0 && ![ship[0] isEqual:[NSNull null]]) {
+                               [ships addObject:ship[0]];
+                       }
+               }
+               
+               NSUInteger shipCount = ships.count;
+               NSUInteger offset = (self.calcSecondFleet && !firstRun) ? 6 : 0;
+               for(NSInteger i = 0; i < shipCount; i++) {
+                       id ship = ships[i];
+                       NSInteger damage = [[damages[i + offset] valueForKey:@"damage"] integerValue];
+                       NSInteger nowhp = [[ship valueForKey:@"nowhp"] integerValue];
+                       nowhp -= damage;
+                       [ship setValue:@(nowhp) forKeyPath:@"nowhp"];
+               }
+               if(!self.calcSecondFleet) {
+                       NSLog(@"Not combined.");
+                       break;
+               }
+               
+               predicate = [NSPredicate predicateWithFormat:@"id = %@", @2];
+               firstRun = NO;
        }
        
        [serverStore saveAction:nil];
index 7f71ee3..e86e671 100644 (file)
@@ -1,18 +1,18 @@
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<model userDefinedModelVersionIdentifier="" type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="5064" systemVersion="13C1021" minimumToolsVersion="Xcode 4.3" macOSVersion="Automatic" iOSVersion="Automatic">
+<model userDefinedModelVersionIdentifier="" type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="5064" systemVersion="13E28" minimumToolsVersion="Xcode 4.3" macOSVersion="Automatic" iOSVersion="Automatic">
     <entity name="Battle" syncable="YES">
         <attribute name="deckId" optional="YES" attributeType="Integer 32" defaultValueString="0" syncable="YES"/>
         <attribute name="mapArea" optional="YES" attributeType="Integer 32" defaultValueString="0" syncable="YES"/>
         <attribute name="mapInfo" optional="YES" attributeType="Integer 32" defaultValueString="0" syncable="YES"/>
-        <relationship name="damages" optional="YES" toMany="YES" maxCount="6" deletionRule="Cascade" ordered="YES" destinationEntity="Damage" inverseName="battle" inverseEntity="Damage" syncable="YES"/>
+        <relationship name="damages" optional="YES" toMany="YES" maxCount="12" deletionRule="Cascade" ordered="YES" destinationEntity="Damage" inverseName="battle" inverseEntity="Damage" syncable="YES"/>
     </entity>
     <entity name="Damage" syncable="YES">
-        <attribute name="damage" optional="YES" attributeType="Integer 32" defaultValueString="0" syncable="YES"/>
-        <attribute name="id" optional="YES" attributeType="Integer 32" defaultValueString="0" syncable="YES"/>
+        <attribute name="damage" optional="YES" attributeType="Float" defaultValueString="0" syncable="YES"/>
+        <attribute name="id" optional="YES" attributeType="Float" defaultValueString="0" syncable="YES"/>
         <relationship name="battle" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="Battle" inverseName="damages" inverseEntity="Battle" syncable="YES"/>
     </entity>
     <elements>
-        <element name="Battle" positionX="-63" positionY="-18" width="128" height="103"/>
-        <element name="Damage" positionX="-54" positionY="18" width="128" height="88"/>
+        <element name="Battle" positionX="-63" positionY="-18" width="128" height="105"/>
+        <element name="Damage" positionX="-54" positionY="18" width="128" height="90"/>
     </elements>
 </model>
\ No newline at end of file