This is DiceInspector.m in view mode; [Download] [Up]
//
// This file is a part of Risk by Mike Ferris.
//
#import "Risk.h"
RCSID ("$Id: DiceInspector.m,v 1.2 1997/12/15 07:43:50 nygard Exp $");
#import "DiceInspector.h"
#import "Country.h"
//======================================================================
// The DiceInspector shows the dice as they are rolled, and optionally
// pauses between rolls so that you can see what is going happening.
//======================================================================
#define DiceInspector_VERSION 1
static NSImage *_die1Image;
static NSImage *_die2Image;
static NSImage *_die3Image;
static NSImage *_die4Image;
static NSImage *_die5Image;
static NSImage *_die6Image;
struct image_names
{
NSString *i_name;
NSImage **i_image;
};
static struct image_names class_images[] =
{
{ @"Die1.tiff", &_die1Image },
{ @"Die2.tiff", &_die2Image },
{ @"Die3.tiff", &_die3Image },
{ @"Die4.tiff", &_die4Image },
{ @"Die5.tiff", &_die5Image },
{ @"Die6.tiff", &_die6Image },
};
@implementation DiceInspector
+ (void) initialize
{
if (self == [DiceInspector class])
{
[self setVersion:DiceInspector_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 == [DiceInspector 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];
}
//----------------------------------------------------------------------
- init
{
BOOL loaded;
NSString *nibFile;
if ([super init] == nil)
return nil;
nibFile = @"DiceInspector.nib";
loaded = [NSBundle loadNibNamed:nibFile owner:self];
if (loaded == NO)
{
NSLog (@"Could not load %@.", nibFile);
[super dealloc];
return nil;
}
[attackerDie1 setImage:nil];
[attackerDie2 setImage:nil];
[attackerDie3 setImage:nil];
[defenderDie1 setImage:nil];
[defenderDie2 setImage:nil];
[dicePanel setBecomesKeyOnlyIfNeeded:YES];
[dicePanel orderFront:self];
return self;
}
//----------------------------------------------------------------------
- (void) dealloc
{
[super dealloc];
}
//----------------------------------------------------------------------
- (void) showPanel
{
[dicePanel orderFront:self];
}
//----------------------------------------------------------------------
- (BOOL) isPanelOnScreen
{
return [dicePanel isVisible];
}
//----------------------------------------------------------------------
- (void) setDieImage:(NSImageView *)aView fromInt:(int)value
{
NSImage *image;
switch (value)
{
case 1:
image = _die1Image;
break;
case 2:
image = _die2Image;
break;
case 3:
image = _die3Image;
break;
case 4:
image = _die4Image;
break;
case 5:
image = _die5Image;
break;
case 6:
image = _die6Image;
break;
default:
image = nil;
break;
}
[aView setImage:image];
}
//----------------------------------------------------------------------
- (void) showAttackFromCountry:(Country *)attacker
toCountry:(Country *)defender
withDice:(DiceRoll)dice
{
int tmp;
tmp = MIN (dice.attackerDieCount, dice.defenderDieCount);
[attackerCountryName setStringValue:[attacker countryName]];
[attackerArmyCount setIntValue:[attacker troopCount]];
[attackerUsingDieCount setIntValue:tmp];
[attackerRollingCount setIntValue:dice.attackerDieCount];
[defenderCountryName setStringValue:[defender countryName]];
[defenderArmyCount setIntValue:[defender troopCount]];
[defenderUsingDieCount setIntValue:tmp];
[defenderRollingCount setIntValue:dice.defenderDieCount];
tmp = dice.attackerDieCount;
[self setDieImage:attackerDie1 fromInt:((tmp > 0) ? dice.attackerDice[0] : 0)];
[self setDieImage:attackerDie2 fromInt:((tmp > 1) ? dice.attackerDice[1] : 0)];
[self setDieImage:attackerDie3 fromInt:((tmp > 2) ? dice.attackerDice[2] : 0)];
tmp = dice.defenderDieCount;
[self setDieImage:defenderDie1 fromInt:((tmp > 0) ? dice.defenderDice[0] : 0)];
[self setDieImage:defenderDie2 fromInt:((tmp > 1) ? dice.defenderDice[1] : 0)];
if ([pauseCheckBox state] == 1)
{
[self waitForContinue];
}
}
//----------------------------------------------------------------------
- (void) waitForContinue
{
int retVal;
NSBeep ();
[dicePanel orderFront:self];
retVal = [NSApp runModalForWindow:dicePanel];
}
//----------------------------------------------------------------------
- (void) continueAction:sender
{
[NSApp stopModal];
}
//----------------------------------------------------------------------
- (void) pauseCheckAction:sender
{
[NSApp stopModal];
if ([sender state] == 1)
{
[continueButton setEnabled:YES];
}
else
{
[continueButton setEnabled:NO];
}
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.