123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- program demo11;
- {$I zglCustomConfig.cfg}
- {$I zgl_config.cfg}
- {$R *.res}
- uses
- zgl_screen,
- zgl_window,
- zgl_timers,
- zgl_keyboard,
- zgl_fx,
- zgl_textures,
- zgl_textures_png,
- zgl_textures_jpg,
- zgl_grid_2d,
- zgl_font,
- zgl_text,
- zgl_math_2d,
- zgl_types,
- zgl_utils
- ;
- var
- dirRes : UTF8String {$IFNDEF MACOSX} = '../data/' {$ENDIF};
- fntMain : LongWord;
- texBack : zglPTexture;
- grid : zglTGrid2D;
- wave : Single;
- TimeStart : LongWord;
- procedure Init;
- var
- i, j: Integer;
- begin
- texBack := tex_LoadFromFile(dirRes + 'back04.jpg');
- fntMain := font_LoadFromFile(dirRes + 'font.zfi');
- // RU: Èíèöèàëèçàöèÿ ñåòêè ðàçìåðîì 21x16. Îñíîâíàÿ èäåÿ - êàæäûé óçåë ñåòêè ýòî ñìåùåíèå îòíîñèòåëüíî å¸ âåðõíåãî ëåâîãî óãëà.
- // EN: Initialization of grid with size 21x16. Main idea - every node of grid is an offset from the top left corner.
- grid.Cols := 21;
- grid.Rows := 16;
- SetLength(grid.Grid, grid.Cols, grid.Rows);
- for i := 0 to grid.Cols - 1 do
- for j := 0 to grid.Rows - 1 do
- begin
- grid.Grid[i, j].X := i * 40;
- grid.Grid[i, j].Y := j * 40;
- end;
- setFontTextScale(15, fntMain);
- end;
- procedure Draw;
- begin
- // RU: Ðåíäåðèì ñåòêó â êîîðäèíàòàõ 0,0.
- // EN: Render grid in coordinates 0,0.
- sgrid2d_Draw(texBack, 0, 0, @grid);
- text_Draw(fntMain, 0, 0, 'FPS: ' + u_IntToStr(zgl_Get(RENDER_FPS)));
- end;
- procedure Timer;
- var
- i, j: Integer;
- cwave, swave: Single;
- begin
- wave := wave + random(1000) / 10000;
- cwave := cos(wave);
- swave := sin(wave);
- // RU: Ñèìóëÿöèÿ ïðîñòîãî ýôôåêòà ïîä âîäîé.
- // EN: Simulation of simple underwater effect.
- for i := 1 to grid.Cols - 2 do
- for j := 1 to grid.Rows - 2 do
- begin
- if (i mod 2 = 0) and (j mod 2 = 0) Then
- begin
- grid.Grid[i, j].X := i * 40 + cwave;
- grid.Grid[i, j].Y := j * 40 + swave;
- end else
- begin
- grid.Grid[i, j].X := i * 40 - cwave;
- grid.Grid[i, j].Y := j * 40 - swave;
- end;
- end;
- end;
- Begin
- randomize();
- TimeStart := timer_Add(@Timer, 16, t_SleepToStart, 3);
- zgl_Reg(SYS_LOAD, @Init);
- zgl_Reg(SYS_DRAW, @Draw);
- wnd_SetCaption(utf8_Copy('11 - Grid'));
- zgl_Init();
- End.
|