This is GKCollisionGroup.m in view mode; [Download] [Up]
#import <gamekit/gamekit.h>
@implementation GKCollisionGroup
- init
{
id ret = [super init];
actorLists[0] = [[List alloc] init];
actorLists[1] = [[List alloc] init];
collisionDetector = [GKCollider new];
delegate = nil;
return ret;
}
- (int)tag { return tag; }
- setTag:(int)anInt { tag = anInt; return self; }
- addActor:anActor toList:(int)number
{
return [actorLists[number] addObjectIfAbsent:anActor];
}
- removeActor:anActor fromList:(int)number
{
return [actorLists[number] removeObject:anActor];
}
- delegate { return delegate; }
- setDelegate:anObject { delegate = anObject; return self; }
- calculateCollisions:sender
{ // This algorithm is n*m (i.e. n^2) so don't make both lists large!!!
int i, j;
for (i=0; i<[actorLists[0] count]; i++) {
id actor1 = [actorLists[0] objectAt:i];
for (j=0; j<[actorLists[1] count]; j++) {
id actor2 = [actorLists[1] objectAt:j];
if ([collisionDetector object:actor1 collidesWith:actor2]) {
// notify the actors...
[actor1 collidedWith:actor2];
[actor2 collidedWith:actor1];
if ([delegate respondsTo:@selector(actor:collidedWith:)])
[delegate actor:actor1 collidedWith:actor2];
}
}
}
return self;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.