demo10.pas 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. program demo10;
  2. {$I zglCustomConfig.cfg}
  3. {$I zgl_config.cfg}
  4. uses
  5. {$IFDEF UNIX}
  6. cthreads,
  7. {$ENDIF}
  8. {$IFDEF USE_ZENGL_STATIC}
  9. zgl_screen,
  10. zgl_window,
  11. zgl_timers,
  12. zgl_keyboard,
  13. zgl_fx,
  14. zgl_file,
  15. zgl_textures,
  16. zgl_textures_png,
  17. zgl_textures_jpg,
  18. zgl_tiles_2d,
  19. zgl_font,
  20. zgl_text,
  21. zgl_math_2d,
  22. zgl_utils
  23. {$ELSE}
  24. zglHeader
  25. {$ENDIF}
  26. ;
  27. var
  28. dirRes : UTF8String {$IFNDEF MACOSX} = '../data/' {$ENDIF};
  29. fntMain : LongWord;
  30. map : zglTTiles2D;
  31. texTiles : zglPTexture;
  32. procedure Init;
  33. var
  34. i, j : Integer;
  35. f : zglTFile;
  36. begin
  37. fntMain := font_LoadFromFile( dirRes + 'font.zfi' );
  38. texTiles := tex_LoadFromFile( dirRes + 'tiles.png' );
  39. tex_SetFrameSize( texTiles, 32, 32 );
  40. // RU: Инициализация тайлов размером 32x32. Параметр Count указывает на количество тайлов по X и Y. Массив Tiles содержит кадры для каждого тайла.
  41. // EN: Initialization of tiles with size 32x32. Parameter Count set amount of tiles on X and Y. Array Tiles contains frames for every tile.
  42. map.Width := 32;
  43. map.Height := 32;
  44. map.X := 25;
  45. map.Y := 19;
  46. SetLength( map.Tiles, map.X, map.Y );
  47. // RU: Заполняем карту "травой", 19 кадр.
  48. // EN: Fill the map by "grass", 19 frame.
  49. for i := 0 to map.X - 1 do
  50. for j := 0 to map.Y - 1 do
  51. map.Tiles[ i, j ] := 19;
  52. // RU: Загружаем карту из бинарного файла.
  53. // EN: Load map from binary file.
  54. file_Open( f, dirRes + 'ground.map', FOM_OPENR );
  55. for i := 0 to map.X - 1 do
  56. file_Read( f, map.Tiles[ i, 0 ], map.Y * SizeOf( Integer ) );
  57. file_Close( f );
  58. setFontTextScale(15, fntMain);
  59. end;
  60. procedure Draw;
  61. begin
  62. // RU: Рендерим тайлы в координатах 0,0.
  63. // EN: Render tiles in coordinates 0,0.
  64. tiles2d_Draw( texTiles, 0, 0, @map );
  65. text_Draw( fntMain, 0, 0, 'FPS: ' + u_IntToStr( zgl_Get( RENDER_FPS ) ) );
  66. text_Draw( fntMain, 180, 30, 'This is a tarrible example of tile map, but main idea should be clear :)' );
  67. end;
  68. Begin
  69. {$IFNDEF USE_ZENGL_STATIC}
  70. if not zglLoad( libZenGL ) Then exit;
  71. {$ENDIF}
  72. randomize();
  73. zgl_Reg( SYS_LOAD, @Init );
  74. zgl_Reg( SYS_DRAW, @Draw );
  75. wnd_SetCaption(utf8_Copy('10 - Tiles'));
  76. zgl_Init();
  77. End.