update_states.c 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. #include "update_states.h"
  2. #include "pattern.h"
  3. #include "fixed.h"
  4. void update_title(Game_Data *data)
  5. {
  6. data->last_time = data->current_time;
  7. data->current_time = RTC_GetTicks();
  8. data->chrono_time += (data->current_time - data->last_time)/ 128.;
  9. if(KeyDown(K_SHIFT) && data->shift_latch_value == 0) {
  10. switch_to_state(MENU, data);
  11. }
  12. updateCamera(&(data->cam), data->current_time - data->last_time);
  13. }
  14. #define min(a, b) ((a) < (b) ? (a) : (b))
  15. void update_game(Game_Data *data)
  16. {
  17. data->last_time = data->current_time;
  18. data->current_time = RTC_GetTicks();
  19. data->chrono_time += (data->current_time - data->last_time)/ 128.;
  20. if(data->list != NULL) {
  21. //if the linked list is not empty
  22. updateWalls(data->list, min(data->current_time - data->last_time, 2));
  23. //update the linked list
  24. //if the player and a wall collide
  25. if(isColliding(data->list, data->player_angle, data->nb_lines) == true) {
  26. //death handling
  27. PrintMini(50, 0, "TOUCHE", MINI_OVER);
  28. }
  29. //remove every wall whose distance to the center equals zero
  30. data->list = removeWall(data->list, 8);
  31. }
  32. //level generation
  33. //TODO: something else than pure randomness
  34. if(!data->cooldown_timer--) {
  35. Pattern pattern = data->level->patterns[rand()% data->level->nb_patterns];
  36. addPattern(data, &pattern, rand()%6);
  37. data->cooldown_timer = pattern.cooldown;
  38. }
  39. if(KeyDown(K_LEFT)){
  40. data->player_angle-=15;
  41. }
  42. if(KeyDown(K_RIGHT)){
  43. data->player_angle+=15;
  44. }
  45. if(KeyDown(K_ALPHA) && data->alpha_latch_value == 0) {
  46. switch_to_state(MENU, data);
  47. }
  48. if(KeyDown(K_PLUS) && data->line_transition.counter == 0)
  49. {
  50. data->line_transition.counter = 10;
  51. data->line_transition.counter_start = 10;
  52. data->line_transition.delta_nb_lines = 1;
  53. }else if(KeyDown(K_MINUS) && data->line_transition.counter == 0){
  54. data->line_transition.counter = 10;
  55. data->line_transition.counter_start = 10;
  56. data->line_transition.delta_nb_lines = -1;
  57. }
  58. if(data->line_transition.counter != 0){
  59. data->line_transition.counter --;
  60. if(data->line_transition.counter <= 0){
  61. data->nb_lines += data->line_transition.delta_nb_lines;
  62. data->line_transition.counter_start = 0;
  63. data->line_transition.delta_nb_lines = 0;
  64. }
  65. }
  66. data->player_angle = MOD(data->player_angle, 360);
  67. updateCamera(&(data->cam), data->current_time - data->last_time);
  68. }
  69. void update_menu(Game_Data *data)
  70. {
  71. data->last_time = data->current_time;
  72. data->current_time = RTC_GetTicks();
  73. data->chrono_time += (data->current_time - data->last_time)/ 128.;
  74. if(KeyDown(K_SHIFT) && data->shift_latch_value == 0) {
  75. switch_to_state(GAME, data);
  76. }
  77. if(KeyDown(K_ALPHA) && data->alpha_latch_value == 0) {
  78. switch_to_state(TITLE, data);
  79. }
  80. updateCamera(&(data->cam), data->current_time - data->last_time);
  81. }
  82. void update_game_over(Game_Data *data)
  83. {
  84. //TODO
  85. }
  86. void updateCamera(Camera *cam, unsigned int delta_time){
  87. cam->angle += cam->speed * delta_time / 2.;
  88. if(cam->angle >= 360)
  89. cam->angle = cam->angle % 360;
  90. }