www.pudn.com > XParticles.rar > MainUnit.pas
unit MainUnit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, AsphyreFonts, AsphyreImages, AsphyreSubsc, AsphyreDevices,
Asphyre2D, AsphyreCanvas, AsphyreDb, AsphyreTimers, AsphyreStates, XParticles,
AsphyreDef;
type
TMainForm = class(TForm)
DeviceState: TDeviceState;
Device: TAsphyreDevice;
Timer: TAsphyreTimer;
ASDb: TASDb;
MyCanvas: TAsphyreCanvas;
Images: TAsphyreImages;
Fonts: TAsphyreFonts;
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure TimerProcess(Sender: TObject);
procedure DeviceRender(Sender: TObject);
procedure TimerTimer(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure DeviceInitialize(Sender: TObject; var Success: Boolean);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
MainForm: TMainForm;
XSys: TXParticleSystem;
Delta: integer = 0;
implementation
{$R *.dfm}
procedure TMainForm.DeviceInitialize(Sender: TObject; var Success: Boolean);
begin
if (Success) then Fonts.LoadFromASDb(ASDb);
if (Success) then Fonts[0].Interleave:= 2.0;
if (Success) then Images.LoadFromASDb(ASDb);
end;
procedure TMainForm.FormCreate(Sender: TObject);
var
Ready: boolean;
PSS: TXParticleSystemSettings;
Stream: TFileStream;
Val: PInteger;
begin
ClientWidth:= Device.Width;
ClientHeight:= Device.Height;
Ready:= Device.Initialize();
if (not Ready) then
begin
ShowMessage('Device initializing failed!');
Exit;
end;
DeviceState.Update();
Delta:= trunc(1000 / Timer.Speed);
XSys:= TXParticleSystem.Create(PSS);
// Load XParticleSystem settings
Stream:= TFileStream.Create(ExtractFilePath(Application.ExeName)+'ForFireWord.pss', fmOpenRead);
if (not XSys.SettingsLoadFromStream(Stream)) then
ShowMessage('Unable to load ParticleSystem settings');
Stream.Free();
XSys.Texture:= Images[0];
//XSys.AddEmitters([Point(0, 0)]);
XSys.AddEmittersFromImage(Images[1], $FF000000);
XSys.ScaleEmitters(1.2);
XSys.StartAt(80, 250);
Timer.Enabled:= Ready;
end;
procedure TMainForm.FormDestroy(Sender: TObject);
begin
Device.Finalize();
end;
procedure TMainForm.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
XSys.StartAt(X, Y);
end;
procedure TMainForm.TimerProcess(Sender: TObject);
begin
XSys.Update(Delta);
end;
procedure TMainForm.TimerTimer(Sender: TObject);
begin
Device.Render($FF000000, true);
Timer.Process();
Device.Flip();
end;
procedure TMainForm.DeviceRender(Sender: TObject);
begin
XSys.Render(MyCanvas);
Fonts[0].TextOut('FPS: ' + IntToStr(Timer.FrameRate), 5, 5, $FF00C000);
Fonts[0].TextOut('Particles: ' + IntToStr(XSys.ParticlesAlive), 5, 20, $FF00C000);
Fonts[0].TextOut('Emitters: ' + IntToStr(Length(XSys.Emitters)), 5, 35, $FF00C000);
end;
end.