This is CountryShape.m in view mode; [Download] [Up]
//
// This file is a part of Risk by Mike Ferris.
//
#import "Risk.h"
RCSID ("$Id: CountryShape.m,v 1.2 1997/12/15 07:43:48 nygard Exp $");
#import "CountryShape.h"
#import "RiskPoint.h"
#import "BoardSetup.h"
#import "SNUserPath.h"
#import "SNUserPathOperation.h"
#import "NSObjectExtensions.h"
#import "Country.h"
#import "RiskMapView.h"
#import <libc.h>
#define ARMYCELL_WIDTH 25.0
#define ARMYCELL_HEIGHT 17.0
static NSTextFieldCell *_armyCell = nil;
//======================================================================
// A CountryShape knows how to draw a country -- it's actual shape and
// where to place the army textfield.
//======================================================================
#define CountryShape_VERSION 1
@implementation CountryShape
+ (void) initialize
{
if (self == [CountryShape class])
{
[self setVersion:CountryShape_VERSION];
if (_armyCell == nil)
{
_armyCell = [[NSTextFieldCell allocWithZone:[self zone]] init];
[_armyCell setBackgroundColor:[NSColor whiteColor]];
[_armyCell setBezeled:NO];
[_armyCell setFont:[NSFont fontWithName:@"Helvetica" size:10.0]];
[_armyCell setAlignment:NSCenterTextAlignment];
[_armyCell setEditable:NO];
[_armyCell setSelectable:NO];
[_armyCell setBordered:YES];
[_armyCell setTextColor:[NSColor blackColor]];
[_armyCell setDrawsBackground:YES];
}
}
}
//----------------------------------------------------------------------
+ countryShapeWithUserPath:(SNUserPath *)aUserPath armyCellPoint:(NSPoint)aPoint
{
return [[[CountryShape alloc] initWithUserPath:aUserPath armyCellPoint:aPoint] autorelease];
}
//----------------------------------------------------------------------
- initWithUserPath:(SNUserPath *)aUserPath armyCellPoint:(NSPoint)aPoint
{
if ([super init] == nil)
return nil;
userPath = [aUserPath retain];
if ([userPath isPathGenerated] == NO)
[userPath createPathWithCache:YES];
armyCellPoint = aPoint;
//shapeBoudns = NSZeroRect;
return self;
}
//----------------------------------------------------------------------
- (void) dealloc
{
SNRelease (userPath);
[super dealloc];
}
//----------------------------------------------------------------------
- (void) encodeWithCoder:(NSCoder *)aCoder
{
[super encodeWithCoder:aCoder];
[aCoder encodeObject:userPath];
[aCoder encodePoint:armyCellPoint];
//[aCoder encodeRect:shapeBounds];
}
//----------------------------------------------------------------------
- initWithCoder:(NSCoder *)aDecoder
{
if ([super initWithCoder:aDecoder] == nil)
return nil;
userPath = [[aDecoder decodeObject] retain];
if ([userPath isPathGenerated] == NO)
[userPath createPathWithCache:YES];
armyCellPoint = [aDecoder decodePoint];
//shapeBounds = [aDecoder decodeRect];
return self;
}
//----------------------------------------------------------------------
- (void) drawWithCountry:(Country *)aCountry inView:(RiskMapView *)aView isSelected:(BOOL)selected
{
BoardSetup *boardSetup;
DPSUserPathOp *operators;
float *operands, *bbox;
int operatorCount, operandCount;
int troopCount;
troopCount = [aCountry troopCount];
if (troopCount == 0)
{
[aView drawBackground:NSMakeRect (armyCellPoint.x, armyCellPoint.y, ARMYCELL_WIDTH, ARMYCELL_HEIGHT)];
}
boardSetup = [BoardSetup instance];
if ([aCountry playerNumber] != 0)
[[boardSetup colorForPlayer:[aCountry playerNumber]] set];
else
[[NSColor whiteColor] set];
if ([userPath isPathGenerated] == YES)
{
[userPath getUserPath:&operators:&operatorCount:&operands:&operandCount:&bbox];
PSDoUserPath (operands, operandCount, dps_float, operators, operatorCount, bbox, dps_ufill);
}
if (selected == YES)
[[boardSetup selectedBorderColor] set];
else
[[boardSetup regularBorderColor] set];
PSsetlinewidth ([boardSetup borderWidth]);
if ([userPath isPathGenerated] == YES)
{
[userPath getUserPath:&operators:&operatorCount:&operands:&operandCount:&bbox];
PSDoUserPath (operands, operandCount, dps_float, operators, operatorCount, bbox, dps_ustroke);
}
if ([aCountry playerNumber] != 0 && troopCount > 0)
{
// No -- If by default every country has at least one army in it, and it
// affects combat, add the army at combat. Otherwise, perhaps it is never an issue...
//[_armyCell setIntValue:troopCount - 1];
[_armyCell setIntValue:troopCount];
[_armyCell drawWithFrame:NSMakeRect (armyCellPoint.x, armyCellPoint.y, ARMYCELL_WIDTH, ARMYCELL_HEIGHT)
inView:aView];
}
}
//----------------------------------------------------------------------
- (BOOL) pointInShape:(NSPoint)aPoint
{
BOOL flag;
flag = NO;
if ([userPath isPathGenerated] == YES)
{
flag = [userPath inFill:aPoint];
}
return flag;
}
//----------------------------------------------------------------------
- (NSPoint) centerPoint
{
float *bbox;
float midx, midy;
NSAssert ([userPath isPathGenerated] == YES, @"Path not generated...");
midx = 0;
midy = 0;
bbox = [userPath bbox];
//NSLog (@"bbox: ll (%f,%f), ur (%f,%f)", bbox[0], bbox[1], bbox[2], bbox[3]);
midx += *bbox++;
midy += *bbox++;
midx += *bbox++;
midy += *bbox++;
midx /= 2;
midy /= 2;
//NSLog (@"middle: %f,%f", midx, midy);
return NSMakePoint (midx, midy);
}
//----------------------------------------------------------------------
- (NSRect) bounds
{
NSAssert ([userPath isPathGenerated] == YES, @"Path not generated...");
return NSUnionRect ([userPath bounds], NSMakeRect (armyCellPoint.x, armyCellPoint.y, ARMYCELL_WIDTH, ARMYCELL_HEIGHT));
//return [userPath bounds];
}
//----------------------------------------------------------------------
- (NSString *) description
{
return [NSString stringWithFormat:@"<CountryShape: userPath = %@, armyCellPoint = %f,%f>",
userPath, armyCellPoint.x, armyCellPoint.y];
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.