scientist.c 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. #include "scientist.h"
  2. #include "game_sprites.h"
  3. #include <jetpack_joyride_icons.h>
  4. #include <gui/gui.h>
  5. void scientist_tick(SCIENTIST* const scientists) {
  6. for(int i = 0; i < SCIENTISTS_MAX; i++) {
  7. if(scientists[i].point.x > 0) {
  8. scientists[i].point.x -= scientists[i].velocity_x; // move based on velocity_x
  9. if(scientists[i].point.x < -16) { // if the scientist is out of screen
  10. scientists[i].point.x =
  11. 0; // set scientist x coordinate to 0 to mark it as "inactive"
  12. }
  13. }
  14. }
  15. }
  16. void spawn_random_scientist(SCIENTIST* const scientists) {
  17. // Check for an available slot for a new scientist
  18. for(int i = 0; i < SCIENTISTS_MAX; ++i) {
  19. if(scientists[i].point.x <= 0 &&
  20. (rand() % 1000) < 10) { // Spawn rate is less frequent than coins
  21. scientists[i].state = ScientistStateAlive;
  22. scientists[i].point.x = 127;
  23. scientists[i].point.y = 49;
  24. scientists[i].velocity_x =
  25. (rand() % (SCIENTIST_VELOCITY_MAX - SCIENTIST_VELOCITY_MIN + 1)) +
  26. SCIENTIST_VELOCITY_MIN; // random velocity between SCIENTIST_VELOCITY_MIN and SCIENTIST_VELOCITY_MAX
  27. break;
  28. }
  29. }
  30. }
  31. void draw_scientists(const SCIENTIST* scientists, Canvas* const canvas, const GameSprites* sprites) {
  32. for(int i = 0; i < SCIENTISTS_MAX; ++i) {
  33. if(scientists[i].point.x > 0) {
  34. if(scientists[i].state == ScientistStateAlive) {
  35. canvas_draw_icon_animation(
  36. canvas, scientists[i].point.x, scientists[i].point.y, sprites->scientist);
  37. } else {
  38. canvas_draw_icon(
  39. canvas, scientists[i].point.x, scientists[i].point.y + 5, &I_dead_scientist);
  40. }
  41. }
  42. }
  43. }