player.c 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. #include <keypadc.h>
  2. #include "../main.h"
  3. #include <stdlib.h>
  4. #define Player_log(msg) dbg_sprintf(dbgout, "[Object(Player) %d] %s\n", self->id, msg)
  5. void Player_update(Object* self){
  6. Scene* scene = self->scene;
  7. Vector* sprites = scene->sprites;
  8. Sprite* sprite;
  9. kb_key_t arrows = kb_Data[7];
  10. int x = self->x;
  11. int y = self->y;
  12. int speed;
  13. #ifdef LOG_UPDATE
  14. Player_log("Drawing player");
  15. #endif
  16. if(kb_Data[2] & kb_Alpha){
  17. speed = RUN_SPEED;
  18. }else{
  19. speed = WALK_SPEED;
  20. }
  21. if(arrows & kb_Down){
  22. if(self->y < MAX_HEIGHT){
  23. self->y += speed;
  24. sprite = sprites->get(sprites, 2);
  25. if(sprite != self->sprite){
  26. self->sprite = sprite;
  27. }else{
  28. self->sprite = sprites->get(sprites, 4);
  29. }
  30. }
  31. }else if(arrows & kb_Up){
  32. if(self->y > 0){
  33. self->y -= speed;
  34. sprite = sprites->get(sprites, 18);
  35. if(sprite != self->sprite){
  36. self->sprite = sprite;
  37. }else{
  38. self->sprite = sprites->get(sprites, 20);
  39. }
  40. }
  41. }
  42. if(arrows & kb_Right){
  43. if(self->x < MAX_WIDTH){
  44. self->x += speed;
  45. sprite = sprites->get(sprites, 10);
  46. if(sprite != self->sprite){
  47. self->sprite = sprite;
  48. }else{
  49. self->sprite = sprites->get(sprites, 12);
  50. }
  51. }
  52. }else if(arrows & kb_Left){
  53. if(self->x > 0){
  54. self->x -= speed;
  55. sprite = sprites->get(sprites, 6);
  56. if(sprite != self->sprite){
  57. self->sprite = sprite;
  58. }else{
  59. self->sprite = sprites->get(sprites, 8);
  60. }
  61. }
  62. }
  63. if(self->x < 0){
  64. self->x = 0;
  65. }else if((self->x + self->width(self)) > MAX_WIDTH){
  66. self->x = MAX_WIDTH - self->width(self);
  67. }
  68. if(self->y < 0){
  69. self->y = 0;
  70. }else if((self->y + self->height(self)) > MAX_HEIGHT){
  71. self->y = MAX_HEIGHT - self->height(self);
  72. }
  73. if(x == self->x && y == self->y){
  74. self->sprite = sprites->get(sprites, 0);
  75. }
  76. }
  77. void Player_load(Object* self){
  78. Player_log("Loading player");
  79. }
  80. void Player_free(Object* self){
  81. Player_log("Freeing player");
  82. // free(self->sprites);
  83. free_Object(self);
  84. }
  85. Object* new_Player(){
  86. Object* self = new_Object(0,0);
  87. // Vector* self->sprites = new_Vector(0, sizeof(Sprite), &free_Sprite);
  88. self->update = &Player_update;
  89. self->free = &Player_free;
  90. self->load = &Player_load;
  91. return self;
  92. }