29#if OO_OXP_VERIFIER_ENABLED
39static NSString *
const kStageName =
@"Checking shipdata.plist";
42@interface OOCheckShipDataPListVerifierStage (OOPrivate)
44- (void)verifyShipInfo:(NSDictionary *)info withName:(NSString *)name;
46- (void)message:(NSString *)format, ...;
47- (void)verboseMessage:(NSString *)format, ...;
54- (NSSet *)rolesFromString:(NSString *)string;
69 NSMutableSet *result = [[
super dependents] mutableCopy];
72 return [
result autorelease];
91 NSAutoreleasePool *pool =
nil;
92 NSEnumerator *shipEnum =
nil;
93 NSString *shipKey =
nil;
94 NSDictionary *shipInfo =
nil;
95 NSDictionary *ooliteShipData =
nil;
96 NSDictionary *settings =
nil;
97 NSMutableSet *mergeSet =
nil;
98 NSArray *shipList =
nil;
118 OOLog(
@"verifyOXP.shipdataPList.notDict",
@"%@",
@"***** ERROR: shipdata.plist is not a dictionary.");
128 mergeSet = [_basicKeys mutableCopy];
129 [
mergeSet addObjectsFromArray:[
settings oo_arrayForKey:@"knownStationKeys"]];
133 mergeSet = [_basicKeys mutableCopy];
134 [
mergeSet addObjectsFromArray:[
settings oo_arrayForKey:@"knownPlayerKeys"]];
144 shipList = [[_shipdataPList allKeys] sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];
145 for (shipEnum = [shipList objectEnumerator]; (shipKey = [
shipEnum nextObject]); )
149 shipInfo = [_shipdataPList oo_dictionaryForKey:shipKey];
152 OOLog(
@"verifyOXP.shipdata.badType",
@"***** ERROR: shipdata.plist entry for \"%@\
" is not a dictionary.", shipKey);
172@implementation OOCheckShipDataPListVerifierStage (OOPrivate)
174- (void)verifyShipInfo:(NSDictionary *)info withName:(NSString *)name
178 _havePrintedMessage = NO;
186 NSString *aiName = [
info oo_stringForKey:@"ai_type"];
189 if (![aiName hasSuffix:
@".js"])
198 if (!_havePrintedMessage)
200 OOLog(
@"verifyOXP.verbose.shipData.OK",
@"- ship \"%@\
" OK.", _name);
174- (void)verifyShipInfo:(NSDictionary *)info withName:(NSString *)name {
…}
209- (void)message:(NSString *)format, ...
213 if (!_havePrintedMessage)
215 OOLog(
@"verifyOXP.shipData.firstMessage",
@"Ship \"%@\
":", _name);
217 _havePrintedMessage = YES;
220 va_start(args, format);
209- (void)message:(NSString *)format, ... {
…}
226- (void)verboseMessage:(NSString *)format, ...
232 if (!_havePrintedMessage)
234 OOLog(
@"verifyOXP.shipData.firstMessage",
@"Ship \"%@\
":", _name);
236 _havePrintedMessage = YES;
239 va_start(args, format);
226- (void)verboseMessage:(NSString *)format, ... {
…}
247 NSString *rolesString =
nil;
249 rolesString = [
_info objectForKey:@"roles"];
251 _isPlayer = [
_roles containsObject:@"player"];
252 _isStation = [
_info oo_boolForKey:@"is_carrier" defaultValue:NO] ||
253 [
_info oo_boolForKey:@"isCarrier" defaultValue:NO] ||
254 [
rolesString rangeOfString:@"station"].location != NSNotFound ||
255 [
rolesString rangeOfString:@"carrier"].location != NSNotFound;
257 _isTemplate = [
_info oo_boolForKey:@"is_template" defaultValue:NO];
259 if (_isPlayer && _isStation)
261 [
self message:@"***** ERROR: ship is both a player ship and a station. Treating as non-station."];
269 NSSet *referenceSet =
nil;
270 NSEnumerator *keyEnum =
nil;
273 if (_isPlayer) referenceSet = _playerKeys;
274 else if (_isStation) referenceSet = _stationKeys;
275 else referenceSet = _basicKeys;
277 for (keyEnum = [_info keyEnumerator]; (key = [
keyEnum nextObject]); )
279 if (![referenceSet containsObject:key])
281 if ([_allKeys containsObject:key])
287 [
self message:@"----- WARNING: key \"%@\" does not apply to this category of ship.", key];
292 [
self message:@"----- WARNING: unknown key \"%@\".", key];
311 model = [
_info oo_stringForKey:@"model"];
312 materials = [
_info oo_dictionaryForKey:@"materials"];
313 shaders = [
_info oo_dictionaryForKey:@"shaders"];
317 if (![[[
self verifier] modelVerifierStage] modelNamed:model
319 inFile:
@"shipdata.plist"
320 withMaterials:materials
328 if ([_info oo_stringForKey:
@"like_ship"] ==
nil)
330 [
self message:@"***** ERROR: ship does not specify model or like_ship."];
337- (NSSet *)rolesFromString:(NSString *)string
339 NSArray *parts =
nil;
340 NSMutableSet *result =
nil;
342 NSString *role =
nil;
345 if (
string ==
nil)
return [
NSSet set];
352 for (i = 0; i !=
count; ++i)
354 role = [
parts objectAtIndex:i];
355 parenRange = [
role rangeOfString:@"("];
356 if (parenRange.location != NSNotFound)
358 role = [
role substringToIndex:parenRange.location];
337- (NSSet *)rolesFromString:(NSString *)string {
…}
368withPropertyList:(
id)rootPList
369 named:(NSString *)name
370 testProperty:(
id)subPList
371 atPath:(NSArray *)keyPath
372 againstType:(NSString *)typeKey
373 error:(NSError **)outError
381withPropertyList:(
id)rootPList
382 named:(NSString *)name
383 failedForProperty:(
id)subPList
384 withError:(NSError *)error
385 expectedType:(NSDictionary *)localSchema
388 [
self message:@"***** ERROR: verification of ship \"%@\" failed at \"%@\": %@", name, [
error plistKeyPathDescription], [
error localizedFailureReason]];
static NSString *const kStageName
void OOLogPushIndent(void)
void OOLogPopIndent(void)
void void void OOLogWithFunctionFileAndLineAndArguments(NSString *inMessageClass, const char *inFunction, const char *inFile, unsigned long inLine, NSString *inFormat, va_list inArguments) OO_TAKES_FORMAT_STRING(5
BOOL OOLogWillDisplayMessagesInClass(NSString *inMessageClass)
#define OOLog(class, format,...)
NSMutableArray * ScanTokensFromString(NSString *values)
NSString * nameForReverseDependencyForVerifier:(OOOXPVerifier *verifier)
void message:(NSString *format,[,] ...)
void verboseMessage:(NSString *format,[,] ...)
OOAIStateMachineVerifierStage * _aiVerifierStage
void verifyShipInfo:withName:(NSDictionary *info,[withName] NSString *name)
OOPListSchemaVerifier * _schemaVerifier
NSSet * rolesFromString:(NSString *string)
NSDictionary * _shipdataPList
id plistNamed:inFolder:referencedFrom:checkBuiltIn:(NSString *file,[inFolder] NSString *folder,[referencedFrom] NSString *context,[checkBuiltIn] BOOL checkBuiltIn)
BOOL fileExists:inFolder:referencedFrom:checkBuiltIn:(NSString *file,[inFolder] NSString *folder,[referencedFrom] NSString *context,[checkBuiltIn] BOOL checkBuiltIn)
NSString * nameForReverseDependencyForVerifier:(OOOXPVerifier *verifier)
OOOXPVerifier * verifier()
id stageWithName:(NSString *name)
OOFileScannerVerifierStage * fileScannerStage()
NSDictionary * configurationDictionaryForKey:(NSString *key)
NSString * oxpDisplayName()
instancetype verifierWithSchema:(NSDictionary *schema)
NSString * descriptionForKeyPath:(NSArray *keyPath)
void setDelegate:(id delegate)
NSDictionary * dictionaryFromFilesNamed:inFolder:andMerge:(NSString *fileName,[inFolder] NSString *folderName,[andMerge] BOOL mergeFiles)