missile.c 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. #include <stdlib.h>
  2. #include <stdbool.h>
  3. #include <jetpack_joyride_icons.h>
  4. #include <gui/gui.h>
  5. #include "states.h"
  6. #include "game_sprites.h"
  7. #include "missile.h"
  8. #include "barry.h"
  9. void missile_tick(MISSILE* const missiles, BARRY* const barry, State* const state) {
  10. // Move missiles towards the player
  11. for(int i = 0; i < MISSILES_MAX; i++) {
  12. if(missile_colides(&missiles[i], barry)) {
  13. // (*state) = GameStateGameOver;
  14. UNUSED(state);
  15. }
  16. if(missiles[i].point.x > 0) {
  17. missiles[i].point.x -= 2; // move left by 2 units
  18. if(missiles[i].point.x < -16) { // if the coin is out of screen
  19. missiles[i].point.x = 0; // set coin x coordinate to 0 to mark it as "inactive"
  20. }
  21. }
  22. }
  23. }
  24. bool missile_colides(MISSILE* const missile, BARRY* const barry) {
  25. return !(
  26. barry->point.x > missile->point.x + 26 || // Barry is to the right of the missile
  27. barry->point.x + 11 < missile->point.x || // Barry is to the left of the missile
  28. barry->point.y > missile->point.y + 12 || // Barry is below the missile
  29. barry->point.y + 15 < missile->point.y); // Barry is above the missile
  30. }
  31. void spawn_random_missile(MISSILE* const missiles) {
  32. // Check for an available slot for a new coin
  33. for(int i = 0; i < MISSILES_MAX; ++i) {
  34. if(missiles[i].point.x <= 0) {
  35. missiles[i].point.x = 127;
  36. missiles[i].point.y = rand() % 64;
  37. break;
  38. }
  39. }
  40. }
  41. void draw_missiles(const MISSILE* missiles, Canvas* const canvas, const GameSprites* sprites) {
  42. for(int i = 0; i < MISSILES_MAX; ++i) {
  43. if(missiles[i].point.x > 0) {
  44. canvas_set_color(canvas, ColorBlack);
  45. canvas_draw_icon_animation(
  46. canvas, missiles[i].point.x, missiles[i].point.y, sprites->missile);
  47. canvas_set_color(canvas, ColorWhite);
  48. canvas_draw_icon(
  49. canvas, missiles[i].point.x, missiles[i].point.y, sprites->missile_infill);
  50. }
  51. }
  52. }