#include "../main.h" #include "scene.h" #include #include #include #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){ Scene_log("Loading scene"); int i; Object* object; Vector* objects = self->objects; for(i = 0; i < objects->count(objects); i++){ object = objects->get(objects, i); 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){ dbg_sprintf(dbgout, "[Scene %s] Creating scene\n", name); Scene* self = (Scene*)malloc(sizeof(Scene)); if(current_scene != NULL){ free_Scene(current_scene); } current_scene = self; self->name = name; Scene_log("Adding objects"); self->objects = new_Vector(0, sizeof(Object), (vc_vector_deleter*)&free_Object); Scene_log("Adding sprites"); self->sprites = new_Vector(0, sizeof(Sprite), (vc_vector_deleter*)&free_Sprite); Scene_log("Creating methods"); self->add_object = &Scene_add_object; self->add_sprite = &Scene_add_sprite; self->update = &Scene_update; self->draw = &Scene_draw; self->load = &Scene_load; Scene_log("Scene created"); return self; } Scene* current_Scene(){ return current_scene; }