summaryrefslogtreecommitdiff
path: root/src/publicServer.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/publicServer.c')
-rw-r--r--src/publicServer.c109
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();
+}