This is CountryShapeGenerator.m in view mode; [Download] [Up]
//
// This file is a part of Risk by Mike Ferris.
//
#import "Risk.h"
RCSID ("$Id: CountryShapeGenerator.m,v 1.1.1.1 1997/12/09 07:19:18 nygard Exp $");
#import "CountryShapeGenerator.h"
#import "Country.h"
#import "CountryShape.h"
#import "RiskPoint.h"
#import "SNUserPath.h"
#import "SNUserPathOperation.h"
@implementation CountryShapeGenerator
+ countryShapeGenerator
{
return [[[CountryShapeGenerator alloc] init] autorelease];
}
//----------------------------------------------------------------------
- init
{
[super init];
regionArrays = [[NSMutableArray array] retain];
currentRegionPoints = nil;
return self;
}
//----------------------------------------------------------------------
- (void) dealloc
{
[regionArrays release];
if (currentRegionPoints != nil)
[currentRegionPoints release];
[super dealloc];
}
//----------------------------------------------------------------------
- (void) defineNewRegion
{
NSAssert (currentRegionPoints == nil, @"Already defining a region.");
#if 0
if (currentRegionPoints != nil)
[self closeRegion];
#endif
currentRegionPoints = [[NSMutableArray array] retain];
}
//----------------------------------------------------------------------
- (void) addPoint:(NSPoint)newPoint
{
NSAssert (currentRegionPoints != nil, @"Not defining a region.");
[currentRegionPoints addObject:[RiskPoint riskPointWithPoint:newPoint]];
}
//----------------------------------------------------------------------
- (void) closeRegion
{
NSAssert (currentRegionPoints != nil, @"Not defining a region.");
[regionArrays addObject:currentRegionPoints];
[currentRegionPoints release];
currentRegionPoints = nil;
}
//----------------------------------------------------------------------
- (CountryShape *) generateCountryShapeWithArmyCellPoint:(NSPoint)aPoint
{
NSEnumerator *regionEnumerator;
NSEnumerator *pointEnumerator;
NSArray *region;
RiskPoint *point;
SNUserPath *userPath;
userPath = [[[SNUserPath alloc] init] autorelease];
regionEnumerator = [regionArrays objectEnumerator];
while (region = [regionEnumerator nextObject])
{
pointEnumerator = [region objectEnumerator];
point = [pointEnumerator nextObject];
[userPath addOperation:[SNUserPathOperation moveto:[point point]]];
while (point = [pointEnumerator nextObject])
{
[userPath addOperation:[SNUserPathOperation lineto:[point point]]];
}
}
[userPath addOperation:[SNUserPathOperation closepath]];
//[userPath createPathWithCache:YES];
//return [CountryShape countryShapeWithRegions:regionArrays];
return [CountryShape countryShapeWithUserPath:userPath armyCellPoint:aPoint];
}
//----------------------------------------------------------------------
- (void) createUserPath
{
}
@end
//======================================================================
@implementation NSScanner (RiskUtilExtras)
- (void) expect:(NSString *)str
{
if ([self scanString:str intoString:NULL] == NO)
[NSException raise:ExpectException format:@"Expected %@", str];
//NSLog (@"Got %@", str);
}
//----------------------------------------------------------------------
- (NSString *) scanQuotedString
{
NSString *str;
str = nil;
[self expect:@"\""];
[self scanUpToString:@"\"" intoString:&str];
[self expect:@"\""];
//NSLog (@"scanned \"%@\"", str);
return str;
}
//----------------------------------------------------------------------
- (NSString *) scanString
{
NSString *str;
str = nil;
if ([self scanCharactersFromSet:[NSCharacterSet letterCharacterSet] intoString:&str] == NO)
[NSException raise:ExpectException format:@"Expected letter"];
//NSLog (@"scanned %@", str);
return str;
}
//----------------------------------------------------------------------
- (void) scanPoint:(NSPoint *)point
{
NSPoint aPoint;
if ([self scanFloat:&aPoint.x] == NO)
[NSException raise:ExpectException format:@"Expected float"];
//NSLog (@"Scanned %f", aPoint.x);
if ([self scanFloat:&aPoint.y] == NO)
[NSException raise:ExpectException format:@"Expected float"];
//NSLog (@"Scanned %f", aPoint.y);
*point = aPoint;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.