demo11.pas 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. program demo11;
  2. {$I zglCustomConfig.cfg}
  3. uses
  4. zgl_main,
  5. zgl_screen,
  6. zgl_window,
  7. zgl_timers,
  8. zgl_keyboard,
  9. zgl_fx,
  10. zgl_textures,
  11. zgl_textures_png,
  12. zgl_textures_jpg,
  13. zgl_grid_2d,
  14. zgl_font,
  15. zgl_text,
  16. zgl_math_2d,
  17. zgl_utils
  18. ;
  19. var
  20. dirRes : UTF8String = 'data/';
  21. fntMain : zglPFont;
  22. texBack : zglPTexture;
  23. grid : zglTGrid2D;
  24. wave : Single;
  25. procedure Init;
  26. var
  27. i, j : Integer;
  28. begin
  29. zgl_Enable( CORRECT_RESOLUTION );
  30. scr_CorrectResolution( 800, 600 );
  31. texBack := tex_LoadFromFile( dirRes + 'back04.jpg' );
  32. fntMain := font_LoadFromFile( dirRes + 'font.zfi' );
  33. // RU: Инициализация сетки размером 21x16. Основная идея - каждый узел сетки это смещение относительно её верхнего левого угла.
  34. // EN: Initialization of grid with size 21x16. Main idea - every node of grid is an offset from the top left corner.
  35. grid.Cols := 21;
  36. grid.Rows := 16;
  37. SetLength( grid.Grid, grid.Cols, grid.Rows );
  38. for i := 0 to grid.Cols - 1 do
  39. for j := 0 to grid.Rows - 1 do
  40. begin
  41. grid.Grid[ i, j ].X := i * 40;
  42. grid.Grid[ i, j ].Y := j * 40;
  43. end;
  44. end;
  45. procedure Draw;
  46. begin
  47. // RU: Рендерим сетку в координатах 0,0.
  48. // EN: Render grid in coordinates 0,0.
  49. sgrid2d_Draw( texBack, 0, 0, @grid );
  50. text_Draw( fntMain, 0, 0, 'FPS: ' + u_IntToStr( zgl_Get( RENDER_FPS ) ) );
  51. end;
  52. procedure Timer;
  53. var
  54. i, j : Integer;
  55. cwave, swave : Single;
  56. begin
  57. wave := wave + random( 1000 ) / 10000;
  58. cwave := cos( wave );
  59. swave := sin( wave );
  60. // RU: Симуляция простого эффекта под водой.
  61. // EN: Simulation of simple underwater effect.
  62. for i := 1 to grid.Cols - 2 do
  63. for j := 1 to grid.Rows - 2 do
  64. begin
  65. if ( i mod 2 = 0 ) and ( j mod 2 = 0 ) Then
  66. begin
  67. grid.Grid[ i, j ].X := i * 40 + cwave;
  68. grid.Grid[ i, j ].Y := j * 40 + swave;
  69. end else
  70. begin
  71. grid.Grid[ i, j ].X := i * 40 - cwave;
  72. grid.Grid[ i, j ].Y := j * 40 - swave;
  73. end;
  74. end;
  75. if key_Press( K_ESCAPE ) Then zgl_Exit();
  76. key_ClearState();
  77. end;
  78. Begin
  79. randomize();
  80. timer_Add( @Timer, 16 );
  81. zgl_Reg( SYS_LOAD, @Init );
  82. zgl_Reg( SYS_DRAW, @Draw );
  83. scr_SetOptions( 800, 600, REFRESH_MAXIMUM, FALSE, FALSE );
  84. zgl_Init();
  85. End.