This is MineFragment.m in view mode; [Download] [Up]
#import "MineFragment.h"
#import "SoundMgr.h"
#import "ActorMgr.h"
#import "Xoxeroids.h"
#import "Thinker.h"
@implementation MineFragment
static int lastMineFragSound;
+ initialize
{
[super initialize];
[[NXApp delegate] addImageResource:"mineFrag" for: self];
return self;
}
- activate:sender :(int)tag
{
NXSize tsize = {25,25};
NXSize tsize2 = {12.5,12.5};
Actor *dude = (Actor *)sender;
float xfactor = -sin(dude->theta), yfactor = cos(dude->theta);
float speed;
[super activate:sender :tag];
speed = randBetween(12.5,15.5);
[self reinitWithImage:"mineFrag"
frameSize:&tsize
numFrames:6
shape: CIRCLE
alliance: DESTROYALL
radius: tsize2.width
buffered: NO
x: dude->x
y: dude->y
theta: dude->theta
vel: dude->vel
interval: 50
distToCorner: &tsize2];
xv = xfactor * speed;
yv = yfactor * speed;
frame = (tag & 0xffff)%6;
generation = tag>>16;
expireTime = timeInMS + (int)(randBetween(1550,1850));
return self;
}
- calcDxDy:(NXPoint *)dp
{
if (timeInMS > expireTime)
[actorMgr destroyActor:self];
dp->x = timeScale * xv;
dp->y = timeScale * yv;
return self;
}
- performCollisionWith:(Actor *) dude
{
int i;
float t_theta;
if (timeInMS > (lastMineFragSound + 80))
{
lastMineFragSound = timeInMS + (timeInMS & 0xf);
[soundMgr playSound: EXP3SND at:0.5];
}
// [actorMgr newActor:xx_explosion for:self tag:1];
if (dude->actorType == xx_bullet && generation < 2)
{
t_theta = theta;
for (i=-1; i<=1; i+=2)
{
theta = t_theta + i * randBetween(4.0*PI/180.,10.0*PI/180.);
[actorMgr newActor:xx_minefragment for:self
tag:((generation+1)<<16) | frame];
}
}
return [super performCollisionWith: dude];
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.