SDLGameEngine

src/sgespritegroup.c

00001 /*
00002  * Copyright (c) 2007 Heiko Irrgang
00003  *
00004  * The license and distribution terms for this file may be
00005  * found in the file COPYING in this distribution or at
00006  * http://93-interactive.com/cms/products/software/sdl-game-engine/license/
00007  */
00008 
00009 #include <sge.h>
00010 
00011 SGESPRITEGROUP *sgeSpriteGroupNew(void) {
00012         SGESPRITEGROUP *ret;
00013         sgeNew(ret, SGESPRITEGROUP);
00014         ret->sprite=sgeArrayNew();
00015         return ret;
00016 }
00017 
00018 static void sgeSpriteGroupDestroySpriteHelper(Uint32 id, void *data) {
00019         SGESPRITE *s=(SGESPRITE *)data;
00020         if (s!=NULL) sgeSpriteDestroy(s);
00021 }
00022 
00023 void sgeSpriteGroupDestroy(SGESPRITEGROUP *g) {
00024         sgeArrayForEach(g->sprite, sgeSpriteGroupDestroySpriteHelper);
00025         sgeArrayDestroy(g->sprite);
00026         sgeFree(g);
00027 }
00028 
00029 void sgeSpriteGroupAddSprite(SGESPRITEGROUP *g, SGESPRITE *s) {
00030         sgeArrayAdd(g->sprite,s);
00031 }
00032 
00033 int sgeSpriteGroupCollide(SGESPRITEGROUP *g, SGESPRITEGROUP *cg) {
00034         if (sgeSpriteGroupGetCollider(g,cg)==NULL) return 0;
00035         return 1;
00036 }
00037 
00038 int sgeSpriteGroupCollideSprite(SGESPRITEGROUP *g, SGESPRITE *s) {
00039         if (sgeSpriteGroupGetColliderSprite(g,s)==NULL) return 0;
00040         return 1;
00041 }
00042 
00043 SGESPRITE *sgeSpriteGroupGetCollider(SGESPRITEGROUP *g, SGESPRITEGROUP *cg) {
00044         SGESPRITE *tmpa;
00045         int i;
00046         for (i=0;i<g->sprite->numberOfElements;i++) {
00047                 tmpa=(SGESPRITE *)sgeArrayGet(g->sprite,i);
00048                 if (sgeSpriteGroupCollideSprite(cg, tmpa)) return tmpa;
00049         }
00050         return NULL;
00051 }
00052 
00053 SGESPRITE *sgeSpriteGroupGetColliderSprite(SGESPRITEGROUP *g, SGESPRITE *s) {
00054         SGESPRITE *tmpa;
00055         int i;
00056         for (i=0;i<g->sprite->numberOfElements;i++) {
00057                 tmpa=(SGESPRITE *)sgeArrayGet(g->sprite,i);
00058                 if (sgeSpriteCollide(tmpa,s)) return tmpa;
00059         }
00060         return NULL;
00061 }
00062 
00063 void sgeSpriteGroupDraw(SGESPRITEGROUP *g) {
00064         SGESPRITE *tmpa;
00065         int i;
00066         for (i=0;i<g->sprite->numberOfElements;i++) {
00067                 tmpa=(SGESPRITE *)sgeArrayGet(g->sprite,i);
00068                 sgeSpriteDraw(tmpa, screen);
00069         }
00070 }
00071 
00072 void sgeSpriteGroupDrawRelative(SGESPRITEGROUP *g, int camx, int camy) {
00073         SGESPRITE *tmpa;
00074         int i;
00075         for (i=0;i<g->sprite->numberOfElements;i++) {
00076                 tmpa=(SGESPRITE *)sgeArrayGet(g->sprite,i);
00077                 sgeSpriteDrawXY(tmpa, tmpa->x-camx, tmpa->y-camy, screen);
00078         }
00079 }
00080 
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines