home *** CD-ROM | disk | FTP | other *** search
/ NeXTSTEP 3.0 / NeXTSTEP3.0.iso / NextDeveloper / Examples / DistributedObjects / remoteSpot / Spot.m < prev    next >
Text File  |  1992-07-24  |  3KB  |  167 lines

  1.  
  2. #import "Spot.h"
  3. #import "Thinker.h"
  4. #import <appkit/color.h>
  5.  
  6. @implementation Spot
  7.  
  8. // This should return a float between 0 and 1
  9. float frandom()
  10. {
  11.     floatE'( = (random() & 0x7fffffff);
  12.     val /= 0x7fffffff;
  13.     return val;
  14. }
  15.  
  16. float randBetween(float a, float b)
  17. {
  18.     float val, scale, t;
  19.  
  20.     if (a > b)
  21.     {    t = a; a = b; b = t;
  22.     }
  23.     
  24.     scale = (b-a);
  25.     val = scale * frandom();
  26.     return (a + val);
  27. }
  28.  
  29. - init
  30. {
  31.     float r,g,b;
  32.     srandom(time(0));
  33.     r = frandom();
  34.     g = frandom();
  35.     b = frandom();
  36.     color = NXConvertRGBToColor(r,g,b);
  37.     location.x = randBetween(0,320);
  38.     location.y = randBetween(0,220);
  39.     isValid = YES;
  40.     return self;
  41. }
  42.  
  43. - (NXColor) color
  44. {    return color;
  45. }
  46.  
  47. - (NXPoint) location
  48. {    return location;
  49. }
  50.  
  51. - (BOOL) setLocation:(NXPoint)pnt
  52. {
  53.     if (!isValid)
  54.     {
  55.         [[NXApp delegate] spotDidChange];
  56.         return NO;
  57.     }
  58.     if (pnt.x < -15) pnt.x = -15;
  59.     else if (pnt.x > 335) pnt.x = 335;
  60.     if (pnt.y < -15) pnt.y = -15;
  61.     else if (pnt.y > 235) pnt.y = 235;
  62.     location = pnt;
  63.  
  64.     [[NXApp delegate] spotDidChange];
  65.     return YES;
  66. }
  67.  
  68. - (BOOL) doLock
  69. {
  70.     if (locked) return NO;
  71.     locked = YES;
  72.     return YES;
  73. }
  74.     
  75. - unlock
  76. {
  77.     locked = NO;
  78.     return self;
  79. }
  80.  
  81. - invalidate
  82. {    isValid = NO;
  83.     return nil;
  84. }
  85.  
  86. - (BOOL) isValid
  87. {    return isValid;
  88. }
  89.  
  90. - encodeRemotelyFor:(NXConnection *)connection
  91.     freeAfterEncoding:(BOOL *)flagp
  92.     isBycopy:(BOOL)isBycopy
  93. {
  94.     if (isBycopy) return self;
  95.     return [super encodeRemotelyFor:connection
  96.                 freeAfterEncoding:flagp
  97.                 isBycopy:isBycopy];
  98. }
  99.  
  100. - encodeUsing:(id <NXEncoding>)portal
  101. {
  102.     //xxx should encode valid flag
  103.  
  104.     float r,g,b;
  105.     NXConvertColorToRGB(color, &r, &g, &b);
  106.     [portal encodeData:&location.x ofType:"f"];
  107.     [portal encodeData:&location.y ofType:"f"];
  108.  
  109.     [portal encodeData:&r ofType:"f"];
  110.     [portal encodeData:&g ofType:"f"];
  111.     [portal encodeData:&b ofType:"f"];
  112.  
  113.     return self;
  114. }
  115.  
  116. - decodeUsing:(id <NXDecoding>)portal
  117. {
  118.     float r,g,b;
  119.     NXPoint p;
  120.     NXColor c;
  121.  
  122.     [portal decodeData:&p.x ofType:"f"];
  123.     [portal decodeData:&p.y ofType:"f"];
  124.  
  125.     [portal decodeData:&r ofType:"f"];
  126.     [portal decodeData:&g ofType:"f"];
  127.     [portal decodeData:&b ofType:"f"];
  128.  
  129.     c = NXConvertRGBToColor(r,g,b);
  130.  
  131.     // [self init];    //not really necessary in this case...
  132.     color = c;
  133.     location = p;
  134.  
  135.     return self;
  136. }
  137.  
  138. - (unsigned) references
  139. {
  140.     return refs;
  141. }
  142.  
  143. - addReference
  144. {
  145.     refs++;
  146. //    printf("Spot: adding reference, refs = %d\n",(int)refs);
  147.     return self;
  148. }
  149.  
  150. - free
  151. {
  152.     refs--;
  153. //    printf("Spot: decrementing reference, refs = %d\n", (int)refs);
  154.     if (refs > 0) return self;
  155.  
  156. //    printf("Spot: ...and freeing\n");
  157.  
  158.     // this cleans up remoteE')nections that still have refs to theSpot
  159.     [NXConnection removeObject:self];
  160.  
  161.     return [super free];
  162. }
  163.  
  164. @end
  165.  
  166.  
  167.