This is ArmyView.m in view mode; [Download] [Up]
//
// This file is a part of Risk by Mike Ferris.
//
#import "Risk.h"
RCSID ("$Id: ArmyView.m,v 1.1.1.1 1997/12/09 07:18:52 nygard Exp $");
#import "ArmyView.h"
#define ArmyView_VERSION 1
static NSImage *_soldierImage;
static NSImage *_fiveImage;
static NSImage *_tenImage;
struct image_names
{
NSString *i_name;
NSImage **i_image;
};
static struct image_names class_images[] =
{
{ @"Soldier.tiff", &_soldierImage },
{ @"5Soldiers.tiff", &_fiveImage },
{ @"10Soldiers.tiff", &_tenImage },
};
@implementation ArmyView
+ (void) initialize
{
if (self == [ArmyView class])
{
[self setVersion:ArmyView_VERSION];
if ([NSBundle bundleForClass:self] == nil)
{
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector (loadClassImages)
name:NSApplicationDidFinishLaunchingNotification
object:NSApp];
}
else
{
[self loadClassImages];
}
}
}
//----------------------------------------------------------------------
+ (void) loadClassImages
{
int l;
NSBundle *thisBundle;
NSString *imagePath;
if (self == [ArmyView class])
{
thisBundle = [NSBundle bundleForClass:self];
NSAssert (thisBundle != nil, @"Could not get bundle.");
// load class images
for (l = 0; l < sizeof (class_images) / sizeof (struct image_names); l++)
{
imagePath = [thisBundle pathForImageResource:class_images[l].i_name];
NSAssert1 (imagePath != nil, @"Could not find image: '%@'", class_images[l].i_name);
*(class_images[l].i_image) = [[NSImage alloc] initByReferencingFile:imagePath];
NSAssert1 (*(class_images[l].i_image) != nil, @"Couldn't load image: '%@'\n", class_images[l].i_name);
}
}
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
//----------------------------------------------------------------------
- initWithFrame:(NSRect)frameRect
{
if ([super initWithFrame:frameRect] == nil)
return nil;
armyCount = 0;
return self;
}
//----------------------------------------------------------------------
- (void) dealloc
{
[super dealloc];
}
//----------------------------------------------------------------------
- (int) armyCount
{
return armyCount;
}
//----------------------------------------------------------------------
- (void) setArmyCount:(int)newCount
{
armyCount = newCount;
[self setNeedsDisplay:YES];
}
//----------------------------------------------------------------------
#define INTERSPACE -1.0
- (void) drawRect:(NSRect)rect
{
NSPoint point;
NSSize imageSize;
int i;
int tens, fives, ones;
NSRect boundsRect;
i = armyCount;
tens = i / 10;
i = i % 10;
fives = i / 5;
ones = i % 5;
point = NSMakePoint (3, 5);
boundsRect = [self bounds];
NSDrawWhiteBezel (boundsRect, boundsRect);
imageSize = [_tenImage size];
for (i = 0; i < tens; i++)
{
[_tenImage compositeToPoint:point operation:NSCompositeSourceOver];
point.x += imageSize.width + INTERSPACE;
}
imageSize = [_fiveImage size];
for (i = 0; i < fives; i++)
{
[_fiveImage compositeToPoint:point operation:NSCompositeSourceOver];
point.x += imageSize.width + INTERSPACE;
}
imageSize = [_soldierImage size];
for (i = 0; i < ones; i++)
{
[_soldierImage compositeToPoint:point operation:NSCompositeSourceOver];
point.x += imageSize.width + INTERSPACE;
}
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.