player.c 2.5 KB

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