object.c 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. #include "object.h"
  2. #include "scene.h"
  3. #include <debug.h>
  4. #define Object_log(msg) dbg_sprintf(dbgout, "[Object %d] %s\n", self->id, msg)
  5. static int id_counter;
  6. int Object_width(Object* self){
  7. return self->sprite->data->width * self->scale.x;
  8. }
  9. int Object_height(Object* self){
  10. return self->sprite->data->height * self->scale.y;
  11. }
  12. void Object_update(Object* self){
  13. #ifdef LOG_UPDATE
  14. Object_log("Updating object");
  15. #endif
  16. }
  17. void Object_draw(Object* self){
  18. #ifdef LOG_DRAW
  19. Object_log("Drawing object");
  20. #endif
  21. if(self->scale.x + self->scale.y != 0){
  22. gfx_ScaledSprite_NoClip(
  23. self->sprite->data, self->x, self->y,
  24. self->scale.x, self->scale.y);
  25. }else{
  26. gfx_Sprite_NoClip(self->sprite->data, self->x, self->y);
  27. }
  28. }
  29. void Object_free(Object* self){
  30. Object_log("Freeing object");
  31. free_Sprite(self->sprite);
  32. free(self);
  33. }
  34. void Object_load(Object* self){}
  35. void free_Object(Object* self){
  36. if(self->free != NULL){
  37. self->free(self);
  38. }else{
  39. Object_free(self);
  40. }
  41. }
  42. Object* new_Object(int x, int y){
  43. Object* self = (Object*)malloc(sizeof(Object));
  44. Object_log("Creating object");
  45. self->id = id_counter++;
  46. self->x = x;
  47. self->y = y;
  48. self->scale.x = self->scale.y = 1;
  49. self->width = &Object_width;
  50. self->height = &Object_height;
  51. self->update = &Object_update;
  52. self->draw = &Object_draw;
  53. self->load = &Object_load;
  54. self->free = &Object_free;
  55. return self;
  56. }