demo11.dpr 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. program demo11;
  2. {$I zglCustomConfig.cfg}
  3. {$I zgl_config.cfg}
  4. {$R *.res}
  5. uses
  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_types,
  19. zgl_utils
  20. ;
  21. var
  22. dirRes : UTF8String {$IFNDEF MACOSX} = '../data/' {$ENDIF};
  23. fntMain : LongWord;
  24. texBack : zglPTexture;
  25. grid : zglTGrid2D;
  26. wave : Single;
  27. TimeStart : LongWord;
  28. procedure Init;
  29. var
  30. i, j: Integer;
  31. begin
  32. texBack := tex_LoadFromFile(dirRes + 'back04.jpg');
  33. fntMain := font_LoadFromFile(dirRes + 'font.zfi');
  34. // RU: Èíèöèàëèçàöèÿ ñåòêè ðàçìåðîì 21x16. Îñíîâíàÿ èäåÿ - êàæäûé óçåë ñåòêè ýòî ñìåùåíèå îòíîñèòåëüíî å¸ âåðõíåãî ëåâîãî óãëà.
  35. // EN: Initialization of grid with size 21x16. Main idea - every node of grid is an offset from the top left corner.
  36. grid.Cols := 21;
  37. grid.Rows := 16;
  38. SetLength(grid.Grid, grid.Cols, grid.Rows);
  39. for i := 0 to grid.Cols - 1 do
  40. for j := 0 to grid.Rows - 1 do
  41. begin
  42. grid.Grid[i, j].X := i * 40;
  43. grid.Grid[i, j].Y := j * 40;
  44. end;
  45. setFontTextScale(15, fntMain);
  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. end;
  78. Begin
  79. randomize();
  80. TimeStart := timer_Add(@Timer, 16, t_SleepToStart, 3);
  81. zgl_Reg(SYS_LOAD, @Init);
  82. zgl_Reg(SYS_DRAW, @Draw);
  83. wnd_SetCaption(utf8_Copy('11 - Grid'));
  84. zgl_Init();
  85. End.