|
@@ -1,9 +1,9 @@
|
|
|
-program demo07;
|
|
|
+library demo07;
|
|
|
|
|
|
{$I zglCustomConfig.cfg}
|
|
|
-
|
|
|
uses
|
|
|
- zgl_main,
|
|
|
+ zgl_application,
|
|
|
+ zgl_file,
|
|
|
zgl_screen,
|
|
|
zgl_window,
|
|
|
zgl_timers,
|
|
@@ -17,20 +17,20 @@ uses
|
|
|
zgl_primitives_2d,
|
|
|
zgl_font,
|
|
|
zgl_text,
|
|
|
- zgl_math_2d,
|
|
|
+ zgl_types,
|
|
|
+ zgl_log,
|
|
|
zgl_utils
|
|
|
;
|
|
|
-
|
|
|
type
|
|
|
TTux = record
|
|
|
Texture : zglPTexture;
|
|
|
- Frame : Integer;
|
|
|
+ Frame : Integer; // указатель на "подтекстуру"
|
|
|
Pos : zglTPoint2D;
|
|
|
end;
|
|
|
|
|
|
var
|
|
|
- dirRes : UTF8String = 'data/';
|
|
|
- fntMain : zglPFont;
|
|
|
+ dirRes : UTF8String = 'assets/';
|
|
|
+ fntMain : Byte;
|
|
|
texLogo : zglPTexture;
|
|
|
texBack : zglPTexture;
|
|
|
texGround : zglPTexture;
|
|
@@ -40,6 +40,8 @@ var
|
|
|
time : Integer;
|
|
|
camMain : zglTCamera2D;
|
|
|
|
|
|
+ TimeStart: Byte;
|
|
|
+
|
|
|
procedure Init;
|
|
|
var
|
|
|
i : Integer;
|
|
@@ -51,6 +53,8 @@ begin
|
|
|
// EN: Camera must be initialized, because camera structure is zero-filled by default.
|
|
|
cam2d_Init( camMain );
|
|
|
|
|
|
+ file_OpenArchive( PAnsiChar( zgl_Get( DIRECTORY_APPLICATION ) ) );
|
|
|
+
|
|
|
// RU: Загружаем текстуру.
|
|
|
// $FF000000 - указывает на то, что бы использовать альфа-канал из изображения.
|
|
|
// TEX_DEFAULT_2D - комплекс флагов, необходимых для 2D-спрайтов. Описание есть в справке.
|
|
@@ -93,13 +97,19 @@ begin
|
|
|
// RU: Загружаем шрифт.
|
|
|
// EN: Load the font.
|
|
|
fntMain := font_LoadFromFile( dirRes + 'font.zfi' );
|
|
|
+
|
|
|
+ file_CloseArchive();
|
|
|
+
|
|
|
+ setTextScale(20, fntMain);
|
|
|
end;
|
|
|
|
|
|
procedure Draw;
|
|
|
var
|
|
|
i : Integer;
|
|
|
t : Single;
|
|
|
+ ScaleF: LongWord;
|
|
|
begin
|
|
|
+ ScaleF := 20; // условно указываем размеры фонта, но можно использовать -> ScaleF := getTextScale(fntMain)
|
|
|
batch2d_Begin();
|
|
|
if time > 255 Then
|
|
|
begin
|
|
@@ -125,10 +135,10 @@ begin
|
|
|
begin
|
|
|
// RU: Рисуем надпись в "рамочке" над пингвином.
|
|
|
// EN: Render the text in frame over penguins.
|
|
|
- t := text_GetWidth( fntMain, 'I''m so red...' ) * 0.75 + 4;
|
|
|
- pr2d_Rect( tux[ i ].Pos.X - 2, tux[ i ].Pos.Y - fntMain.MaxHeight + 4, t, fntMain.MaxHeight, $000000, 200, PR2D_FILL );
|
|
|
- pr2d_Rect( tux[ i ].Pos.X - 2, tux[ i ].Pos.Y - fntMain.MaxHeight + 4, t, fntMain.MaxHeight, $FFFFFF );
|
|
|
- text_DrawEx( fntMain, tux[ i ].Pos.X, tux[ i ].Pos.Y - fntMain.MaxHeight + 8, 0.75, 0, 'I''m so red...' );
|
|
|
+ t := text_GetWidth( fntMain, 'I''m so red...' ) * 0.75;
|
|
|
+ pr2d_Rect( tux[ i ].Pos.X - 2, tux[ i ].Pos.Y - ScaleF + 4, t, ScaleF, $000000, 200, PR2D_FILL );
|
|
|
+ pr2d_Rect( tux[ i ].Pos.X - 2, tux[ i ].Pos.Y - ScaleF + 3, t + 2, ScaleF + 2, $FFFFFF );
|
|
|
+ text_DrawEx( fntMain, tux[ i ].Pos.X, tux[ i ].Pos.Y - ScaleF + 5, 1, 0, 'I''m so red...' );
|
|
|
// RU: Рисуем красного пингвина используя fx2d-функцию и флаг FX_COLOR.
|
|
|
// EN: Render red penguin using fx2d-function and flag FX_COLOR.
|
|
|
fx2d_SetColor( $FF0000 );
|
|
@@ -136,10 +146,10 @@ begin
|
|
|
end else
|
|
|
if i = 7 Then
|
|
|
begin
|
|
|
- t := text_GetWidth( fntMain, '???' ) * 0.75 + 4;
|
|
|
- pr2d_Rect( tux[ i ].Pos.X + 32 - t / 2, tux[ i ].Pos.Y - fntMain.MaxHeight + 4, t, fntMain.MaxHeight, $000000, 200, PR2D_FILL );
|
|
|
- pr2d_Rect( tux[ i ].Pos.X + 32 - t / 2, tux[ i ].Pos.Y - fntMain.MaxHeight + 4, t, fntMain.MaxHeight, $FFFFFF );
|
|
|
- text_DrawEx( fntMain, tux[ i ].Pos.X + 32, tux[ i ].Pos.Y - fntMain.MaxHeight + 8, 0.75, 0, '???', 255, $FFFFFF, TEXT_HALIGN_CENTER );
|
|
|
+ t := text_GetWidth( fntMain, '???' )+ 4;
|
|
|
+ pr2d_Rect( tux[ i ].Pos.X + 32 - t / 2, tux[ i ].Pos.Y - ScaleF + 4, t, ScaleF, $000000, 200, PR2D_FILL );
|
|
|
+ pr2d_Rect( tux[ i ].Pos.X + 32 - t / 2 - 1, tux[ i ].Pos.Y - ScaleF + 3, t + 2, ScaleF + 2, $FFFFFF );
|
|
|
+ text_DrawEx( fntMain, tux[ i ].Pos.X + 32, tux[ i ].Pos.Y - ScaleF + 5, 1, 0, '???', 255, $FFFFFF, TEXT_HALIGN_CENTER );
|
|
|
// RU: Рисуем пингвина приведение используя флаг FX_COLOR установив режим в FX_COLOR_SET :)
|
|
|
// EN: Render penguin ghost using flag FX_COLOR and mode FX_COLOR_SET :)
|
|
|
fx_SetColorMode( FX_COLOR_SET );
|
|
@@ -156,10 +166,10 @@ begin
|
|
|
for i := 10 to 19 do
|
|
|
if i = 13 Then
|
|
|
begin
|
|
|
- t := text_GetWidth( fntMain, 'I''m so big...' ) * 0.75 + 4;
|
|
|
- pr2d_Rect( tux[ i ].Pos.X - 2, tux[ i ].Pos.Y - fntMain.MaxHeight - 10, t, fntMain.MaxHeight, $000000, 200, PR2D_FILL );
|
|
|
- pr2d_Rect( tux[ i ].Pos.X - 2, tux[ i ].Pos.Y - fntMain.MaxHeight - 10, t, fntMain.MaxHeight, $FFFFFF );
|
|
|
- text_DrawEx( fntMain, tux[ i ].Pos.X, tux[ i ].Pos.Y - fntMain.MaxHeight - 4, 0.75, 0, 'I''m so big...' );
|
|
|
+ t := text_GetWidth( fntMain, 'I''m so big...' ) * 0.75;
|
|
|
+ pr2d_Rect( tux[ i ].Pos.X - 2, tux[ i ].Pos.Y - ScaleF - 10, t, ScaleF, $000000, 200, PR2D_FILL );
|
|
|
+ pr2d_Rect( tux[ i ].Pos.X - 2, tux[ i ].Pos.Y - ScaleF - 11, t + 2, ScaleF + 2, $FFFFFF );
|
|
|
+ text_DrawEx( fntMain, tux[ i ].Pos.X, tux[ i ].Pos.Y - ScaleF - 9, 1, 0, 'I''m so big...' );
|
|
|
// RU: Рисуем "большего" пингвина. Т.к. FX2D_SCALE увеличивает спрайт относительно центра, то пингвина следует немного "поднять".
|
|
|
// EN: Render "big" penguin. It must be shifted up, because FX2D_SCALE scale sprite relative to the center.
|
|
|
fx2d_SetScale( 1.25, 1.25 );
|
|
@@ -184,10 +194,10 @@ begin
|
|
|
asprite2d_Draw( texGround, 12 * 32, 300 - 16, 32, 32, 0, 2 );
|
|
|
asprite2d_Draw( texGround, 13 * 32, 300 - 16, 32, 32, 0, 3 );
|
|
|
|
|
|
- t := text_GetWidth( fntMain, 'o_O' ) * 0.75 + 4;
|
|
|
- pr2d_Rect( tux[ 20 ].Pos.X + 32 - t / 2, tux[ 20 ].Pos.Y - fntMain.MaxHeight + 4, t, fntMain.MaxHeight, $000000, 200, PR2D_FILL );
|
|
|
- pr2d_Rect( tux[ 20 ].Pos.X + 32 - t / 2, tux[ 20 ].Pos.Y - fntMain.MaxHeight + 4, t, fntMain.MaxHeight, $FFFFFF );
|
|
|
- text_DrawEx( fntMain, tux[ 20 ].Pos.X + 32, tux[ 20 ].Pos.Y - fntMain.MaxHeight + 8, 0.75, 0, 'o_O', 255, $FFFFFF, TEXT_HALIGN_CENTER );
|
|
|
+ t := text_GetWidth( fntMain, 'o_O' ) * 0.75;
|
|
|
+ pr2d_Rect( tux[ 20 ].Pos.X + 32 - t / 2, tux[ 20 ].Pos.Y - ScaleF + 3, t + 2, ScaleF + 2, $000000, 200, PR2D_FILL );
|
|
|
+ pr2d_Rect( tux[ 20 ].Pos.X + 32 - t / 2, tux[ 20 ].Pos.Y - ScaleF + 2, t + 4, ScaleF + 4, $FFFFFF );
|
|
|
+ text_DrawEx( fntMain, tux[ 20 ].Pos.X + 32, tux[ 20 ].Pos.Y - ScaleF + 5, 1, 0, 'o_O', 255, $FFFFFF, TEXT_HALIGN_CENTER );
|
|
|
asprite2d_Draw( tux[ 20 ].Texture, tux[ 20 ].Pos.X, tux[ 20 ].Pos.Y, 64, 64, 0, tux[ 20 ].Frame div 2 );
|
|
|
end;
|
|
|
|
|
@@ -201,7 +211,9 @@ begin
|
|
|
end;
|
|
|
|
|
|
if time > 255 Then
|
|
|
+ begin
|
|
|
text_Draw( fntMain, 0, 0, 'FPS: ' + u_IntToStr( zgl_Get( RENDER_FPS ) ) );
|
|
|
+ end;
|
|
|
batch2d_End();
|
|
|
end;
|
|
|
|
|
@@ -233,15 +245,36 @@ begin
|
|
|
end;
|
|
|
end;
|
|
|
|
|
|
-Begin
|
|
|
+procedure Restore;
|
|
|
+begin
|
|
|
+ file_OpenArchive( PAnsiChar( zgl_Get( DIRECTORY_APPLICATION ) ) );
|
|
|
+
|
|
|
+ tex_RestoreFromFile( texLogo, dirRes + 'zengl.png' );
|
|
|
+ tex_RestoreFromFile( texBack, dirRes + 'back01.jpg' );
|
|
|
+ tex_RestoreFromFile( texGround, dirRes + 'ground.png' );
|
|
|
+ tex_RestoreFromFile( texTuxWalk, dirRes + 'tux_walking.png' );
|
|
|
+ tex_RestoreFromFile( texTuxStand, dirRes + 'tux_stand.png' );
|
|
|
+
|
|
|
+ font_RestoreFromFile( fntMain, dirRes + 'font.zfi' );
|
|
|
+
|
|
|
+ file_CloseArchive();
|
|
|
+end;
|
|
|
+
|
|
|
+procedure Java_zengl_android_ZenGL_Main( var env; var thiz ); cdecl;
|
|
|
+begin
|
|
|
randomize();
|
|
|
|
|
|
- timer_Add( @Timer, 16 );
|
|
|
+ TimeStart := timer_Add( @Timer, 16, Start );
|
|
|
|
|
|
zgl_Reg( SYS_LOAD, @Init );
|
|
|
zgl_Reg( SYS_DRAW, @Draw );
|
|
|
+ zgl_Reg( SYS_ANDROID_RESTORE, @Restore );
|
|
|
|
|
|
- scr_SetOptions( 800, 600, REFRESH_MAXIMUM, TRUE, TRUE );
|
|
|
+ scr_SetOptions();
|
|
|
+end;
|
|
|
|
|
|
- zgl_Init();
|
|
|
+exports
|
|
|
+ Java_zengl_android_ZenGL_Main,
|
|
|
+ {$I android_export.inc}
|
|
|
End.
|
|
|
+
|