draw_states.c 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. #include "draw_states.h"
  2. void draw_game(Game_Data *data)
  3. {
  4. //draw the player and the lines
  5. drawPlayer(&(data->cam), data->player_angle, data->nb_lines, data->line_transition);
  6. drawDiagonals(data->cam, data->nb_lines, data->line_transition);
  7. //showing the walls
  8. if(data->list != NULL)
  9. drawWalls(data->list, &(data->cam), data->nb_lines);
  10. }
  11. void draw_title(Game_Data *data)
  12. {
  13. PrintMini(20, 28, "Press EXE to begin");
  14. drawDiagonals(data->cam, 6, data->line_transition);
  15. }
  16. void draw_menu(Game_Data *data)
  17. {
  18. }
  19. void draw_game_over(Game_Data *data)
  20. {
  21. }
  22. //draws the player
  23. //at first, was supposed to draw an hexagon in the center, plus a triangle to show the player,
  24. //but the hexagon was not visible, and it was a pixel mess, so we're showing a circle instead.
  25. //there is still for code to calculate the vertices of the hexagon, in case we want to change that again
  26. void drawPlayer(Camera *cam, int player_angle, int nb_lines, Line_Transition line_transition)
  27. {
  28. int x[32];
  29. int y[32];
  30. int i = 0;
  31. int angle = 0;
  32. float tmp_angle = 0.0;
  33. float transition_angle = 0.0;
  34. float delta_angle = 0.0;
  35. if(line_transition.delta_nb_lines == 1)
  36. nb_lines ++;
  37. if(line_transition.counter_start != 0)
  38. transition_angle = (360.0 / (float)nb_lines) * ((float)line_transition.counter / (float)line_transition.counter_start);
  39. delta_angle = 360.0/nb_lines;
  40. do
  41. {
  42. x[i] = (8. + cam->zoom)*cos(PI * (tmp_angle + cam->angle)/180.) + cam->cX;
  43. y[i] = (8. + cam->zoom)*sin(PI * (tmp_angle + cam->angle)/180.) + cam->cY;
  44. i++;
  45. switch(line_transition.delta_nb_lines)
  46. {
  47. case 0:
  48. tmp_angle += delta_angle;
  49. break;
  50. case 1:
  51. if(i < nb_lines)
  52. tmp_angle += (360 - (delta_angle - transition_angle)) / (nb_lines - 1);
  53. else
  54. tmp_angle += delta_angle - transition_angle;
  55. break;
  56. case -1:
  57. if(i < nb_lines)
  58. tmp_angle += (360 - transition_angle) / (nb_lines - 1);
  59. else
  60. tmp_angle = transition_angle;
  61. break;
  62. }
  63. }while(i <= nb_lines);
  64. //draw the aforementionned circle, depending on the camera's center
  65. //ML_filled_circle(cam.cX, cam.cY, 6, BLACK);
  66. ML_polygone(x, y, nb_lines, BLACK);
  67. //draw the player. At such a low scale, it was impossible to draw a rotating triangle, so its a radius 1 circle instead.
  68. ML_filled_circle((9. + cam->zoom)*cos( PI*(player_angle + cam->angle)/180) + cam->cX, (9. + cam->zoom)*sin( PI*(player_angle+cam->angle)/180) + cam->cY, 1, BLACK);
  69. }
  70. //draws one of the three rotating lines
  71. void drawDiagonals(Camera cam, int nb_lines, Line_Transition line_transition)
  72. {
  73. int tmp_angle = cam.angle;
  74. float tmp_angle_rad = 0.0f;
  75. int i = 0;
  76. float x1 = 0.0f, y1 = 0.0f, x2 = 0.0f, y2 = 0.0f;
  77. float delta_angle = 0.0;
  78. float coeff = 0.0;
  79. float transition_angle = 0.0;
  80. delta_angle = 360.0 / nb_lines;
  81. if(line_transition.delta_nb_lines == 1)
  82. nb_lines ++;
  83. if(line_transition.counter_start != 0)
  84. coeff = (float)line_transition.counter / (float)line_transition.counter_start;
  85. transition_angle = delta_angle * coeff;
  86. do{
  87. tmp_angle_rad = tmp_angle * PI / 180.0f;
  88. x1 = 9.0f * cos(tmp_angle_rad);
  89. y1 = 9.0f * sin(tmp_angle_rad);
  90. x2 = 128.0f * cos(tmp_angle_rad);
  91. y2 = 128.0f * sin(tmp_angle_rad);
  92. ML_line(x1 + cam.cX, y1 + cam.cY, x2 + cam.cX, y2 + cam.cY, BLACK);
  93. i++;
  94. switch(line_transition.delta_nb_lines){
  95. case 0:
  96. tmp_angle += 360/nb_lines;
  97. break;
  98. case 1:
  99. if(i < nb_lines - 1)
  100. {
  101. tmp_angle += (360 - (delta_angle - transition_angle)) / (nb_lines - 1);
  102. }else{
  103. tmp_angle += delta_angle - transition_angle;
  104. }
  105. break;
  106. case -1:
  107. if(i < nb_lines - 1)
  108. {
  109. tmp_angle += (360 - transition_angle) / (nb_lines - 1);
  110. }else{
  111. tmp_angle += transition_angle;
  112. }
  113. break;
  114. }
  115. if(tmp_angle >= 360)tmp_angle = tmp_angle - 359;
  116. }while(i < nb_lines);
  117. }