home *** CD-ROM | disk | FTP | other *** search
-
- #import "Spot.h"
- #import "Thinker.h"
- #import <appkit/color.h>
-
- @implementation Spot
-
- // This should return a float between 0 and 1
- float frandom()
- {
- floatE'( = (random() & 0x7fffffff);
- val /= 0x7fffffff;
- return val;
- }
-
- float randBetween(float a, float b)
- {
- float val, scale, t;
-
- if (a > b)
- { t = a; a = b; b = t;
- }
-
- scale = (b-a);
- val = scale * frandom();
- return (a + val);
- }
-
- - init
- {
- float r,g,b;
- srandom(time(0));
- r = frandom();
- g = frandom();
- b = frandom();
- color = NXConvertRGBToColor(r,g,b);
- location.x = randBetween(0,320);
- location.y = randBetween(0,220);
- isValid = YES;
- return self;
- }
-
- - (NXColor) color
- { return color;
- }
-
- - (NXPoint) location
- { return location;
- }
-
- - (BOOL) setLocation:(NXPoint)pnt
- {
- if (!isValid)
- {
- [[NXApp delegate] spotDidChange];
- return NO;
- }
- if (pnt.x < -15) pnt.x = -15;
- else if (pnt.x > 335) pnt.x = 335;
- if (pnt.y < -15) pnt.y = -15;
- else if (pnt.y > 235) pnt.y = 235;
- location = pnt;
-
- [[NXApp delegate] spotDidChange];
- return YES;
- }
-
- - (BOOL) doLock
- {
- if (locked) return NO;
- locked = YES;
- return YES;
- }
-
- - unlock
- {
- locked = NO;
- return self;
- }
-
- - invalidate
- { isValid = NO;
- return nil;
- }
-
- - (BOOL) isValid
- { return isValid;
- }
-
- - encodeRemotelyFor:(NXConnection *)connection
- freeAfterEncoding:(BOOL *)flagp
- isBycopy:(BOOL)isBycopy
- {
- if (isBycopy) return self;
- return [super encodeRemotelyFor:connection
- freeAfterEncoding:flagp
- isBycopy:isBycopy];
- }
-
- - encodeUsing:(id <NXEncoding>)portal
- {
- //xxx should encode valid flag
-
- float r,g,b;
- NXConvertColorToRGB(color, &r, &g, &b);
- [portal encodeData:&location.x ofType:"f"];
- [portal encodeData:&location.y ofType:"f"];
-
- [portal encodeData:&r ofType:"f"];
- [portal encodeData:&g ofType:"f"];
- [portal encodeData:&b ofType:"f"];
-
- return self;
- }
-
- - decodeUsing:(id <NXDecoding>)portal
- {
- float r,g,b;
- NXPoint p;
- NXColor c;
-
- [portal decodeData:&p.x ofType:"f"];
- [portal decodeData:&p.y ofType:"f"];
-
- [portal decodeData:&r ofType:"f"];
- [portal decodeData:&g ofType:"f"];
- [portal decodeData:&b ofType:"f"];
-
- c = NXConvertRGBToColor(r,g,b);
-
- // [self init]; //not really necessary in this case...
- color = c;
- location = p;
-
- return self;
- }
-
- - (unsigned) references
- {
- return refs;
- }
-
- - addReference
- {
- refs++;
- // printf("Spot: adding reference, refs = %d\n",(int)refs);
- return self;
- }
-
- - free
- {
- refs--;
- // printf("Spot: decrementing reference, refs = %d\n", (int)refs);
- if (refs > 0) return self;
-
- // printf("Spot: ...and freeing\n");
-
- // this cleans up remoteE')nections that still have refs to theSpot
- [NXConnection removeObject:self];
-
- return [super free];
- }
-
- @end
-
-
-