author | Wuzzy <Wuzzy2@mail.ru> |
Sun, 22 Oct 2017 00:48:38 +0200 | |
changeset 12736 | 7cbb0241d31c |
parent 10017 | de822cd3df3a |
permissions | -rw-r--r-- |
/* * Hedgewars, a free turn based strategy game * Copyright (C) 2012 Simeon Maxein <smaxein@googlemail.com> * * 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 <stdlib.h> 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); } }