scene.c 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. #include "../main.h"
  2. #include "scene.h"
  3. #include <debug.h>
  4. #include <keypadc.h>
  5. #include <stdlib.h>
  6. #define Scene_log(msg) dbg_sprintf(dbgout, "[Scene %s] %s\n", self->name, msg)
  7. Scene* current_scene = NULL;
  8. bool Scene_add_object(Scene* self, Object* object){
  9. return self->objects->consume(self->objects, object);
  10. }
  11. bool Scene_add_sprite(Scene* self, Sprite* sprite){
  12. return self->sprites->consume(self->sprites, sprite);
  13. }
  14. void Scene_update(Scene* self){
  15. int i;
  16. Object* object;
  17. Vector* objects = self->objects;
  18. #ifdef LOG_UPDATE
  19. Scene_log("Updating scene");
  20. #endif
  21. kb_Scan();
  22. for(i = 0; i < objects->count(objects); i++){
  23. object = objects->get(objects, i);
  24. object->update(object);
  25. }
  26. }
  27. void Scene_draw(Scene* self){
  28. int i;
  29. Object* object;
  30. Vector* objects = self->objects;
  31. #ifdef LOG_DRAW
  32. Scene_log("Drawing scene");
  33. #endif
  34. gfx_FillScreen(0);
  35. for(i = 0; i < objects->count(objects); i++){
  36. object = objects->get(objects, i);
  37. object->draw(object);
  38. }
  39. gfx_BlitBuffer();
  40. }
  41. void Scene_load(Scene* self){
  42. Scene_log("Loading scene");
  43. int i;
  44. Object* object;
  45. Vector* objects = self->objects;
  46. for(i = 0; i < objects->count(objects); i++){
  47. object = objects->get(objects, i);
  48. object->load(object);
  49. }
  50. }
  51. void free_Scene(struct Scene* self){
  52. Scene_log("Freeing scene");
  53. free(self->objects);
  54. free(self->sprites);
  55. free(self->name);
  56. free(self);
  57. current_scene = NULL;
  58. }
  59. Scene* new_Scene(char* name){
  60. dbg_sprintf(dbgout, "[Scene %s] Creating scene\n", name);
  61. Scene* self = (Scene*)malloc(sizeof(Scene));
  62. if(current_scene != NULL){
  63. free_Scene(current_scene);
  64. }
  65. current_scene = self;
  66. self->name = name;
  67. Scene_log("Adding objects");
  68. self->objects = new_Vector(0, sizeof(Object), (vc_vector_deleter*)&free_Object);
  69. Scene_log("Adding sprites");
  70. self->sprites = new_Vector(0, sizeof(Sprite), (vc_vector_deleter*)&free_Sprite);
  71. Scene_log("Creating methods");
  72. self->add_object = &Scene_add_object;
  73. self->add_sprite = &Scene_add_sprite;
  74. self->update = &Scene_update;
  75. self->draw = &Scene_draw;
  76. self->load = &Scene_load;
  77. Scene_log("Scene created");
  78. return self;
  79. }
  80. Scene* current_Scene(){
  81. return current_scene;
  82. }