player.c 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  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(Object* self){
  5. Scene* scene = current_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. Object* new_Player(){
  77. Object* self = new_Object(0,0);
  78. self->update = &Player_update;
  79. return self;
  80. }