diff options
| author | oroborus <oroborus@0ee4d065-81f0-4d1e-b06c-ff20ad07cc3e> | 2008-03-15 18:35:48 +0000 |
|---|---|---|
| committer | oroborus <oroborus@0ee4d065-81f0-4d1e-b06c-ff20ad07cc3e> | 2008-03-15 18:35:48 +0000 |
| commit | b84b59153c587248ca8a6a94a6d93977e851233f (patch) | |
| tree | e13b33f09ee6ac130bb6045626618b1c5fc4d787 /src/publicServer.c | |
| parent | 6038f9434f1eb40caf7992ece9a3972e95a9fc11 (diff) | |
- moznost skompilovat public server bez GUI ( pomocou Makefile-publicServer )
port sa nastavuje ako ./publicserver --port <port>
- jeto iba prvotna verzia treba to este odladit a zostabilnit
git-svn-id: http://opensvn.csie.org/tuxanci_ng@18 0ee4d065-81f0-4d1e-b06c-ff20ad07cc3e
Diffstat (limited to 'src/publicServer.c')
| -rw-r--r-- | src/publicServer.c | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/src/publicServer.c b/src/publicServer.c new file mode 100644 index 0000000..f76da76 --- /dev/null +++ b/src/publicServer.c @@ -0,0 +1,109 @@ + +#include <stdio.h> +#include <assert.h> + +#include "main.h" +#include "list.h" +#include "tux.h" +#include "wall.h" +#include "teleport.h" +#include "pipe.h" +#include "item.h" +#include "shot.h" +#include "myTimer.h" +#include "arena.h" +#include "arenaFile.h" +#include "proto.h" +#include "publicServer.h" +#include "net_multiplayer.h" + +static int arenaId = 0; +static arena_t *arena; + +arena_t* getWorldArena() +{ + return arena; +} + +void countRoundInc() +{ +} + +void initPublicServer() +{ + initArenaFile(); + initTux(); + initItem(); + initShot(); + initTimer(); + + arena = getArena(arenaId); + addNewItem(arena->listItem, NULL); + + initNetMuliplayer(NET_GAME_TYPE_SERVER, NULL, atoi( getParamElse("--port", "2200") ) ); +} + +int getChoiceArenaId() +{ + return arenaId; +} + +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(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(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(z_x, z_y ,w ,h) == 0 ); + + *x = z_x; + *y = z_y; +} + +void eventPublicServer() +{ + eventConflictTuxWithTeleport(arena->listTux, arena->listTeleport); + eventConflictTuxWithShot(arena->listTux, arena->listShot); + + eventConflictShotWithWall(arena->listWall, arena->listShot); + eventConflictShotWithTeleport(arena->listTeleport, arena->listShot); + eventConflictShotWithPipe(arena->listPipe, arena->listShot); + eventConflictShotWithItem(arena->listItem, arena->listShot); + + eventMoveListShot(arena->listShot); + eventListItem(arena->listItem); + eventListTux(arena->listTux); + eventNetMultiplayer(); + + eventTimer(); +} + +void quitPublicServer() +{ + printf("quit public server\n"); + quitNetMultiplayer(); + destroyArena(arena); + quitTimer(); +} |