This is ToastersViewClass.m in view mode; [Download] [Up]
/* */ /* Copyright (c) 1991 */ /* Pages / KVM Banzai Research Inst. */ /* 3914 Murphy Cyn Rd. */ /* San Diego, CA 92123 */ /* (619) 492-9050 */ /* */ /* RCS History Section------------------------------------------------------- */ #ifdef RCSID static char _rcsid[] = "$Header$"; #endif /* * $Log$ */ /* RCS History Section------------------------------------------------------- */ /* Description -------------------------------------------------------------- */ /* */ /* This class contains the BackSpace view for the Toasters module, which */ /* was inspired by the "After Dark" module of the same name. */ /* */ /* Nov 14, 1991: Bruce Henderson (bruce@pages.com) */ /* */ /* Description -------------------------------------------------------------- */ #import "ToastersViewClass.h" #import "FlyingImage.h" #import <objc/List.h> #import <appkit/Application.h> #import <appkit/NXImage.h> #import <dpsclient/wraps.h> #import <libc.h> #import <math.h> #define DEF_TOASTERS 15 #define DEF_TOAST 5 #define BIG_RAND 2147483647 @implementation ToastersView - initFrame:(NXRect *)frameRect { int count; NXPoint startPoint = {0.0}; NXPoint maxPoint = {0.0}; id newBeastie; NXSize screen; long rNum; float xOffset; float yOffset; float speed = 0.25; int startFrame; [super initFrame:frameRect]; [self allocateGState]; // For faster lock/unlockFocus [NXApp getScreenSize:&screen]; maxPoint.x = screen.width; maxPoint.y = screen.height; thingies = [[List allocFromZone:[self zone]] init]; for(count = 0; count < DEF_TOAST;count++) { newBeastie = [FlyingImage allocFromZone:[self zone]]; rNum = random(); xOffset = floor(((float)rNum/(float)BIG_RAND) * maxPoint.x); rNum = random(); yOffset = floor(((float)rNum/(float)BIG_RAND) * maxPoint.y); speed = 3.0; startPoint.x = maxPoint.x - xOffset; startPoint.y = maxPoint.y - yOffset; [newBeastie initAtPoint:&startPoint andSpeed:speed isToast:YES for:self]; [thingies addObject:newBeastie]; } for(count = 0; count < DEF_TOASTERS;count++) { newBeastie = [FlyingImage allocFromZone:[self zone]]; rNum = random(); xOffset = floor(((float)rNum/(float)BIG_RAND) * maxPoint.x); rNum = random(); yOffset = floor(((float)rNum/(float)BIG_RAND) * maxPoint.y); rNum = random(); speed = (((float)rNum/(float)BIG_RAND) *3) + 3; if(speed < 3.5) speed = 4.0; startPoint.x = maxPoint.x - xOffset; startPoint.y = maxPoint.y - yOffset; [newBeastie initAtPoint:&startPoint andSpeed:speed isToast:NO for:self]; rNum = random(); startFrame = (int)rint(((float)rNum/(float)BIG_RAND) * 3); [newBeastie setFrame:startFrame]; [thingies addObject:newBeastie]; } return self; } - drawSelf:(const NXRect *)rects :(int)rectCount { if(!rects || !rectCount) return self; PSsetgray(0); NXRectFill(rects); [super drawSelf:rects :rectCount]; [thingies makeObjectsPerform:@selector(display)]; return self; } - oneStep { [window disableFlushWindow]; [thingies makeObjectsPerform:@selector(move)]; [window reenableFlushWindow]; return self; } - (BOOL) useBufferedWindow { return NO; } - verifyNewRect:(NXRect*)newRect for:flapper { NXRect dummyRect; id checkBuzzard; int count,maxThings = [thingies count]; float flapperSpeed = [flapper speed]; float buzzardSpeed; long rNum; float rfloat; for(count=0;count < maxThings;count++) { checkBuzzard = [thingies objectAt:count]; if(checkBuzzard != flapper) { dummyRect = [checkBuzzard targetRect]; if(NXIntersectsRect(&dummyRect, newRect)) { /* undo last changes */ NX_X(newRect) += flapperSpeed; NX_Y(newRect) += flapperSpeed; /* tryMovingDown */ NX_Y(newRect) -= flapperSpeed; if(NXIntersectsRect(&dummyRect, newRect)) { /* undo last changes */ NX_Y(newRect) += flapperSpeed; /* tryMovingUp */ NX_X(newRect) -= flapperSpeed; NX_Y(newRect) += flapperSpeed; if(NXIntersectsRect(&dummyRect, newRect)) { /* undo last changes */ NX_Y(newRect) -= flapperSpeed; NX_X(newRect) += flapperSpeed; /*just match speed */ while(NXIntersectsRect(&dummyRect, newRect)) { NX_X(newRect) += 2.0; } buzzardSpeed = [checkBuzzard speed]; [flapper setSpeed:buzzardSpeed]; NX_X(newRect) -= buzzardSpeed; NX_Y(newRect) -= buzzardSpeed; } } } else { rNum = random(); rfloat = (float)rNum/(float)BIG_RAND; if(rfloat > 0.95) { rNum = random(); rfloat = (((float)rNum/(float)BIG_RAND) *3) + 3; if(rfloat < 3.5) rfloat = 4.0; [flapper setSpeed:rfloat]; } } } } return self; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.