diff options
| author | oroborus <oroborus@0ee4d065-81f0-4d1e-b06c-ff20ad07cc3e> | 2008-03-25 21:23:08 +0000 |
|---|---|---|
| committer | oroborus <oroborus@0ee4d065-81f0-4d1e-b06c-ff20ad07cc3e> | 2008-03-25 21:23:08 +0000 |
| commit | ca324c005d511752b2bcdc21fdc7d6c46597469b (patch) | |
| tree | 050b5b836f26390ef44f67a2208fe47c161e8b62 /src/arena.c | |
| parent | 6d43cfd6df88e1b6e94c63f9e8e9eb6775bdbf42 (diff) | |
- drobne upravy v kode
- vymazanie duplivitneho kodu pri "hre s GUI" a "public serverom"
git-svn-id: http://opensvn.csie.org/tuxanci_ng@36 0ee4d065-81f0-4d1e-b06c-ff20ad07cc3e
Diffstat (limited to 'src/arena.c')
| -rw-r--r-- | src/arena.c | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/src/arena.c b/src/arena.c index 7f17f57..5e7d1bf 100644 --- a/src/arena.c +++ b/src/arena.c @@ -10,6 +10,24 @@ #include "shot.h" #include "wall.h" #include "item.h" +#include "teleport.h" +#include "pipe.h" + +#ifndef PUBLIC_SERVER +#include "layer.h" +#endif + +static arena_t *currentArena; + +void setCurrentArena(arena_t *p) +{ + currentArena = p; +} + +arena_t* getCurrentArena() +{ + return currentArena; +} arena_t* newArena() { @@ -31,6 +49,92 @@ arena_t* newArena() return new; } +int conflictSpace(int x1,int y1,int w1,int h1,int x2,int y2,int w2,int h2) +{ + return (x1<x2+w2 && x2<x1+w1 && y1<y2+h2 && y2<y1+h1); +} + +int isFreeSpace(arena_t *arena, int x, int y, int w, int h) +{ + if ( isConflictWithListTux(arena->listTux, x, y, w, h) )return 0; + if ( isConflictWithListWall(arena->listWall, x, y, w, h) )return 0; + if ( isConflictWithListShot(arena->listShot, x, y, w, h) )return 0; + if ( isConflictWithListItem(arena->listItem, x, y, w, h) )return 0; + if ( isConflictWithListTeleport(arena->listTeleport, x, y, w, h) )return 0; + if ( isConflictWithListPipe(arena->listPipe, x, y, w, h) )return 0; + + return 1; +} + +void findFreeSpace(arena_t *arena, int *x, int *y, int w, int h) +{ + int z_x; + int z_y; + + assert( x != NULL ); + assert( y != NULL ); + + do{ + z_x = random() % WINDOW_SIZE_X; + z_y = random() % (WINDOW_SIZE_Y-200); + }while( isFreeSpace(arena, z_x, z_y ,w ,h) == 0 ); + + *x = z_x; + *y = z_y; +} + +#ifndef PUBLIC_SERVER + +void drawArena(arena_t *arena) +{ + tux_t *tux = NULL; + + addLayer(arena->background, 0, 0, 0, 0, WINDOW_SIZE_X, WINDOW_SIZE_Y, -100); + + drawListTux(arena->listTux); + drawListWall(arena->listWall); + drawListTeleport(arena->listTeleport); + drawListPipe(arena->listPipe); + drawListShot(arena->listShot); + drawListItem(arena->listItem); + +/* + tux = getControlTux( TUX_CONTROL_KEYBOARD_RIGHT ); +*/ + + if( tux == NULL ) + { + drawLayerCenter(WINDOW_SIZE_X/2, WINDOW_SIZE_Y/2); + } + else + { + drawLayerCenter(tux->x, tux->y); + } +} + +#endif + +void eventArena(arena_t *arena) +{ + int i; + + eventConflictTuxWithTeleport(arena->listTux, arena->listTeleport); + eventConflictTuxWithShot(arena->listTux, arena->listShot); + + for( i = 0 ; i < 4 ; i++) + { + eventMoveListShot(arena->listShot); + eventConflictShotWithWall(arena->listWall, arena->listShot); + eventConflictShotWithTeleport(arena->listTeleport, arena->listShot); + eventConflictShotWithPipe(arena->listPipe, arena->listShot); + eventConflictShotWithItem(arena->listItem, arena->listShot); + } + + eventListItem(arena->listItem); + + eventListTux(arena->listTux); +} + void destroyArena(arena_t *p) { destroyListItem(p->listTux, destroyTux); |