scientist.c 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  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].state == ScientistStateAlive ?
  9. 1 - scientists[i].velocity_x :
  10. 1; // move based on velocity_x
  11. if(scientists[i].point.x < -16) { // if the scientist is out of screen
  12. scientists[i].point.x =
  13. 0; // set scientist x coordinate to 0 to mark it as "inactive"
  14. }
  15. }
  16. }
  17. }
  18. void spawn_random_scientist(SCIENTIST* const scientists) {
  19. float velocities[] = {-0.5f, 0.0f, 0.5f, -1.0f};
  20. // Check for an available slot for a new scientist
  21. for(int i = 0; i < SCIENTISTS_MAX; ++i) {
  22. if(scientists[i].point.x <= 0 &&
  23. (rand() % 1000) < 10) { // Spawn rate is less frequent than coins
  24. scientists[i].state = ScientistStateAlive;
  25. scientists[i].point.x = 127;
  26. scientists[i].point.y = 49;
  27. scientists[i].velocity_x = velocities[rand() % 4];
  28. break;
  29. }
  30. }
  31. }
  32. void draw_scientists(const SCIENTIST* scientists, Canvas* const canvas, const GameSprites* sprites) {
  33. for(int i = 0; i < SCIENTISTS_MAX; ++i) {
  34. if(scientists[i].point.x > 0) {
  35. canvas_set_color(canvas, ColorBlack);
  36. if(scientists[i].state == ScientistStateAlive) {
  37. canvas_draw_icon(
  38. canvas,
  39. scientists[i].point.x,
  40. scientists[i].point.y,
  41. scientists[i].velocity_x >= 0 ? sprites->scientist_right :
  42. sprites->scientist_left);
  43. canvas_set_color(canvas, ColorWhite);
  44. canvas_draw_icon(
  45. canvas,
  46. scientists[i].point.x,
  47. scientists[i].point.y,
  48. scientists[i].velocity_x >= 0 ? sprites->scientist_right_infill :
  49. sprites->scientist_left_infill);
  50. } else {
  51. canvas_draw_icon(
  52. canvas, scientists[i].point.x, scientists[i].point.y + 5, &I_dead_scientist);
  53. }
  54. }
  55. }
  56. }