This is Mine.m in view mode; [Download] [Up]
#import "Mine.h"
#import "ActorMgr.h"
#import "SoundMgr.h"
#import "Explosion.h"
#import "Xoxeroids.h"
#import "XXShip.h"
#import "Thinker.h"
@implementation Mine
+ initialize
{
[super initialize];
[[NXApp delegate] addImageResource:"bigMineArray" for: self];
[[NXApp delegate] addImageResource:"bigMineArray2" for: self];
return self;
}
- activate:sender :(int)tag
{
NXSize tsize = {48,48};
NXSize tsize2 = {24,24};
[super activate:sender :tag];
[self reinitWithImage:"bigMineArray"
frameSize:&tsize
numFrames:10
shape: CIRCLE
alliance: EVIL
radius: tsize2.width
buffered: YES
x: randBetween(gx+xOffset/2, gx+5.5*xOffset)
y: randBetween(gy+yOffset/2, gy+5.5*yOffset)
theta: randBetween(0,2*PI)
vel: randBetween(0,3)
interval: randBetween(750,1150)
distToCorner: &tsize2];
frame = (int) randBetween(0,9.95);
frameDir = (frame & 1) ? -1 : 1;
badMine = image;
goodMine = [self findImageNamed:"bigMineArray2"];
mineState = tag & 1;
if (mineState) image = goodMine;
else image = badMine;
pointValue = 75;
return self;
}
- positionChanged
{
if (timeInMS > changeTime)
{
changeTime = timeInMS + interval;
frame += frameDir;
if (frame >= numFrames) frame = 0;
else if (frame < 0) frame = numFrames - 1;
}
[self wrapAtDistance: (3*xOffset) :(3*yOffset)];
return self;
}
- performCollisionWith:(Actor *) dude
{
float t_theta;
int i;
if ((frame != 0) || (dude->actorType != (int)[XXShip class]))
{
[soundMgr playSound: (EXP1SND) at:0.5];
[actorMgr newActor:xx_explosion for:self tag:mineState];
t_theta = theta;
for (i=0; i<8; i++)
{
t_theta += (45. * PI/180.0);
theta = t_theta + randBetween(-6.*PI/180.,6.*PI/180.);
[actorMgr newActor:xx_minefragment for:self tag:(i*3)];
}
}
else
[actorMgr newActor:xx_explosion for:self tag:1];
return [super performCollisionWith: dude];
}
- (int) mineType
{
return mineState;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.