update_states.c 2.4 KB

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