demo04.lpr 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. library demo04;
  2. {$I zglCustomConfig.cfg}
  3. {$I zgl_config.cfg}
  4. uses
  5. zgl_application,
  6. zgl_file,
  7. zgl_screen,
  8. zgl_window,
  9. zgl_timers,
  10. zgl_touch,
  11. zgl_font,
  12. zgl_text,
  13. zgl_primitives_2d,
  14. zgl_sprite_2d,
  15. zgl_textures,
  16. zgl_textures_png,
  17. zgl_textures_jpg,
  18. zgl_types,
  19. zgl_collision_2d,
  20. gegl_color,
  21. zgl_types,
  22. zgl_utils;
  23. var
  24. dirRes : UTF8String = 'assets/';
  25. fntMain : LongWord;
  26. texBack : zglPTexture;
  27. correctAspect : Boolean = TRUE;
  28. correctRect : zglTRect2D;
  29. str : UTF8String;
  30. TimeStart: Byte;
  31. procedure Init;
  32. begin
  33. zgl_Enable( CORRECT_RESOLUTION );
  34. scr_CorrectResolution( 800, 600 );
  35. file_OpenArchive( PAnsiChar( zgl_Get( DIRECTORY_APPLICATION ) ) );
  36. fntMain := font_LoadFromFile( dirRes + 'font.zfi' );
  37. texBack := tex_LoadFromFile( dirRes + 'back03.jpg' );
  38. file_CloseArchive();
  39. str := 'Tap here to toggle' + #10 + 'Correction of aspect';
  40. setFontTextScale(15, fntMain);
  41. end;
  42. procedure Draw;
  43. var
  44. w : Single;
  45. begin
  46. ssprite2d_Draw( texBack, 0, 0, 800, 600, 0 );
  47. correctRect.W := text_GetWidth( fntMain, str ) + 16;
  48. correctRect.H := 72;
  49. correctRect.X := 400 - correctRect.W / 2;
  50. correctRect.Y := 100;
  51. if correctAspect Then
  52. begin
  53. pr2d_Rect( correctRect.X, correctRect.Y, correctRect.W, correctRect.H, cl_White05, PR2D_FILL );
  54. pr2d_Rect( correctRect.X, correctRect.Y, correctRect.W, correctRect.H, cl_Lime );
  55. end else
  56. begin
  57. pr2d_Rect( correctRect.X, correctRect.Y, correctRect.W, correctRect.H, cl_Black05, PR2D_FILL );
  58. pr2d_Rect( correctRect.X, correctRect.Y, correctRect.W, correctRect.H, cl_White );
  59. end;
  60. text_DrawInRect( fntMain, correctRect, str, TEXT_HALIGN_CENTER or TEXT_VALIGN_CENTER );
  61. end;
  62. procedure Timer;
  63. begin
  64. if touch_Tap( 0 ) Then
  65. begin
  66. // RU: Android устройства имеют самые разнообразные разрешения экрана и соотношения сторон, поэтому коррекция аспекта просто необходма.
  67. // EN: Android devices have a lot of different screen resolutions and aspects, and because of this correction of aspect is "must have" for project.
  68. if col2d_PointInRect( touch_X( 0 ), touch_Y( 0 ), correctRect ) Then
  69. begin
  70. correctAspect := not correctAspect;
  71. if correctAspect Then
  72. begin
  73. zgl_Enable( CORRECT_WIDTH );
  74. zgl_Enable( CORRECT_HEIGHT );
  75. scr_SetOptions();
  76. end else
  77. begin
  78. zgl_Disable( CORRECT_WIDTH );
  79. zgl_Disable( CORRECT_HEIGHT );
  80. scr_SetOptions();
  81. end;
  82. end;
  83. end;
  84. touch_ClearState();
  85. end;
  86. procedure Restore;
  87. begin
  88. file_OpenArchive( PAnsiChar( zgl_Get( DIRECTORY_APPLICATION ) ) );
  89. font_RestoreFromFile( fntMain, dirRes + 'font.zfi' );
  90. tex_RestoreFromFile( texBack, dirRes + 'back03.jpg' );
  91. file_CloseArchive();
  92. end;
  93. procedure Java_zengl_android_ZenGL_Main( var env; var thiz ); cdecl;
  94. begin
  95. TimeStart := timer_Add( @Timer, 16, t_Start );
  96. zgl_Reg( SYS_LOAD, @Init );
  97. zgl_Reg( SYS_DRAW, @Draw );
  98. zgl_Reg( SYS_ANDROID_RESTORE, @Restore );
  99. scr_SetOptions();
  100. end;
  101. exports
  102. Java_zengl_android_ZenGL_Main,
  103. {$I android_export.inc}
  104. End.