demo11.pas 2.6 KB

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