diff -r ddcdedd3330b -r 2bc61f8841a1 project_files/frontlib/model/map.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/project_files/frontlib/model/map.c Sun Oct 28 15:12:37 2012 +0100 @@ -0,0 +1,110 @@ +/* + * Hedgewars, a free turn based strategy game + * Copyright (C) 2012 Simeon Maxein + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include "map.h" + +#include "../util/inihelper.h" +#include "../util/util.h" +#include "../util/logging.h" + +#include + +flib_map *flib_map_create_regular(const char *seed, const char *theme, int templateFilter) { + if(log_badargs_if2(seed==NULL, theme==NULL)) { + return NULL; + } + flib_map newmap = {0}; + newmap.mapgen = MAPGEN_REGULAR; + newmap.name = "+rnd+"; + newmap.seed = (char*)seed; + newmap.theme = (char*)theme; + newmap.templateFilter = templateFilter; + return flib_map_copy(&newmap); +} + +flib_map *flib_map_create_maze(const char *seed, const char *theme, int mazeSize) { + if(log_badargs_if2(seed==NULL, theme==NULL)) { + return NULL; + } + flib_map newmap = {0}; + newmap.mapgen = MAPGEN_MAZE; + newmap.name = "+maze+"; + newmap.seed = (char*)seed; + newmap.theme = (char*)theme; + newmap.mazeSize = mazeSize; + return flib_map_copy(&newmap); +} + +flib_map *flib_map_create_named(const char *seed, const char *name) { + if(log_badargs_if2(seed==NULL, name==NULL)) { + return NULL; + } + flib_map newmap = {0}; + newmap.mapgen = MAPGEN_NAMED; + newmap.name = (char*)name; + newmap.seed = (char*)seed; + return flib_map_copy(&newmap); +} + +flib_map *flib_map_create_drawn(const char *seed, const char *theme, const uint8_t *drawData, size_t drawDataSize) { + if(log_badargs_if3(seed==NULL, theme==NULL, drawData==NULL)) { + return NULL; + } + flib_map newmap = {0}; + newmap.mapgen = MAPGEN_DRAWN; + newmap.name = "+drawn+"; + newmap.seed = (char*)seed; + newmap.theme = (char*)theme; + newmap.drawData = (uint8_t*) drawData; + newmap.drawDataSize = drawDataSize; + return flib_map_copy(&newmap); +} + +flib_map *flib_map_copy(const flib_map *map) { + flib_map *result = NULL; + if(map) { + flib_map *newmap = flib_calloc(1, sizeof(flib_map)); + if(newmap) { + newmap->mapgen = map->mapgen; + newmap->drawDataSize = map->drawDataSize; + newmap->drawData = flib_bufdupnull(map->drawData, map->drawDataSize); + newmap->mazeSize = map->mazeSize; + newmap->name = flib_strdupnull(map->name); + newmap->seed = flib_strdupnull(map->seed); + newmap->templateFilter = map->templateFilter; + newmap->theme = flib_strdupnull(map->theme); + if((newmap->drawData || !map->drawData) && (newmap->name || !map->name) && (newmap->seed || !map->seed) && (newmap->theme || !map->theme)) { + result = newmap; + newmap = NULL; + } + } + flib_map_destroy(newmap); + } + return result; +} + +void flib_map_destroy(flib_map *map) { + if(map) { + free(map->seed); + free(map->drawData); + free(map->name); + free(map->theme); + free(map); + } +}