ftp.nice.ch/pub/next/developer/objc/gamekit/gamekit_future.s.tar.gz#/gamekit_future/gamekit-1/GKCollisionGroup.m

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.