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 } |