ftp.nice.ch/pub/next/games/action/xox/xox.940213.s.tar.gz#/xoxsrc.940213/xoxsrc/Xoxeroids.bproj/MineFragment.m

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.