This is Asteroid.m in view mode; [Download] [Up]
#import "Asteroid.h" #import "ActorMgr.h" #import "SoundMgr.h" #import "Xoxeroids.h" #import "Thinker.h" @implementation Asteroid static int lastAsteroidSound; static char *rocks[] = { "ganymede%c", "io%c", "jupiter%c", "rock%c" }; static char rockSize[] = {'B', 'M', 'S'}; static int pointvals[] = {15,25,50}; + initialize { char imagename[30]; int i, j; [super initialize]; for (i=0; i<4; i++) for (j=0; j<3; j++) { sprintf(imagename,rocks[i],rockSize[j]); [[NXApp delegate] addImageResource:imagename for: self]; } return self; } - activate:sender :(int)tag { NXSize tsize = {10,10}; NXSize tsize2 = {10,10}; char imagename[30]; [super activate:sender :tag]; astSize = tag >> 16; astStyle = tag & 0xffff; sprintf(imagename,rocks[astStyle],rockSize[astSize]); image = [self findImageNamed:imagename]; [image getSize:&tsize]; tsize2.width = tsize.width/2; tsize2.height = tsize.height/2; [self reinitWithImage:imagename frameSize:&tsize numFrames:1 shape: CIRCLE alliance: EVIL radius: tsize2.width buffered: YES x: randBetween(gx+xOffset, gx+3*xOffset) y: randBetween(gy+yOffset, gy+3*yOffset) theta: randBetween(0,2*PI) vel: randBetween(2,12) interval: 1000000 distToCorner: &tsize2]; pointValue = pointvals[astSize]; return self; } - positionChanged { [self wrapAtDistance: (2*xOffset) :(2*yOffset)]; return self; } - performCollisionWith:(Actor *) dude { int i; if (timeInMS > (lastAsteroidSound + 80)) { lastAsteroidSound = timeInMS + (timeInMS & 0xf); [soundMgr playSound: (EXP1SND+astSize) at:0.5]; } if (astSize < 2) { Actor *rock; astSize++; for (i=-1; i<=1; i+=2) { rock = [actorMgr newActor:xx_asteroid for:self tag:(astSize<<16 | astStyle)]; rock->theta = theta + i * 10.0 * PI/180.0; rock->vel = vel + randBetween(0,7); [rock moveTo: (x + rock->radius * -sin(rock->theta)) :(y + rock->radius * cos(rock->theta))]; rock->xv = rock->vel * -sin(rock->theta); rock->yv = rock->vel * cos(rock->theta); } } else { [actorMgr newActor:xx_explosion for:self tag:1]; } 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.