+++ /dev/null
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "tilemaze.h"
-#include "mesh.h"
-#include "treestor.h"
-#include "dynarr.h"
-#include "scene.h"
-
-struct object {
- char *name;
- struct g3d_mesh mesh;
-
- void *texels;
- int tex_width, tex_height;
-
- struct object *next;
-};
-
-struct tile {
- char *name;
- struct object *objlist;
-};
-
-struct tilemaze {
- struct tile *tileset;
- int num_tiles;
-
- struct object *objects;
-};
-
-void free_object(struct object *obj);
-
-struct tilemaze *load_tilemaze(const char *fname)
-{
- struct tilemaze *tmz;
-
- if(!(tmz = calloc(sizeof *tmz, 1))) {
- return 0;
- }
- return tmz;
-}
-
-void destroy_tilemaze(struct tilemaze *tmz)
-{
- if(!tmz) return;
-
- free(tmz->tileset);
-
- while(tmz->objects) {
- struct object *o = tmz->objects;
- tmz->objects = tmz->objects->next;
-
- free(o->mesh.varr);
- free(o->mesh.iarr);
- free(o);
- }
-
- free(tmz);
-}
-
-void update_tilemaze(struct tilemaze *tmz)
-{
-}
-
-void draw_tilemaze(struct tilemaze *tmz)
-{
-}
-
-struct tile *load_tileset(const char *fname, int *count)
-{
- int i;
- struct tile *tiles = 0, *tile;
- struct ts_node *ts = 0, *node;
- struct ts_attr *attr;
- struct object *obj;
-
- if(!(ts = ts_load(fname))) {
- fprintf(stderr, "load_tileset: failed to load: %s\n", fname);
- goto err;
- }
- if(strcmp(ts->name, "tileset") != 0) {
- fprintf(stderr, "load_tileset: %s is not a tileset file\n", fname);
- goto err;
- }
-
- if(!(tiles = dynarr_alloc(sizeof *tiles, 0))) {
- fprintf(stderr, "load_tileset: failed to create tiles array\n");
- goto err;
- }
-
- node = ts->child_list;
- while(node) {
- if(strcmp(node->name, "tile") != 0) {
- fprintf(stderr, "load_tileset: skipping unexpected node %s in %s\n", node->name, fname);
- node = node->next;
- continue;
- }
-
- if(!(tile = malloc(sizeof *tile))) {
- fprintf(stderr, "load_tileset: failed to allocate tile\n");
- goto err;
- }
- if(!(tile->name = malloc(strlen(node->name) + 1))) {
- fprintf(stderr, "load_tileset: failed to allocate tile name\n");
- free(tile);
- goto err;
- }
- strcpy(tile->name, node->name);
- tile->objlist = 0;
-
- attr = node->attr_list;
- while(attr) {
- /*
- if(strcmp(attr->name, "scn") == 0) {
- struct object *last;
- if(!(obj = load_objlist(attr->value.str, &last))) {
- free(tile);
- goto err;
- }
- last->next = tile->objlist;
- tile->objlist = obj;
- }
- */
- attr = attr->next;
- }
-
- node = node->next;
- }
-
-err:
- if(tiles) {
- for(i=0; i<dynarr_size(tiles); i++) {
- free(tiles[i].name);
- obj = tiles[i].objlist;
- while(obj) {
- struct object *tmp = obj;
- obj = obj->next;
- free_object(obj);
- }
- }
- dynarr_free(tiles);
- }
- if(ts) ts_free_tree(ts);
- return 0;
-}
-
-void free_object(struct object *obj)
-{
- if(!obj) return;
-
- free(obj->name);
- free(obj->texels);
- destroy_mesh(&obj->mesh);
-
- free(obj);
-}