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

This is BOBrick.m in view mode; [Download] [Up]

#import "BOBrick.h"
#import "CacheManager.h"

@implementation BOBrick


- activate:sender :(int)tag
{
	NXSize tsize = {200,100};
	NXSize ts2 = {228,124};
	NXSize t2 = {100, 50};

	[super activate:sender :tag];

	[self reinitWithImage:"BObrick"
		frameSize:&tsize
		numFrames:1
		shape: RECT
		alliance: EVIL
		radius: 50
		buffered: YES
		x: 0
		y: 0
		theta: 0
		vel: 0
		interval: 4000
		distToCorner: &t2];

	drawRect.size = frameSize = ts2;
	return self;
}

- calcDrawRect
{
	drawRect.origin.x = floor(x - gx - distToCorner.width + xOffset);
	drawRect.origin.y = floor(y - gy - distToCorner.height + yOffset - 24);
	return self;
}

- performCollisionWith:(Actor *) dude
{
	// don't go away
	return self;
}

// since this is a stationary object, we never shedule drawing;
// we just draw into the virgin buffer once and forget it.

- oneStep
{
	if (timeInMS > changeTime)
	{
		[self calcDrawRect];
		eraseRect = drawRect;
		if (alliance == EVIL)
		{
			changeTime = timeInMS+1500;
			alliance = NEUTRAL;
			[cacheMgr retileRect:&drawRect];
		}
		else
		{
			changeTime = timeInMS+4000;
			alliance = EVIL;
			[[cacheMgr background] lockFocus];
			[super draw];
			[[cacheMgr background] unlockFocus];
		}
		[self erase];
		needToDraw = YES;
	}
	return self;
}

- scheduleDrawing
{
	if (needToDraw)
	{
		[super scheduleDrawing];
		needToDraw = NO;
	}
	return self;
}

- draw	// so I don't draw on drawself messages...
{
	return self;
}

- tile
{
	[self calcDrawRect];
	if (alliance == EVIL)
	{
		[super draw];	// super's implementation really draws
	}
	return self;
}

@end

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.