ftp.nice.ch/pub/next/tools/screen/backspace/more3.0Views.tar.gz#/more3.0Views/Swarm/SwarmView.h

This is SwarmView.h in view mode; [Download] [Up]

/*

SwarmView.h

Define the SwarmView class and it's instance variables.

The number of instance variables is minimizes - until
there are controls to modify the constants, there
is no reason to have them in, and can often prevent gratuitous
subclassing.

Original Version: Kurt Werle

Mod Dec 16 1991, Scott Byer - took out many instance variables, added
   array pointers for the encoded user path coodinates and ops.  Made
   a straight subclass of View, not of BackView.
   
*/

#import <appkit/View.h>
#import "Thinker.h"

// Constants
#define TRUE 1
#define FALSE 0

#define BEES		75		/* Initial number of bees */
#define MAXBEES 	500		/* maximum number of bees */
#define BEEACC		3		/* Max bee acceleration - odd integer. */
#define WASPACC 	7		/* Max wasp acceleration - odd integer. */
#define BEEVEL		15		/* Max bee velocity - odd integer. */
#define WASPVEL 	9  		/* Max wasp velocity - odd integer. */
#define BORDER		50		/* Border within the screen boundaries for wasp. */

#define COORDS			(MAXBEES+1)

#define VIEW_WIDTH		((int)bounds.size.width)
#define VIEW_HEIGHT		((int)bounds.size.height)

/* 

Coordinate holding structure that can be passed directly into 
DPSDoUserPath, and the macros for accessing them when doing the 
calculations. 

*/
typedef	int		DrawCds[COORDS][2][2];
typedef	int		BBox[4];

#define	COORDS_SIZE	(sizeof(DrawCds) / sizeof(int))
#define BBOX_SIZE	(sizeof(BBox) / sizeof(int))

#define DRAW_BASE	(drawCds)
#define ERASE_BASE	(eraseCds)

#define WX(t)	((*drawCds)[0][(t)][0])		/* addressing into dynamic array */
#define WY(t)	((*drawCds)[0][(t)][1])		/* addressing into dynamic array */

#define OWX(t)	((*eraseCds)[0][(t)][0])	/* addressing into dynamic array */
#define OWY(t)	((*eraseCds)[0][(t)][1])	/* addressing into dynamic array */

#define WXV		(xv[0])
#define WYV		(yv[0])

#define X(t,b)	((*drawCds)[(b)][(t)][0])	/* addressing into dynamic array */
#define Y(t,b)	((*drawCds)[(b)][(t)][1])	/* addressing into dynamic array */

#define OX(t,b)	((*eraseCds)[(b)][(t)][0])	/* addressing into dynamic array */
#define OY(t,b)	((*eraseCds)[(b)][(t)][1])	/* addressing into dynamic array */

#define RAND(v)	((random() % v) - (v/2)) 	/* random number around 0 */

/* For bounding box calculations. */
#define MINMAX(val, min, max)	if (val < (min)) (min) = val; \
				  			    if (val > (max)) (max) = val

#define RESET_BBOX			(*drawBBox)[0] = VIEW_WIDTH; \
							(*drawBBox)[1] = VIEW_HEIGHT; \
							(*drawBBox)[2] = 0; \
							(*drawBBox)[3] = 0
							
#define BUMP_BBOX(xVal, yVal)	MINMAX(xVal, (*drawBBox)[0], (*drawBBox)[2]); \
								MINMAX(yVal, (*drawBBox)[1], (*drawBBox)[3])

		
/* Macros for copying the draw coordinaes into the erase coordinates. */
#define COPY_CDS	{ register DrawCds *temp = drawCds; \
					  drawCds = eraseCds ; eraseCds = temp; }
					
#define COPY_BBOX	{ register BBox *temp = drawBBox; \
					  drawBBox = eraseBBox;	eraseBBox = temp; }
					
@interface SwarmView:View
{
int		stage;					/* Count up until init time. */
int		bees;					/* Current number of bees. */
int		cursorwasp;				/* Use the cursor as wasp position? */

// Bee tracking and display.
DrawCds	spaceOne;				/* Space to hold coordinates. */
DrawCds	spaceTwo;
DrawCds *drawCds;				/* Pointer that is actually used. */
DrawCds *eraseCds;

int		xv[COORDS];				/* Bee velocities, x direction. */
int		yv[COORDS];				/* Bee velocities, y direction. */

BBox	bboxOne;				/* Space to hold bbox. */
BBox	bboxTwo;
BBox	*drawBBox;				/* Pointer that is actually used. */
BBox	*eraseBBox;

char	ops[COORDS * 2];		/* Storage for operator array. */

// Outlets into preferences window.
id		inspectorPanel;			// Preferences Window
id		beeText;				// Number of Bees
id		slider; 				// Slider that reflects the number of bees.
}

- initFrame:(const NXRect *)frameRect;
- initSwarmView;
- initValues;

- (BOOL)ignoreMouseMovement;
- (const char *)windowTitle;

- inspector: sender;

- oneStep;
- drawSelf:(const NXRect *)rects :(int)rectCount;

- setNumberBees: sender;
- setFollow: sender;

@end

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