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.