This is SpaceGen.m in view mode; [Download] [Up]
#import "SpaceGen.h"
@implementation SpaceGen
extern BOOL pauseState;
- newSize:(NXSize *)s
{
int i;
STAR *p;
mySize = *s;
for (i=0; i<NSTARS; i++)
{
p = &stars[i];
p->position.origin.x = randBetween(0.0, mySize.width);
p->position.origin.y = randBetween(0.0, mySize.height);
p->position.size.width = 2.0;
p->position.size.height = 1.0;
p->distance = ((i%4) ? randBetween(1, 4) : 1.0);
//
p->display.size = p->position.size;
p->display.origin.x = floor(p->position.origin.x);
p->display.origin.y = floor(p->position.origin.y);
w[i] = b[i] = p->display;
}
return self;
}
- oneStep
{
int i;
NXRect *t;
STAR *p;
xv = gx - oldX; yv = gy - oldY;
oldX = gx; oldY = gy;
for (i=0; i<NSTARS; i++)
{
p = &stars[i];
b[i] = p->display;
if (p->distance == 1.0)
{
p->position.origin.x -= xv;
p->position.origin.y -= yv;
}
else
{
p->position.origin.x -= xv/p->distance;
p->position.origin.y -= yv/p->distance;
}
if (p->position.origin.x < 0)
p->position.origin.x += mySize.width;
else if (p->position.origin.x > mySize.width)
p->position.origin.x -= mySize.width;
if (p->position.origin.y < 0)
p->position.origin.y += mySize.height;
else if (p->position.origin.y > mySize.height)
p->position.origin.y -= mySize.height;
p->display.size = p->position.size;
p->display.origin.x = floor(p->position.origin.x);
p->display.origin.y = floor(p->position.origin.y);
w[i] = p->display;
}
PSsetgray(NX_BLACK);
NXRectFillList(b, NSTARS);
PSsetgray(NX_WHITE);
NXRectFillList(w, NSTARS);
t=b; b=w; w=t;
return self;
}
- activate:sender :(int)tag
{
NXSize tsize = {1,1};
[super activate:sender :tag];
[self reinitWithImage:"ship"
frameSize:&tsize
numFrames:1
shape: NOSHAPE
alliance: NEUTRAL
radius: 1
buffered: NO
x: -1000000
y: -1000000
theta: 0
vel: 0
interval: 1000000
distToCorner: &tsize];
b=r1;
w=r2;
return self;
}
- scheduleDrawing
{
return self;
}
- draw
{
if (pauseState == 0) return self;
PSsetgray(NX_WHITE);
NXRectFillList(w, NSTARS);
return self;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.