Code Search for Developers
 
 
  

Unit1.pas from Sector-37 at Krugle


Show Unit1.pas syntax highlighted

unit Unit1;

interface

{$I GLScene.inc}

uses
  //VCL
  Windows, SysUtils, Classes, Controls, Forms, StdCtrls, Graphics, ExtCtrls, ComCtrls,
  //GLScene
  GLCadencer, GLScene, GLMisc, GLObjects, GLWin32Viewer, GLGeomObjects,
  GLParticleFX, GLVectorFileObjects, VectorGeometry, GLTrail,
  //FileFormats
  JPEG, GLFile3DS,
  //Strange
  StrangeEngines, StrangeTypesAndConstants, StrangeMovementManager
  {$IFDEF STRANGE_INIFILE_SUPPORT},StrangeIniObjects{$ENDIF};

type
  TForm1 = class(TForm)
    GLScene1: TGLScene;
    GLSceneViewer1: TGLSceneViewer;
    GLCamera1: TGLCamera;
    Ship: TGLDummyCube;
    Cadencer: TGLCadencer;
    Renderer: TGLParticleFXRenderer;
    GLLightSource1: TGLLightSource;
    GLPlane1: TGLPlane;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    world: TGLDummyCube;
    GLArrowLine1: TGLArrowLine;
    Timer1: TTimer;
    GLLightSource2: TGLLightSource;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Button7: TButton;
    Button8: TButton;
    Button9: TButton;
    Button10: TButton;
    FreeForm: TGLFreeForm;
    procedure FormCreate(Sender: TObject);
    procedure GLSceneViewer1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    procedure GLSceneViewer1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure CadencerProgress(Sender: TObject; const deltaTime, newTime: Double);
    procedure Timer1Timer(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Button6Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button9Click(Sender: TObject);
    procedure Button10Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
    procedure Button8Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1:  TForm1;
  Engine: TStrangeEngines;
  mx, my: Integer;
  MovementManager: TStrangeMovementManager;
  Movement: TStrangeMovement;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  //load the space fighter
  FreeForm.LoadFromFile('ship.3ds');
  FreeForm.Scale.Scale(0.04);
  FreeForm.Material.Texture.Image.LoadFromFile('ship.jpg');
  FreeForm.Material.Texture.Enabled := True;

  //describe its movement
  MovementManager := TStrangeMovementManager.Create(Self);
  Movement := MovementManager.GetOrCreateMovement(Ship);
  with Movement.AdvancedLoopWaypoints do
  begin
    Add(-10, -10, 10);
    Add(10, -15, 0);
    Add(5, 10, -5);
    Add(-10, 10, 6);
    Enabled := True;
  end;
  Movement.StartMovingByWaypoints;

  //create the engine dynamicly
  Engine := TStrangeEngines.CreateInitialized(Ship, Cadencer, Renderer, Renderer);

  with Engine.Add do //setup first and only Engine
  begin
    Position.AsAffineVector := AffineVectorMake(0, 0, -4);
    CreateTrail.MarkWidth := 0.15;
    CreateFireFX.FireRadius := 0.1; GetFireFX.ParticleSize := 0.5;
    CreatePerlinFX.EffectScale := 0.3; GetPerlinFXManager.ColorInner.AsWinColor := clBlue;
    CreateLightFX.EffectScale := 0.05;
  end;
end;

procedure TForm1.GLSceneViewer1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  mx := x;
  my := y;
end;

procedure TForm1.GLSceneViewer1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
  if (ssRight in Shift) and (ssLeft in Shift) then
    GLCamera1.AdjustDistanceToTarget(1 - 0.01 * (my - y))
  else
  if (ssRight in Shift) or (ssLeft in Shift) then
    GLCamera1.MoveAroundTarget(y - my, x - mx);
  my := y;
  mx := x;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Engine.StopEngines;
  Movement.StopMovingByWaypoints;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  Engine.StartEngines;
  if not Movement.IsMoving then
    Movement.StartMovingByWaypoints;
end;

procedure TForm1.CadencerProgress(Sender: TObject; const deltaTime, newTime: Double);
begin
  GLSceneViewer1.Invalidate;
  if not Engine.Paused then
    MovementManager.Proceed(deltaTime, newTime);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Caption := 'StrangeEngines Demo   by Da Stranger  -  ' + GLSceneViewer1.FramesPerSecondText;
  GLSceneViewer1.ResetPerformanceMonitor;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Cadencer.Enabled := False;
  Engine.Free;
  MovementManager.Free;
end;

procedure TForm1.Button6Click(Sender: TObject);
begin
{$IFDEF STRANGE_INIFILE_SUPPORT}
  //nothing new here, actually)
  Engine[0].SaveToIniFile('Engine1_Simple.ini');
  Engine.SaveToIniFile('Unit1_Engines.ini', 'Unit # 1', '', '', False, True);
  Engine.SaveToIniFile('Engines_Simple_Private.ini', 'Unit # 1', '', '', True, False);
{$ELSE}
  Assert(False, SIF_ERROR);
{$ENDIF}
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
{$IFDEF STRANGE_INIFILE_SUPPORT}
  Engine[0].LoadFromIniFile('Engine1_Simple.ini');
{$ELSE}
  Assert(False, SIF_ERROR);
{$ENDIF}
end;

procedure TForm1.Button8Click(Sender: TObject);
begin
{$IFDEF STRANGE_INIFILE_SUPPORT}
  Engine.LoadFromIniFile('Unit1_Engines.ini', 'Unit # 1', '', '', False, True);
  Engine.LoadFromIniFile('Engines_Simple_Private.ini', 'Unit # 1', '', '', True, False);
{$ELSE}
  Assert(False, SIF_ERROR);
{$ENDIF}
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
{$IFDEF STRANGE_INIFILE_SUPPORT}
  Engine.Mask.LoadFromIniFile('mask.ini');
{$ELSE}
  Assert(False, SIF_ERROR);
{$ENDIF}
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
{$IFDEF STRANGE_INIFILE_SUPPORT}
  Engine.Mask.SaveToIniFile('mask.ini');
{$ELSE}
  Assert(False, SIF_ERROR);
{$ENDIF}
end;

procedure TForm1.Button7Click(Sender: TObject);
begin
{$IFDEF STRANGE_INIFILE_SUPPORT}
  Engine.Mask.LoadFromIniFile('mask2.ini');
{$ELSE}
  Assert(False, SIF_ERROR);
{$ENDIF}
end;

procedure TForm1.Button9Click(Sender: TObject);
begin
  Engine.Paused := True;
end;

procedure TForm1.Button10Click(Sender: TObject);
begin
  Engine.Paused := False;
end;

end.





See more files for this project here

Sector-37

Sector-37 (real time 3D cosmic strategy)

Project homepage: http://sourceforge.net/projects/sector37
Programming language(s): Pascal
License: lgpl21

  Data/
    mesh.md3
    texture.JPG
  Engine1_Simple.ini
  Engines_Simple_Private.ini
  StrangeEnginesDemo.dpr
  StrangeEnginesDemo.res
  Unit1.dfm
  Unit1.pas
  Unit1_Engines.ini
  _Cleanup.bat
  mask.ini
  mask2.ini
  ship.3ds
  ship.jpg