ftp.nice.ch/pub/next/tools/screen/backspace/Aquarium.NIHS.bs.tar.gz#/AquariumView.BackModule/FishBrain.m

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

#import "FishBrain.h"
#import "RotImage.h"
#ifndef NS3x
#import "Thinker.h"
#else
#import "Thinker3.h"
#endif

#import <libc.h>

@implementation FishBrain


- changeXDirection
{
	direction = direction ^ 
		(((direction & RIGHT) == RIGHT) ?  RIGHT : LEFT);
	xspeed = (float)(random() % MAX_X_SPEED) / 10.0 + .1;
	[body flip:HORIZONTAL];
	return self;
}

- changeYDirection
{
	direction = direction ^ (((direction & UP) == UP) ? UP : DOWN);
 	yspeed = (float)(random() % MAX_Y_SPEED) / 10.0 + .1;
	return self;
}

-init:(NXSize *)drawingSize fishSize:(NXSize *)mysize owner:mybody
{

	body = mybody;
	WIDTH = mysize->width;
	HEIGHT = mysize->height;

	sizeOfAquar = *drawingSize;

	srandom(currentTimeInMs());

	xspeed = (float)(random() % MAX_X_SPEED) / 10.0 + .1;
	yspeed = (float)(random() % MAX_Y_SPEED) / 10.0 + .1;

	xpos = random() % (int)(sizeOfAquar.width-WIDTH);
	ypos = random() % (int)(sizeOfAquar.height-HEIGHT);


	direction = direction ^ (random() % 2) ? RIGHT : LEFT;
	direction = direction ^ (random() % 2) ? UP : DOWN;
	
	if ((direction & LEFT) == LEFT) [self changeXDirection];

	return self;
}

-(float)getXPos 
{
	if ((direction & LEFT) == LEFT) {
		if (xpos < 0.0) {
			xpos = 0.0;
			[self changeXDirection];
			return (xpos += xspeed);
		} else {
			return (xpos -= xspeed);
		}
	} else {
		if (xpos > (sizeOfAquar.width - (WIDTH + (MAX_X_SPEED/2)))) {
			xpos = sizeOfAquar.width - (WIDTH + (MAX_X_SPEED/2));
			[self changeXDirection];
			return (xpos -= xspeed);
		} else {
			return (xpos += xspeed);
		}
	}
	return xpos;
}

-(float)getYPos
{
	if ((direction & DOWN) == DOWN) {
		if (ypos < 0.0) {
			ypos = 0.0;
			[self changeYDirection];
		} else {
			return (ypos -= yspeed);
		}
	} else {
		if (ypos > (sizeOfAquar.height - (HEIGHT + (MAX_Y_SPEED/2)))) {
			ypos = sizeOfAquar.height - (HEIGHT + (MAX_Y_SPEED/2));
			[self changeYDirection];
		} else {
			return (ypos += yspeed);
		}
	}
	return ypos;
}

-(float)getXSpeed 
{
	return xspeed;
}

-(float)getYSpeed
{
	return yspeed;
}

-(float)getAngle 
{
	return angle;
}

-(int)getDirection 
{
	return direction;
}

-viewDidResize:(NXSize *)newSize
{
	sizeOfAquar = *newSize;
	return self;
}

-(NXPoint)getCurrentPoint 
{
	NXPoint tmp;

	tmp.x = xpos;
	tmp.y = ypos;
	return tmp;
}

@end

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