update_states.c 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. #include "update_states.h"
  2. void update_title(Game_Data *data)
  3. {
  4. data->last_time = data->current_time;
  5. data->current_time = RTC_GetTicks();
  6. updateCamera(&(data->cam), data->current_time - data->last_time);
  7. if(KeyDown(K_EXE))
  8. switch_to_state(MENU, data);
  9. }
  10. void update_game(Game_Data *data)
  11. {
  12. data->last_time = data->current_time;
  13. data->current_time = RTC_GetTicks();
  14. if(data->list != NULL){ //if the linked list is not empty
  15. updateWalls(data->list, data->current_time - data->last_time); //update the linked list
  16. if(isColliding(data->list, data->player_angle, data->nb_lines) == true){ //if the player and a wall collide
  17. PrintMini(50, 0, "TOUCHE", MINI_OVER); //death handling
  18. }
  19. data->list = removeWall(data->list, 0); //remove every wall whose distance to the center equals zero
  20. }
  21. //level generation
  22. //TODO: something else than pure randomness
  23. if(rand() % 40 == 1){
  24. data->list = addWall(data->list, 128, 8, 1, rand()%6);
  25. }else if(rand() % 70 == 1){
  26. int emptyRow = rand()%6;
  27. int i = 0;
  28. for(i = 0; i < 6; i++)
  29. if(i != emptyRow)
  30. data->list = addWall(data->list, 128, 15, 1, i);
  31. }
  32. if(KeyDown(K_LEFT)){
  33. data->player_angle-=15;
  34. }
  35. if(KeyDown(K_RIGHT)){
  36. data->player_angle+=15;
  37. }
  38. if(KeyDown(K_PLUS) && data->line_transition.counter == 0)
  39. {
  40. data->line_transition.counter = 10;
  41. data->line_transition.counter_start = 10;
  42. data->line_transition.delta_nb_lines = 1;
  43. }else if(KeyDown(K_MINUS) && data->line_transition.counter == 0){
  44. data->line_transition.counter = 10;
  45. data->line_transition.counter_start = 10;
  46. data->line_transition.delta_nb_lines = -1;
  47. }
  48. if(data->line_transition.counter != 0){
  49. data->line_transition.counter --;
  50. if(data->line_transition.counter <= 0){
  51. data->nb_lines += data->line_transition.delta_nb_lines;
  52. data->line_transition.counter_start = 0;
  53. data->line_transition.delta_nb_lines = 0;
  54. }
  55. }
  56. if(data->player_angle < 0)
  57. data->player_angle = 360 + data->player_angle;
  58. data->player_angle = data->player_angle % 360;
  59. updateCamera(&(data->cam), data->current_time - data->last_time);
  60. }
  61. void update_game_over(Game_Data *data)
  62. {
  63. //TODO
  64. }
  65. void update_menu(Game_Data *data)
  66. {
  67. //WARNING: THIS IS JUST PLACEHOLDER TO TEST THE GRAPHICS (too lazy to do some real level handling right now...)
  68. data->last_time = data->current_time;//updating the time variables
  69. data->current_time = RTC_GetTicks();
  70. if(data->keypress_delay == 0) //to make sure that the user isn't scrolling too fast
  71. {
  72. if(KeyDown(K_EXE)) //load the selected level
  73. switch_to_state(GAME, data);//TODO: change some values in data first
  74. else if(KeyDown(K_LEFT))
  75. {
  76. data->current_entry --;//change the selected id
  77. if(data->current_entry == 0)//check for overflows
  78. data->current_entry = 6;
  79. data->keypress_delay = 15;//init the delay
  80. //TODO: load high score data and stuff, probably not at run time, but in init_states
  81. }else if(KeyDown(K_RIGHT))
  82. {
  83. data->current_entry ++;
  84. if(data->current_entry == 7)
  85. data->current_entry = 1;
  86. data->keypress_delay = 15;
  87. }
  88. }else data->keypress_delay --;
  89. updateCamera(&(data->cam), data->current_time - data->last_time);//update the camera for the background
  90. }
  91. void updateCamera(Camera *cam, unsigned int delta_time){
  92. cam->speed = 1; //to change
  93. cam->angle += cam->speed * delta_time / 2.;
  94. if(cam->angle >= 360)
  95. cam->angle = cam->angle % 360;
  96. }