player.c 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  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* self){
  7. Scene* scene = current_Scene();
  8. Vector* sprites = scene->sprites;
  9. Sprite* sprite;
  10. kb_key_t arrows = kb_Data[7];
  11. int x = self->x;
  12. int y = self->y;
  13. int speed;
  14. #ifdef LOG_UPDATE
  15. Player_log("Drawing player");
  16. #endif
  17. if(kb_Data[2] & kb_Alpha){
  18. speed = RUN_SPEED;
  19. }else{
  20. speed = WALK_SPEED;
  21. }
  22. if(arrows & kb_Down){
  23. if(self->y < MAX_HEIGHT){
  24. self->y += speed;
  25. sprite = sprites->get(sprites, 2);
  26. if(sprite != self->sprite){
  27. self->sprite = sprite;
  28. }else{
  29. self->sprite = sprites->get(sprites, 4);
  30. }
  31. }
  32. }else if(arrows & kb_Up){
  33. if(self->y > 0){
  34. self->y -= speed;
  35. sprite = sprites->get(sprites, 18);
  36. if(sprite != self->sprite){
  37. self->sprite = sprite;
  38. }else{
  39. self->sprite = sprites->get(sprites, 20);
  40. }
  41. }
  42. }
  43. if(arrows & kb_Right){
  44. if(self->x < MAX_WIDTH){
  45. self->x += speed;
  46. sprite = sprites->get(sprites, 10);
  47. if(sprite != self->sprite){
  48. self->sprite = sprite;
  49. }else{
  50. self->sprite = sprites->get(sprites, 12);
  51. }
  52. }
  53. }else if(arrows & kb_Left){
  54. if(self->x > 0){
  55. self->x -= speed;
  56. sprite = sprites->get(sprites, 6);
  57. if(sprite != self->sprite){
  58. self->sprite = sprite;
  59. }else{
  60. self->sprite = sprites->get(sprites, 8);
  61. }
  62. }
  63. }
  64. if(self->x < 0){
  65. self->x = 0;
  66. }else if(self->x >= MAX_WIDTH){
  67. self->x = MAX_WIDTH;
  68. }
  69. if(self->y < 0){
  70. self->y = 0;
  71. }else if(self->y >= MAX_HEIGHT){
  72. self->y = MAX_HEIGHT;
  73. }
  74. if(x == self->x && y == self->y){
  75. self->sprite = sprites->get(sprites, 0);
  76. }
  77. }
  78. void Player_load(Object* self){
  79. Player_log("Loading player");
  80. }
  81. Object* new_Player(){
  82. Object* self = new_Object(0,0);
  83. self->update = &Player_update;
  84. self->load = &Player_load;
  85. return self;
  86. }