diff options
| author | oroborus <oroborus@0ee4d065-81f0-4d1e-b06c-ff20ad07cc3e> | 2008-06-28 16:38:35 +0000 |
|---|---|---|
| committer | oroborus <oroborus@0ee4d065-81f0-4d1e-b06c-ff20ad07cc3e> | 2008-06-28 16:38:35 +0000 |
| commit | 2d776fcd61be168e1ff0ff2e4a5e71835e7cea19 (patch) | |
| tree | 7cf274897bf540d5332d446f583ffd066e4e2e1d /src/base/arenaFile.c | |
| parent | b877ae23ac5d380ab3aa48d7724045cf4883b186 (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.c | 269 |
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); +} + |