project_files/frontlib/model/map.c
author Medo <smaxein@googlemail.com>
Fri, 15 Jun 2012 19:57:25 +0200
changeset 7230 240620f46dd7
parent 7224 5143861c83bd
child 7271 5608ac657362
permissions -rw-r--r--
Changed frontlib to use the existing ini file formats of the QtFrontend

#include "map.h"

#include "../util/inihelper.h"
#include "../util/util.h"
#include "../util/logging.h"
#include "../util/refcounter.h"

#include <stdlib.h>

static void flib_map_destroy(flib_map *map) {
	if(map) {
		free(map->drawData);
		free(map->name);
		free(map->theme);
		free(map);
	}
}

flib_map *flib_map_create_regular(const char *theme, int templateFilter) {
	flib_map *result = NULL;
	if(!theme) {
		flib_log_e("null parameter in flib_map_create_regular");
	} else {
		flib_map *newmap = flib_calloc(1, sizeof(flib_map));
		if(newmap) {
			newmap->_referenceCount = 1;
			newmap->mapgen = MAPGEN_REGULAR;
			newmap->templateFilter = templateFilter;
			newmap->theme = flib_strdupnull(theme);
			if(newmap->theme) {
				result = newmap;
				newmap = NULL;
			}
		}
		flib_map_destroy(newmap);
	}
	return result;
}

flib_map *flib_map_create_maze(const char *theme, int mazeSize) {
	flib_map *result = NULL;
	if(!theme) {
		flib_log_e("null parameter in flib_map_create_maze");
	} else {
		flib_map *newmap = flib_calloc(1, sizeof(flib_map));
		if(newmap) {
			newmap->_referenceCount = 1;
			newmap->mapgen = MAPGEN_MAZE;
			newmap->mazeSize = mazeSize;
			newmap->theme = flib_strdupnull(theme);
			if(newmap->theme) {
				result = newmap;
				newmap = NULL;
			}
		}
		flib_map_destroy(newmap);
	}
	return result;
}

flib_map *flib_map_create_named(const char *name) {
	flib_map *result = NULL;
	if(!name) {
		flib_log_e("null parameter in flib_map_create_named");
	} else {
		flib_map *newmap = flib_calloc(1, sizeof(flib_map));
		if(newmap) {
			newmap->_referenceCount = 1;
			newmap->mapgen = MAPGEN_NAMED;
			newmap->name = flib_strdupnull(name);
			if(newmap->name) {
				result = newmap;
				newmap = NULL;
			}
		}
		flib_map_destroy(newmap);
	}
	return result;
}

flib_map *flib_map_create_drawn(const char *theme, const uint8_t *drawData, int drawDataSize) {
	flib_map *result = NULL;
	if(!theme || !drawData) {
		flib_log_e("null parameter in flib_map_create_named");
	} else {
		flib_map *newmap = flib_calloc(1, sizeof(flib_map));
		if(newmap) {
			newmap->_referenceCount = 1;
			newmap->mapgen = MAPGEN_DRAWN;
			newmap->drawData = flib_bufdupnull(drawData, drawDataSize);
			newmap->drawDataSize = drawDataSize;
			if(newmap->drawData) {
				result = newmap;
				newmap = NULL;
			}
		}
		flib_map_destroy(newmap);
	}
	return result;
}

flib_map *flib_map_retain(flib_map *map) {
	if(map) {
		flib_retain(&map->_referenceCount, "flib_map");
	}
	return map;
}

void flib_map_release(flib_map *map) {
	if(map && flib_release(&map->_referenceCount, "flib_map")) {
		flib_map_destroy(map);
	}
}