This is KeyTimer.m in view mode; [Download] [Up]
#import "KeyTimer.h"
@implementation KeyTimer
- setTag:(int)atag
{
tag = atag;
return self;
}
- setDelegate:dude
{
delegate = dude;
return self;
}
- keyDownAt:(long)time
{
[delegate cancelAt:time from:self];
keyDown = YES;
beganThisFrame = YES;
keyVbl = time;
downEntireFrame = NO;
return self;
}
- keyUpAt:(long)time
{
keyDown = NO;
if (beganThisFrame)
{ float interval = (time-keyVbl);
if (interval <= 0) interval = 0.5;
keyVal += interval / 7.0; // 7 vbl's per "normal" iteration
}
else keyVal += timeScale * 0.25; // guess...
beganThisFrame = NO;
downEntireFrame = NO;
return self;
}
- preOneStep
{
if (keyDown)
{
if (downEntireFrame) keyVal = timeScale;
else keyVal += .5 * timeScale; // beganThisFrame, guess...
downEntireFrame = YES; // unless we hear otherwise
}
if (keyVal > timeScale) keyVal = timeScale;
else if (keyVal < 0) keyVal = 0;
return self;
}
- postOneStep
{
keyVal = 0;
beganThisFrame = NO;
return self;
}
- (float)val
{
return keyVal;
}
- cancelAt:(long)time from:sender
{
if (keyDown) [self keyUpAt:time];
return self;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.