demo11.lpr 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. library demo11;
  2. {$I zglCustomConfig.cfg}
  3. {$I zgl_config.cfg}
  4. uses
  5. zgl_application,
  6. zgl_screen,
  7. zgl_window,
  8. zgl_file,
  9. zgl_timers,
  10. zgl_fx,
  11. zgl_textures,
  12. zgl_textures_png,
  13. // Rus: для Android v5 и v6 отключите в файле конфигурации define CPUARMV7A.
  14. // Eng: for Android v5 and v6 disable in the config file define CPUARMV7A.
  15. zgl_textures_jpg,
  16. zgl_grid_2d,
  17. zgl_font,
  18. zgl_text,
  19. zgl_math_2d,
  20. zgl_types,
  21. zgl_utils
  22. ;
  23. var
  24. dirRes : UTF8String = 'assets/';
  25. fntMain : LongWord;
  26. texBack : zglPTexture;
  27. grid : zglTGrid2D;
  28. wave : Single;
  29. TimeStart: Byte;
  30. procedure Init;
  31. var
  32. i, j : Integer;
  33. begin
  34. zgl_Enable( CORRECT_RESOLUTION );
  35. scr_CorrectResolution( 800, 600 );
  36. file_OpenArchive( PAnsiChar( zgl_Get( DIRECTORY_APPLICATION ) ) );
  37. texBack := tex_LoadFromFile( dirRes + 'back04.jpg' );
  38. fntMain := font_LoadFromFile( dirRes + 'font.zfi' );
  39. file_CloseArchive();
  40. // RU: Инициализация сетки размером 21x16. Основная идея - каждый узел сетки это смещение относительно её верхнего левого угла.
  41. // EN: Initialization of grid with size 21x16. Main idea - every node of grid is an offset from the top left corner.
  42. grid.Cols := 21;
  43. grid.Rows := 16;
  44. SetLength( grid.Grid, grid.Cols, grid.Rows );
  45. for i := 0 to grid.Cols - 1 do
  46. for j := 0 to grid.Rows - 1 do
  47. begin
  48. grid.Grid[ i, j ].X := i * 40;
  49. grid.Grid[ i, j ].Y := j * 40;
  50. end;
  51. setFontTextScale(15, fntMain);
  52. end;
  53. procedure Draw;
  54. begin
  55. // RU: Рендерим сетку в координатах 0,0.
  56. // EN: Render grid in coordinates 0,0.
  57. sgrid2d_Draw( texBack, 0, 0, @grid );
  58. text_Draw( fntMain, 0, 0, 'FPS: ' + u_IntToStr( zgl_Get( RENDER_FPS ) ) );
  59. end;
  60. procedure Timer;
  61. var
  62. i, j : Integer;
  63. cwave, swave : Single;
  64. begin
  65. wave := wave + random( 1000 ) / 10000;
  66. cwave := cos( wave );
  67. swave := sin( wave );
  68. // RU: Симуляция простого эффекта под водой.
  69. // EN: Simulation of simple underwater effect.
  70. for i := 1 to grid.Cols - 2 do
  71. for j := 1 to grid.Rows - 2 do
  72. begin
  73. if ( i mod 2 = 0 ) and ( j mod 2 = 0 ) Then
  74. begin
  75. grid.Grid[ i, j ].X := i * 40 + cwave;
  76. grid.Grid[ i, j ].Y := j * 40 + swave;
  77. end else
  78. begin
  79. grid.Grid[ i, j ].X := i * 40 - cwave;
  80. grid.Grid[ i, j ].Y := j * 40 - swave;
  81. end;
  82. end;
  83. end;
  84. procedure Restore;
  85. begin
  86. file_OpenArchive( PAnsiChar( zgl_Get( DIRECTORY_APPLICATION ) ) );
  87. tex_RestoreFromFile( texBack, dirRes + 'back04.jpg' );
  88. font_RestoreFromFile( fntMain, dirRes + 'font.zfi' );
  89. file_CloseArchive();
  90. end;
  91. procedure Java_zengl_android_ZenGL_Main( var env; var thiz ); cdecl;
  92. begin
  93. randomize();
  94. TimeStart := timer_Add( @Timer, 16, t_Start );
  95. zgl_Reg( SYS_LOAD, @Init );
  96. zgl_Reg( SYS_DRAW, @Draw );
  97. zgl_Reg( SYS_ANDROID_RESTORE, @Restore );
  98. scr_SetOptions();
  99. end;
  100. exports
  101. Java_zengl_android_ZenGL_Main,
  102. {$I android_export.inc}
  103. End.