scenefile

annotate src/scene.c @ 2:c15992cedec9

scene
author John Tsiombikas <nuclear@mutantstargoat.com>
date Sun, 15 Jan 2012 08:32:19 +0200
parents
children b30f83409769
rev   line source
nuclear@2 1 #include <stdlib.h>
nuclear@2 2 #include <string.h>
nuclear@2 3 #include "scene.h"
nuclear@2 4 #include "dynarr.h"
nuclear@2 5
nuclear@2 6 struct scenefile {
nuclear@2 7 struct mesh **mesh;
nuclear@2 8 };
nuclear@2 9
nuclear@2 10 int scnfile_init(struct scenefile *scn)
nuclear@2 11 {
nuclear@2 12 if(!(scn->mesh = dynarr_alloc(0, sizeof *scn->mesh))) {
nuclear@2 13 return -1;
nuclear@2 14 }
nuclear@2 15 return 0;
nuclear@2 16 }
nuclear@2 17
nuclear@2 18 void scnfile_destroy(struct scenefile *scn)
nuclear@2 19 {
nuclear@2 20 int i, num_meshes = scnfile_count(scn);
nuclear@2 21
nuclear@2 22 for(i=0; i<num_meshes; i++) {
nuclear@2 23 mesh_destroy(scn->mesh[i]);
nuclear@2 24 free(scn->mesh[i]);
nuclear@2 25 }
nuclear@2 26 dynarr_free(scn->mesh);
nuclear@2 27 }
nuclear@2 28
nuclear@2 29 struct scenefile *scnfile_create(void)
nuclear@2 30 {
nuclear@2 31 struct scenefile *scn;
nuclear@2 32
nuclear@2 33 if(!(scn = malloc(sizeof *scn))) {
nuclear@2 34 return 0;
nuclear@2 35 }
nuclear@2 36 if(scnfile_init(scn) == -1) {
nuclear@2 37 free(scn);
nuclear@2 38 return 0;
nuclear@2 39 }
nuclear@2 40 return scn;
nuclear@2 41 }
nuclear@2 42
nuclear@2 43 void scnfile_free(struct scenefile *scn)
nuclear@2 44 {
nuclear@2 45 scnfile_destroy(scn);
nuclear@2 46 free(scn);
nuclear@2 47 }
nuclear@2 48
nuclear@2 49
nuclear@2 50 int scnfile_add_mesh(struct scenefile *scn, struct mesh *m)
nuclear@2 51 {
nuclear@2 52 void *tmp;
nuclear@2 53 if(!(tmp = dynarr_push(scn->mesh, m))) {
nuclear@2 54 return -1;
nuclear@2 55 }
nuclear@2 56 scn->mesh = tmp;
nuclear@2 57 return 0;
nuclear@2 58 }
nuclear@2 59
nuclear@2 60 int scnfile_load(struct scenefile *scn, const char *fname)
nuclear@2 61 {
nuclear@2 62 return -1; /* TODO */
nuclear@2 63 }
nuclear@2 64
nuclear@2 65 int scnfile_find_mesh(struct scenefile *scn, const char *fname)
nuclear@2 66 {
nuclear@2 67 int i, num = scnfile_count(scn);
nuclear@2 68
nuclear@2 69 for(i=0; i<num; i++) {
nuclear@2 70 if(strcmp(mesh_get_name(scn->mesh[i]), fname) == 0) {
nuclear@2 71 return i;
nuclear@2 72 }
nuclear@2 73 }
nuclear@2 74 return -1;
nuclear@2 75 }
nuclear@2 76
nuclear@2 77 struct mesh *scnfile_mesh(struct scenefile *scn, int idx)
nuclear@2 78 {
nuclear@2 79 if(idx < 0 || idx >= scnfile_count(scn)) {
nuclear@2 80 return 0;
nuclear@2 81 }
nuclear@2 82 return scn->mesh[idx];
nuclear@2 83 }
nuclear@2 84
nuclear@2 85 int scnfile_count(struct scenefile *scn)
nuclear@2 86 {
nuclear@2 87 return dynarr_size(scn->mesh);
nuclear@2 88 }