This is BonusTracker.m in view mode; [Download] [Up]
#import <gamekit/gamekit.h> #import <ansi/math.h> #define PUTINBOUNDS if (value < min) value = min; \ if (value > max) value = max @implementation BonusTracker - init { [super init]; min = 0; increment = 0; multiplier = 1; baseValue = 0; max = MAXINT; [self resetBonus]; return self; } - (int)bonusValue { return value; } - setBaseValue:(int)newValue { baseValue = newValue; return self; } - setMultiplier:(int)newMultiplier { multiplier = newMultiplier; return self; } - setIncrement:(int)newIncrement { increment = newIncrement; return self; } - setMin:(int)newMin max:(int)newMax { min = newMin; max = newMax; PUTINBOUNDS; return self; } - resetBonus { value = baseValue; return self; } - advanceBonus // move to the next bonus value. { value *= multiplier; value += increment; PUTINBOUNDS; return self; } - retreatBonus // inverse of above method. { value -= increment; // avoid divide by zero... if (multiplier) value /= multiplier; PUTINBOUNDS; return self; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.