2 // HMChangeHenseiCommand.m
5 // Created by Hori,Masaki on 2014/06/15.
6 // Copyright (c) 2014年 Hori,Masaki. All rights reserved.
9 #import "HMChangeHenseiCommand.h"
13 @interface HMChangeHenseiCommand ()
14 @property (nonatomic, strong) HMServerDataStore *store;
17 @implementation HMChangeHenseiCommand
20 static dispatch_once_t onceToken;
21 dispatch_once(&onceToken, ^{
22 [HMJSONCommand registerClass:self];
26 + (BOOL)canExcuteAPI:(NSString *)api
28 return [api isEqualToString:@"/kcsapi/api_req_hensei/change"];
31 - (HMServerDataStore *)store
33 if(_store) return _store;
35 _store = [HMServerDataStore oneTimeEditor];
42 NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"id" ascending:YES];
43 NSArray *decks = [self.store objectsWithEntityName:@"Deck"
44 sortDescriptors:@[sortDescriptor]
47 // TODO: error handling
49 NSMutableArray *ships = [NSMutableArray new];
50 for(id deck in decks) {
51 for(NSUInteger i = 0; i < 6; i++) {
52 [ships addObject:[deck valueForKey:[NSString stringWithFormat:@"ship_%ld", i]]];
56 for(int i = 0; i < 4; i++) {
57 fprintf(stderr, "Fleet %d\n", i+1);
58 for(int j = 0; j < 6; j++) {
59 fprintf(stderr, "%d -> %ld\n", j+1, [ships[i*6+j] integerValue]);
62 fprintf(stderr, "\n");
68 NSArray *decks = [self.store objectsWithEntityName:@"Deck"
72 // TODO: error handling
74 for(id deck in decks) {
76 for(NSInteger i = 0; i < 6; i++) {
77 NSInteger shipId = [[deck valueForKey:[NSString stringWithFormat:@"ship_%ld", i]] integerValue];
78 if(!needsPack && shipId == -1) {
83 [deck setValue:@(shipId) forKey:[NSString stringWithFormat:@"ship_%ld", i - 1]];
86 [deck setValue:@(-1) forKey:@"ship_5"];
93 - (void)excludeShipsWithoutFlag
95 NSInteger deckNumber = [[self.arguments valueForKey:@"api_id"] integerValue];
98 NSArray *decks = [self.store objectsWithEntityName:@"Deck"
100 predicate:[NSPredicate predicateWithFormat:@"id = %ld", deckNumber]
102 // TODO: error handling
105 for(NSInteger i = 1; i < 6; i++) {
106 [deck setValue:@(-1) forKey:[NSString stringWithFormat:@"ship_%ld", i]];
112 NSInteger deckNumber = [[self.arguments valueForKey:@"api_id"] integerValue];
113 NSInteger shipId = [[self.arguments valueForKey:@"api_ship_id"] integerValue];
114 NSInteger shipIndex = [[self.arguments valueForKey:@"api_ship_idx"] integerValue];
117 [self excludeShipsWithoutFlag];
121 NSError *error = nil;
122 NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"id" ascending:YES];
123 NSArray *decks = [self.store objectsWithEntityName:@"Deck"
124 sortDescriptors:@[sortDescriptor]
127 // TODO: error handling
129 NSMutableArray *ships = [NSMutableArray new];
130 for(id deck in decks) {
131 for(NSUInteger i = 0; i < 6; i++) {
132 [ships addObject:[deck valueForKey:[NSString stringWithFormat:@"ship_%ld", i]]];
137 BOOL alreadyInFleet = [ships containsObject:@(shipId)];
138 NSInteger shipDeckNumber = -1;
139 NSInteger shipDeckIndex = -1;
141 NSInteger index = [ships indexOfObject:@(shipId)];
142 shipDeckNumber = index / 6;
143 shipDeckIndex = index % 6;
146 NSInteger replaceShipId = [ships[(deckNumber - 1) * 6 + shipIndex] integerValue];
149 id deck = decks[deckNumber - 1];
150 [deck setValue:@(shipId) forKey:[NSString stringWithFormat:@"ship_%ld", shipIndex]];
153 if(alreadyInFleet && shipId != -1) {
154 id deck = decks[shipDeckNumber];
155 [deck setValue:@(replaceShipId) forKey:[NSString stringWithFormat:@"ship_%ld", shipDeckIndex]];