|
SDLGameEngine
|
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