GameSource/SpriteColission.c

#include "ZAMProtos.h"
 
 
void CollideSpriteLayer(spriteLayerPtr sprLayer1, spriteLayerPtr sprLayer2)
/*
    VERY Simple colission detection.  A sprite is not checked unless it has
    a callback, so if you have things that can never be collided with,
    don't give them a colission callback.  Layers are collided against each other,
    so sprites in the same layer can never collide.
*/
{
    spritePtr   spr1, spr2;
    Rect        sectArea;
    
    for(spr1 = sprLayer1->sprites; spr1 != nil; spr1 = spr1->next)
        for(spr2 = sprLayer2->sprites; spr2 != nil; spr2 = spr2->next)
            if(spr1->collideHandler || spr2->collideHandler) {
                if( SectRect(&spr1->bounds, &spr2->bounds, &sectArea) ) {
                    /* we have a rectangle colission  - call the handlers if installed */
                    if(spr1->collideHandler)
                        (*spr1->collideHandler)(spr1, spr2, &sectArea);
                    if(spr2->collideHandler)
                        (*spr2->collideHandler)(spr2, spr1, &sectArea);
                }
            }
 
}