demo11.dpr 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. program demo11;
  2. {$I zglCustomConfig.cfg}
  3. {$R *.res}
  4. uses
  5. {$IFDEF USE_ZENGL_STATIC}
  6. zgl_main,
  7. zgl_screen,
  8. zgl_window,
  9. zgl_timers,
  10. zgl_keyboard,
  11. zgl_fx,
  12. zgl_textures,
  13. zgl_textures_png,
  14. zgl_textures_jpg,
  15. zgl_grid_2d,
  16. zgl_font,
  17. zgl_text,
  18. zgl_math_2d,
  19. zgl_utils
  20. {$ELSE}
  21. zglHeader
  22. {$ENDIF}
  23. ;
  24. var
  25. dirRes : UTF8String {$IFNDEF MACOSX} = '../data/' {$ENDIF};
  26. fntMain : zglPFont;
  27. texBack : zglPTexture;
  28. grid : zglTGrid2D;
  29. wave : Single;
  30. procedure Init;
  31. var
  32. i, j : Integer;
  33. begin
  34. texBack := tex_LoadFromFile( dirRes + 'back04.jpg' );
  35. fntMain := font_LoadFromFile( dirRes + 'font.zfi' );
  36. // RU: Èíèöèàëèçàöèÿ ñåòêè ðàçìåðîì 21x16. Îñíîâíàÿ èäåÿ - êàæäûé óçåë ñåòêè ýòî ñìåùåíèå îòíîñèòåëüíî å¸ âåðõíåãî ëåâîãî óãëà.
  37. // EN: Initialization of grid with size 21x16. Main idea - every node of grid is an offset from the top left corner.
  38. grid.Cols := 21;
  39. grid.Rows := 16;
  40. SetLength( grid.Grid, grid.Cols, grid.Rows );
  41. for i := 0 to grid.Cols - 1 do
  42. for j := 0 to grid.Rows - 1 do
  43. begin
  44. grid.Grid[ i, j ].X := i * 40;
  45. grid.Grid[ i, j ].Y := j * 40;
  46. end;
  47. end;
  48. procedure Draw;
  49. begin
  50. // RU: Ðåíäåðèì ñåòêó â êîîðäèíàòàõ 0,0.
  51. // EN: Render grid in coordinates 0,0.
  52. sgrid2d_Draw( texBack, 0, 0, @grid );
  53. text_Draw( fntMain, 0, 0, 'FPS: ' + u_IntToStr( zgl_Get( RENDER_FPS ) ) );
  54. end;
  55. procedure Timer;
  56. var
  57. i, j : Integer;
  58. cwave, swave : Single;
  59. begin
  60. wave := wave + random( 1000 ) / 10000;
  61. cwave := cos( wave );
  62. swave := sin( wave );
  63. // RU: Ñèìóëÿöèÿ ïðîñòîãî ýôôåêòà ïîä âîäîé.
  64. // EN: Simulation of simple underwater effect.
  65. for i := 1 to grid.Cols - 2 do
  66. for j := 1 to grid.Rows - 2 do
  67. begin
  68. if ( i mod 2 = 0 ) and ( j mod 2 = 0 ) Then
  69. begin
  70. grid.Grid[ i, j ].X := i * 40 + cwave;
  71. grid.Grid[ i, j ].Y := j * 40 + swave;
  72. end else
  73. begin
  74. grid.Grid[ i, j ].X := i * 40 - cwave;
  75. grid.Grid[ i, j ].Y := j * 40 - swave;
  76. end;
  77. end;
  78. if key_Press( K_ESCAPE ) Then zgl_Exit();
  79. key_ClearState();
  80. end;
  81. Begin
  82. {$IFNDEF USE_ZENGL_STATIC}
  83. if not zglLoad( libZenGL ) Then exit;
  84. {$ENDIF}
  85. randomize();
  86. timer_Add( @Timer, 16 );
  87. zgl_Reg( SYS_LOAD, @Init );
  88. zgl_Reg( SYS_DRAW, @Draw );
  89. wnd_SetCaption( '11 - Grid' );
  90. wnd_ShowCursor( TRUE );
  91. scr_SetOptions( 800, 600, REFRESH_MAXIMUM, FALSE, FALSE );
  92. zgl_Init();
  93. End.