123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- //---------------------------------------------------------------------------
- #include <vcl.h>
- #include <tchar.h>
- #pragma hdrstop
- #include "Unit1.h"
- //---------------------------------------------------------------------------
- #pragma package(smart_init)
- #pragma link "GLS.BaseClasses"
- #pragma link "GLS.Cadencer"
- #pragma link "GLS.Coordinates"
- #pragma link "GLS.Objects"
- #pragma link "Physics.ODEManager"
- #pragma link "GLS.Scene"
- #pragma link "GLS.Utils"
- #pragma link "GLS.SimpleNavigation"
- #pragma link "GLS.SceneViewer"
- #pragma resource "*.dfm"
- TForm1 *Form1;
- //---------------------------------------------------------------------------
- __fastcall TForm1::TForm1(TComponent* Owner)
- : TForm(Owner)
- {
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::FormCreate(TObject *Sender)
- {
- // Initialize default values from the one of DesignTime;
- TrackBarMotionSpeed->Position = RoundInt(GetOrCreateOdeStatic(ConveyorBelt1)->Surface->Motion1);
- Friction->Text = FloatToStr(GetOrCreateOdeStatic(ConveyorBelt1)->Surface->Mu);
- FDirX->Text = "0";
- FDirY->Text = "0";
- FDirZ->Text = "1";
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::FormShow(TObject *Sender)
- {
- GLCadencer1->Enabled = true;
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::GLCadencer1Progress(TObject *Sender, const double deltaTime,
- const double newTime)
- {
- GLODEManager1->Step(deltaTime);
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::GLODEManager1Collision(TObject *Sender, TObject *Object1,
- TObject *Object2, TdContact &Contact, bool &HandleCollision)
- {
- if (Object2 = GetOrCreateOdeStatic(ConveyorBelt1))
- {
- Contact.fdir1[0] = FDirectionVector.X; // x
- Contact.fdir1[1] = FDirectionVector.Y; // y
- Contact.fdir1[2] = FDirectionVector.Z; // z
- Contact.fdir1[3] = FDirectionVector.W; // not used
- }
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::TrackBarMotionSpeedChange(TObject *Sender)
- {
- TGLODEStatic *AODEStatic;
- AODEStatic = (TGLODEStatic*)(ConveyorBelt1->Behaviours->Items[0]);
- AODEStatic->Surface->Motion1 = TrackBarMotionSpeed->Position;
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::FrictionChange(TObject *Sender)
- {
- TGLODEStatic *AODEStatic;
- AODEStatic = (TGLODEStatic*)(ConveyorBelt1->Behaviours->Items[0]);
- AODEStatic->Surface->Mu =
- Gls::Utils::StrToFloatDef(Friction->Text, GetOrCreateOdeStatic(ConveyorBelt1)->Surface->Mu);
- FrictionFeedback->Caption = Format("µs = %.2f", ARRAYOFCONST((GetOrCreateOdeStatic(ConveyorBelt1)->Surface->Mu)));
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::AddODECubeClick(TObject *Sender)
- {
- TGLCube *ACube;
- TGLODEDynamic *AODEDynamic;
- TGLODEElementBox *AODEElementBox;
- // Create a new GLScene cube and add it to the current GLScene1
- ACube = (TGLCube *)(SpawnPoint->AddNewChild(__classid(TGLCube)));
- ACube->Parent = GLScene1->Objects;
- ACube->Position->Assign(SpawnPoint->Position);
- ACube->Material->FrontProperties->Diffuse->RandomColor();
- // Add ODE Dynamic behaviour on it
- AODEDynamic = new TGLODEDynamic(ACube->Behaviours);
- AODEDynamic->Manager = GLODEManager1;
- // Set µs value to 1 (default=1000), just uses the one from the conveyor
- AODEDynamic->Surface->Mu = 1;
- // Finally create physical data in this behaviour
- AODEElementBox = (TGLODEElementBox *) AODEDynamic->AddNewElement(__classid(TGLODEElementBox));
- if (AODEElementBox)
- {
- AODEElementBox->BoxWidth = ACube->CubeWidth;
- AODEElementBox->BoxHeight = ACube->CubeHeight;
- AODEElementBox->BoxDepth = ACube->CubeDepth;
- }
- // The new camera target is the last added cube
- GLCamera1->TargetObject = ACube;
- // The spawn position is increased
- SpawnPoint->Position->Y = SpawnPoint->Position->Y + 1;
- }
- //---------------------------------------------------------------------------
|