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