demo11.lpr 2.6 KB

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