summaryrefslogtreecommitdiff
path: root/src/base/arenaFile.c
diff options
context:
space:
mode:
authororoborus <oroborus@0ee4d065-81f0-4d1e-b06c-ff20ad07cc3e>2008-06-28 16:38:35 +0000
committeroroborus <oroborus@0ee4d065-81f0-4d1e-b06c-ff20ad07cc3e>2008-06-28 16:38:35 +0000
commit2d776fcd61be168e1ff0ff2e4a5e71835e7cea19 (patch)
tree7cf274897bf540d5332d446f583ffd066e4e2e1d /src/base/arenaFile.c
parentb877ae23ac5d380ab3aa48d7724045cf4883b186 (diff)
- prekopanie adresarovej struktury, prva cast
git-svn-id: http://opensvn.csie.org/tuxanci_ng@77 0ee4d065-81f0-4d1e-b06c-ff20ad07cc3e
Diffstat (limited to 'src/base/arenaFile.c')
-rw-r--r--src/base/arenaFile.c269
1 files changed, 269 insertions, 0 deletions
diff --git a/src/base/arenaFile.c b/src/base/arenaFile.c
new file mode 100644
index 0000000..9fe683e
--- /dev/null
+++ b/src/base/arenaFile.c
@@ -0,0 +1,269 @@
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+#include "base/main.h"
+#include "base/list.h"
+#include "base/textFile.h"
+#include "base/arenaFile.h"
+#include "base/arena.h"
+#include "base/tux.h"
+#include "base/shot.h"
+#include "base/item.h"
+#include "base/director.h"
+#include "base/modules.h"
+
+#ifndef PUBLIC_SERVER
+#include "client/configFile.h"
+#include "client/image.h"
+#include "audio/music.h"
+#endif
+
+static list_t *listArenaFile;
+
+static bool_t isArenaFileInit = FALSE;
+
+bool_t isAreaFileInicialized()
+{
+ return isArenaFileInit;
+}
+
+int getArenaValue(char *line, char *env, char *val, int len)
+{
+ char *offset_env;
+ char *offset_val_begin;
+ char *offset_val_end;
+ char clone_env[STR_SIZE];
+ int val_len;
+
+ strcpy(clone_env, " ");
+ strcat(clone_env, env);
+
+ offset_env = strstr(line, clone_env);
+ if( offset_env == NULL )return -1;
+
+ offset_val_begin = strchr(offset_env, '"');
+ if( offset_val_begin == NULL )return -1;
+
+ offset_val_end = strchr(offset_val_begin+1, '"');
+ if( offset_val_end == NULL )return -1;
+
+ val_len = (int)(offset_val_end - ( offset_val_begin + 1) );
+ if( val_len > len - 1 ) val_len = len - 1;
+
+ memset(val, 0, len);
+ memcpy(val, offset_val_begin+1, val_len);
+
+ return 0;
+}
+
+
+static void cmd_arena(arena_t **arena, char *line)
+{
+ char str_image[STR_SIZE];
+ char str_w[STR_SIZE];
+ char str_h[STR_SIZE];
+
+ if( getArenaValue(line, "background", str_image, STR_SIZE) != 0 )return;
+ if( getArenaValue(line, "w", str_w, STR_SIZE) != 0 )return;
+ if( getArenaValue(line, "h", str_h, STR_SIZE) != 0 )return;
+
+ (*arena) = newArena(atoi(str_w), atoi(str_h));
+#ifndef PUBLIC_SERVER
+ (*arena)->background = getImage(IMAGE_GROUP_USER, str_image);
+#endif
+ //(*arena)->w = atoi(str_w);
+ //(*arena)->h = atoi(str_h);
+ setCurrentArena(*arena);
+ printf("new arena\n");
+}
+
+static void cmd_loadModule(char *line)
+{
+ char str_file[STR_SIZE];
+
+ if( getArenaValue(line, "file", str_file, STR_SIZE) != 0 )return;
+
+ loadModule(str_file);
+}
+
+#ifndef PUBLIC_SERVER
+
+static void cmd_loadImage(char *line)
+{
+ char str_file[STR_SIZE];
+ char str_name[STR_SIZE];
+ char str_alpha[STR_SIZE];
+
+ if( getArenaValue(line, "file", str_file, STR_SIZE) != 0 )return;
+ if( getArenaValue(line, "name", str_name, STR_SIZE) != 0 )return;
+ if( getArenaValue(line, "alpha", str_alpha, STR_SIZE) != 0 )return;
+
+ addImageData(str_file, isYesOrNO(str_alpha), str_name, IMAGE_GROUP_USER);
+}
+
+static void cmd_loadMusic(char *line)
+{
+ char str_file[STR_SIZE];
+ char str_name[STR_SIZE];
+
+ if( getArenaValue(line, "file", str_file, STR_SIZE) != 0 )return;
+ if( getArenaValue(line, "name", str_name, STR_SIZE) != 0 )return;
+
+#ifndef NO_SOUND
+ addMusic(str_file, str_name, MUSIC_GROUP_USER);
+#endif
+}
+
+static void cmd_playMusic(arena_t *arena, char *line)
+{
+ char str_music[STR_SIZE];
+
+ if( getArenaValue(line, "music", str_music, STR_SIZE) != 0 )return;
+
+ strcpy(arena->music, str_music);
+}
+
+#endif
+
+int getArenaCount()
+{
+ return listArenaFile->count;
+}
+
+static char *getArenaStatus(int id, char *s)
+{
+ textFile_t *ts;
+ int len;
+ int i;
+
+ ts = (textFile_t *) listArenaFile->list[id];
+ len = strlen(s);
+
+ for( i = 0 ; i < ts->text->count ; i++ )
+ {
+ char *line;
+ line = (char *) (ts->text->list[i]);
+
+ if( strncmp(line, s, len) == 0 )
+ {
+ return line+len+1;
+ }
+ }
+
+ return NULL;
+}
+
+char *getArenaName(int id)
+{
+ char *ret;
+
+ ret = getArenaStatus(id, "name");
+
+ return ( ret != NULL ? ret : "arena_no_name" );
+}
+
+char *getArenaNetName(int id)
+{
+ char *ret;
+
+ ret = getArenaStatus(id, "netName");
+
+ return ( ret != NULL ? ret : "arena_no_net_name" );
+}
+
+int getArenaIdFormNetName(char *s)
+{
+ int i;
+
+ for( i = 0 ; i < listArenaFile->count ; i++ )
+ {
+ if( strcmp(getArenaNetName(i), s) == 0 )
+ {
+ return i;
+ }
+ }
+
+ return -1;
+}
+
+char *getArenaImage(int id)
+{
+ return getArenaStatus(id, "screen");
+}
+
+arena_t* getArena(int id)
+{
+ textFile_t *ts;
+ arena_t *arena;
+ int i;
+
+ ts = (textFile_t *) listArenaFile->list[id];
+
+ for( i = 0 ; i < ts->text->count ; i++ )
+ {
+ char *line;
+ line = (char *) (ts->text->list[i]);
+
+ cmdModule(line);
+
+#ifndef PUBLIC_SERVER
+ if( strncmp(line, "loadImage", 9) == 0 )cmd_loadImage(line);
+ if( strncmp(line, "loadMusic", 9) == 0 )cmd_loadMusic(line);
+ if( strncmp(line, "playMusic", 9) == 0 )cmd_playMusic(arena, line);
+#endif
+
+ if( strncmp(line, "arena", 5) == 0 )cmd_arena(&arena, line);
+ if( strncmp(line, "loadModule", 10) == 0 )cmd_loadModule(line);
+ //if( strncmp(line, "wall", 4) == 0 )cmd_wall(arena, line);
+ //if( strncmp(line, "teleport", 8) == 0 )cmd_teleport(arena, line);
+ //if( strncmp(line, "pipe", 4) == 0 )cmd_pipe(arena, line);
+ }
+
+ return arena;
+}
+
+void initArenaFile()
+{
+ director_t *p;
+ int i;
+
+#ifndef PUBLIC_SERVER
+ assert( isImageInicialized() == TRUE );
+#endif
+
+ isArenaFileInit = TRUE;
+ listArenaFile = newList();
+
+ p = loadDirector(PATH_ARENA);
+
+ for( i = 0 ; i < p->list->count ; i++ )
+ {
+ char *line;
+
+ line = (char *)( p->list->list[i] );
+
+ if( strstr(line, ".map") != NULL && strstr(line, "~") == NULL )
+ {
+ char path[STR_PATH_SIZE];
+
+ sprintf(path, PATH_ARENA "%s", line);
+
+ printf("load map %s\n", line);
+
+ accessExistFile(path);
+ addList(listArenaFile, loadTextFile(path));
+ }
+ }
+
+ destroyDirector(p);
+}
+
+void quitArenaFile()
+{
+ isArenaFileInit = FALSE;
+ destroyListItem(listArenaFile, destroyTextFile);
+}
+