12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- #include "../main.h"
- #include "scene.h"
- #include <debug.h>
- #include <keypadc.h>
- #include <stdlib.h>
- #define Scene_log(msg) dbg_sprintf(dbgout, "[Scene %s] %s\n", self->name, msg)
- Scene* current_scene = NULL;
- bool Scene_add_object(Scene* self, Object* object){
- return self->objects->consume(self->objects, object);
- }
- bool Scene_add_sprite(Scene* self, Sprite* sprite){
- return self->sprites->consume(self->sprites, sprite);
- }
- void Scene_update(Scene* self){
- int i;
- Object* object;
- Vector* objects = self->objects;
- #ifdef LOG_UPDATE
- Scene_log("Updating scene");
- #endif
- kb_Scan();
- for(i = 0; i < objects->count(objects); i++){
- object = objects->get(objects, i);
- object->update(object);
- }
- }
- void Scene_draw(Scene* self){
- int i;
- Object* object;
- Vector* objects = self->objects;
- #ifdef LOG_DRAW
- Scene_log("Drawing scene");
- #endif
- gfx_FillScreen(0);
- for(i = 0; i < objects->count(objects); i++){
- object = objects->get(objects, i);
- object->draw(object);
- }
- gfx_BlitBuffer();
- }
- void Scene_load(Scene* self){
- int i;
- Object* object;
- Vector* objects = self->objects;
- for(i = 0; i < objects->count(objects); i++){
- object = objects->get(objects, i);
- object->scene = self;
- object->load(object);
- }
- }
- void free_Scene(struct Scene* self){
- Scene_log("Freeing scene");
- free(self->objects);
- free(self->sprites);
- free(self->name);
- free(self);
- current_scene = NULL;
- }
- Scene* new_Scene(char* name){
- Scene* self = (Scene*)malloc(sizeof(Scene));
- if(current_scene != NULL){
- free_Scene(current_scene);
- }
- current_scene = self;
- self->name = name;
- Scene_log("Creating scene");
- self->objects = new_Vector(0, sizeof(Object), (vc_vector_deleter*)&free_Object);
- self->sprites = new_Vector(0, sizeof(Sprite), (vc_vector_deleter*)&free_Sprite);
- self->add_object = &Scene_add_object;
- self->add_sprite = &Scene_add_sprite;
- self->update = &Scene_update;
- self->draw = &Scene_draw;
- self->load = &Scene_load;
- return self;
- }
- Scene* current_Scene(){
- return current_scene;
- }
|