player.c 2.8 KB

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