demo13.dpr 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. program demo13;
  2. {$I zglCustomConfig.cfg}
  3. {$I zgl_config.cfg}
  4. {$R *.res}
  5. uses
  6. zgl_screen,
  7. zgl_window,
  8. zgl_timers,
  9. zgl_keyboard,
  10. zgl_render_2d,
  11. zgl_fx,
  12. zgl_textures,
  13. zgl_textures_png,
  14. zgl_textures_jpg,
  15. zgl_sprite_2d,
  16. zgl_particles_2d,
  17. zgl_primitives_2d,
  18. zgl_font,
  19. zgl_text,
  20. zgl_math_2d,
  21. zgl_utils,
  22. zgl_types,
  23. gegl_color;
  24. var
  25. dirRes : UTF8String {$IFNDEF MACOSX} = '../data/' {$ENDIF};
  26. fntMain : LongWord;
  27. texBack : zglPTexture;
  28. debug : Boolean;
  29. particles : zglTPEngine2D;
  30. emitterFire : array[0..2] of zglPEmitter2D;
  31. emitterDiamond: zglPEmitter2D;
  32. emitterRain : zglPEmitter2D;
  33. procedure Init;
  34. begin
  35. texBack := tex_LoadFromFile(dirRes + 'back02.png');
  36. fntMain := font_LoadFromFile(dirRes + 'font.zfi');
  37. // EN: Load three types of fire emitters.
  38. // RU: Çàãðóçêà òð¸õ ðàçíûõ âèäîâ ýìèòòåðîâ îãíÿ.
  39. emitterFire[0] := emitter2d_LoadFromFile(dirRes + 'emitter_fire00.zei');
  40. emitterFire[1] := emitter2d_LoadFromFile(dirRes + 'emitter_fire01.zei');
  41. emitterFire[2] := emitter2d_LoadFromFile(dirRes + 'emitter_fire02.zei');
  42. // EN: Set own particels engine.
  43. // RU: Óñòàíîâêà ñîáñòâåííîãî äâèæêà ýìèòòåðîâ.
  44. pengine2d_Set(@particles);
  45. // EN: Add 6 fire emitters to particles engine. Second parameter of function returns pointer to instance of new emitter, which can be processed manually.
  46. // This instance will be nil after the death, so check everything.
  47. // RU: Äîáàâëÿåì â äâèæîê 6 ýìèòòåðîâ îãíÿ. Âòîðîé ïàðàìåòð ôóíêöèè ïîçâîëÿåò ïîëó÷èòü óêàçàòåëü íà êîíêðåòíûé ýêçåìïëÿð ýìèòòåðà, êîòîðûé ìîæíî áóäåò îáðàáàòûâàòü âðó÷íóþ.
  48. // Äàííûé ýêçåìïëÿð ïîñëå ñìåðòè áóäåò ñîäåðæàòü nil, ïîýòîìó èñïîëüçóéòå ïðîâåðêó.
  49. pengine2d_AddEmitter(emitterFire[0], nil, 642, 190);
  50. pengine2d_AddEmitter(emitterFire[0], nil, 40, 368);
  51. pengine2d_AddEmitter(emitterFire[0], nil, 246, 368);
  52. pengine2d_AddEmitter(emitterFire[1], nil, 532, 244);
  53. pengine2d_AddEmitter(emitterFire[1], nil, 318, 422);
  54. pengine2d_AddEmitter(emitterFire[1], nil, 583, 420);
  55. pengine2d_AddEmitter(emitterFire[2], nil, 740, 525);
  56. emitterDiamond := emitter2d_LoadFromFile(dirRes + 'emitter_diamond.zei');
  57. pengine2d_AddEmitter(emitterDiamond, nil);
  58. emitterRain := emitter2d_LoadFromFile(dirRes + 'emitter_rain.zei');
  59. pengine2d_AddEmitter(emitterRain, nil);
  60. setFontTextScale(15, fntMain);
  61. end;
  62. procedure Draw;
  63. var
  64. i: Integer;
  65. begin
  66. ssprite2d_Draw(texBack, 0, 0, 800, 600, 0);
  67. // EN: Rendering of all emitters in current particles engine.
  68. // RU: Ðåíäåðèíã âñåõ ýìèòòåðîâ â òåêóùåì äâèæêå ÷àñòèö.
  69. pengine2d_Draw();
  70. if debug Then
  71. for i := 0 to particles.Count.Emitters - 1 do
  72. with particles.List[i].BBox do
  73. pr2d_Rect(MinX, MinY, MaxX - MinX, MaxY - MinY, cl_Red);
  74. text_Draw(fntMain, 0, 0, 'FPS: ' + u_IntToStr(zgl_Get(RENDER_FPS)));
  75. text_Draw(fntMain, 0, 20, 'Particles: ' + u_IntToStr(particles.Count.Particles));
  76. text_Draw(fntMain, 0, 40, 'Debug(F1): ' + u_BoolToStr(debug));
  77. end;
  78. procedure KeyMouseEvent;
  79. begin
  80. if key_Press(K_F1) Then
  81. debug := not debug;
  82. end;
  83. procedure Update(dt: Double);
  84. begin
  85. // EN: Process all emitters in current particles engine.
  86. // RU: Îáðàáîòêà âñåõ ýìèòòåðîâ â òåêóùåì äâèæêå ÷àñòèö.
  87. pengine2d_Proc(dt);
  88. end;
  89. procedure Quit;
  90. begin
  91. // RU: Î÷èùàåì ïàìÿòü îò ñîçäàííûõ ýìèòòåðîâ.
  92. // EN: Free allocated memory for emitters.
  93. pengine2d_Set(@particles);
  94. pengine2d_ClearAll();
  95. end;
  96. Begin
  97. randomize();
  98. zgl_Reg(SYS_EVENTS, @KeyMouseEvent);
  99. zgl_Reg(SYS_LOAD, @Init);
  100. zgl_Reg(SYS_DRAW, @Draw);
  101. zgl_Reg(SYS_UPDATE, @Update);
  102. zgl_Reg(SYS_EXIT, @Quit);
  103. wnd_SetCaption(utf8_Copy('13 - Particles'));
  104. zgl_Init();
  105. End.