This is Dice.m in view mode; [Download] [Up]
#import "Dice.h"
void rollHandler(DPSTimedEntry teNumber, double now, void *userData)
{
id obj = (id)userData;
[obj animateRoll];
}
@implementation Dice
- awakeFromNib
{
id myBundle = [NXBundle bundleForClass:[self class]];
char path[MAXPATHLEN+1];
if ([myBundle getPath:path forResource:"one" ofType:"tiff"])
image[1] = [[NXImage alloc] initFromFile:path];
if ([myBundle getPath:path forResource:"two" ofType:"tiff"])
image[2] = [[NXImage alloc] initFromFile:path];
if ([myBundle getPath:path forResource:"three" ofType:"tiff"])
image[3] = [[NXImage alloc] initFromFile:path];
if ([myBundle getPath:path forResource:"four" ofType:"tiff"])
image[4] = [[NXImage alloc] initFromFile:path];
if ([myBundle getPath:path forResource:"five" ofType:"tiff"])
image[5] = [[NXImage alloc] initFromFile:path];
if ([myBundle getPath:path forResource:"six" ofType:"tiff"])
image[6] = [[NXImage alloc] initFromFile:path];
[dieButton1 setImage:image[1]];
[dieButton2 setImage:image[6]];
isEnabled = YES;
if ([myBundle getPath:path forResource:"roll" ofType:"snd"])
rollSound = [[SoundEffect allocFromZone:[self zone]] initFromSection:path];
return self;
}
- animateRoll
{
if(rollCount < NUMBER_TO_ROLL) {
//die1 = (int) randBetween(1.0, 7.0);
//die2 = (int) randBetween(1.0, 7.0);
die1 = [dealer randomIntBetween:1 :6];
die2 = [dealer randomIntBetween:1 :6];
//[dieButton1 setIcon:imageName[die1]];
//[dieButton2 setIcon:imageName[die2]];
[dieButton1 setImage:image[die1]];
[dieButton2 setImage:image[die2]];
rotations = 0;
nextRotation = nextRotation+1;
rollCount++;
NXPing();
} else {
DPSRemoveTimedEntry(animateTE);
animateTE=0;
[self enableRoll:self];
[dealer playerDidThrow:self];
rollCount = 0;
}
return self;
}
- disableRoll:sender
{
[dieButton1 setEnabled:NO];
[dieButton2 setEnabled:NO];
return self;
}
- enableRoll:sender
{
if(isEnabled)
{
[dieButton1 setEnabled:YES];
[dieButton2 setEnabled:YES];
}
return self;
}
- getDiceValues:(int *)d1 :(int *)d2
{
*d1 = die1;
*d2 = die2;
return self;
}
- roll:sender
{
if([dealer playerWillThrow:self] == NO) return nil;
[rollSound play:1.0 pan:0.0];
[self disableRoll:self];
rollCount = 0;
rotations = 0;
nextRotation = 1;
animateTE = DPSAddTimedEntry(.05, (DPSTimedEntryProc)rollHandler, self, NX_BASETHRESHOLD);
return self;
}
- setEnabled:(BOOL)flag
{
[dieButton1 setEnabled:flag];
[dieButton2 setEnabled:flag];
isEnabled = flag;
return self;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.