This is Fly.m in view mode; [Download] [Up]
#import "Fly.h"
#import "FlyCommon.h"
#import "FlyFuncs.h"
#import <stdio.h>
@implementation Fly
- init
{
long raw;
[super init];
head = random() % kMaxDir;
raw = random() % kMaxSpeed;
speed = (raw == 0) ? 1 : raw;
firstState = YES;
isSplat = NO;
NXSetSize(&(cell.size), kFlyCellWidth, kFlyCellHeight);
[self setCellRect];
return self;
}
- free
{
return [super free];
}
- setFlyImage:(NXImage *)image
{
fly = image;
return self;
}
- setGutsImage:(NXImage *)image
{
guts = image;
return self;
}
- setMaskImage:(NXImage *)image
{
mask = image;
return self;
}
- setSplatSnd:(Sound *)snd
{
splat = snd;
return self;
}
- setCellRect
{
cell.origin.x = head * kFlyCellWidth;
cell.origin.y = (firstState) ? kStateOffset : kStateBase;
return self;
}
- setHeading:(long)h
{
head = h;
return self;
}
- setSpeedValue:(float)s
{
speed = s;
return self;
}
- setPeriod:(long)period
{
statePeriod = period;
return self;
}
- setPosition:(NXPoint)p
{
pos = p;
return self;
}
- setState:(BOOL)state
{
firstState = state;
return self;
}
- setNoTurn:(long)nt andLeftTurn:(long)lt
{
noTurn = nt;
leftTurn = lt;
return self;
}
- toggleSplat:(BOOL)splatted
{
isSplat = splatted;
return self;
}
- (NXPoint *)position
{
return(&pos);
}
- (long)heading
{
return(head);
}
- (float)speed
{
return(speed);
}
- (BOOL)isFirstState
{
return(firstState);
}
- (long)statePeriod
{
return(statePeriod);
}
- (long)noTurn
{
return(noTurn);
}
- (long)leftTurn
{
return(leftTurn);
}
- (BOOL)isSplat
{
return(isSplat);
}
- doSplat
{
[splat play];
[self drawGuts];
[self toggleSplat:YES];
return self;
}
- drawFly
{
[fly composite:NX_SOVER fromRect:&cell toPoint:&pos];
return self;
}
- eraseFly
{
[mask composite:NX_SOVER fromRect:&cell toPoint:&pos];
return self;
}
- drawGuts
{
gutsPos = pos;
gutsPos.x -= (kGutsImageWidth - (kFlyCellWidth+1)) / 2 ;
gutsPos.y -= (kGutsImageHeight - (kFlyCellHeight+1)) / 2;
[guts composite:NX_SOVER toPoint:&gutsPos];
return self;
}
- eraseGuts
{
PSsetgray(kBackgroundGray);
PSrectfill(gutsPos.x, gutsPos.y, kGutsImageWidth, kGutsImageHeight);
return self;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.