123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- //---------------------------------------------------------------------------
- #include <vcl.h>
- #pragma hdrstop
- #include "Unit1.h"
- //---------------------------------------------------------------------------
- #pragma package(smart_init)
- #pragma link "GLBaseClasses"
- #pragma link "GLCadencer"
- #pragma link "GLCoordinates"
- #pragma link "GLCrossPlatform"
- #pragma link "GLGraph"
- #pragma link "GLMaterial"
- #pragma link "GLObjects"
- #pragma link "GLScene"
- #pragma link "GLVectorFileObjects"
- #pragma link "GLWin32Viewer"
- #pragma link "GLFileSMD"
- #pragma resource "*.dfm"
- TForm1 *Form1;
- //---------------------------------------------------------------------------
- __fastcall TForm1::TForm1(TComponent* Owner)
- : TForm(Owner)
- {
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::FormCreate(TObject *Sender)
- {
- SetGLSceneMediaDir();
- // We load the SMD model here
- // Note the actor was linked to a material library, and textures are loaded
- // automatically (4 textures are used by this model)
- //
- // Kind thanks to ~A.u.s.t.i.n. & Neal 'Guplik' Corbett for the model
- // and allowing its use ;)
- Actor1->LoadFromFile("trinityRage.smd");
- // Now we load the walk & run animations and "fix" their translation
- // (HL walk/run animations have a built-in "slide" that we don't want here)
- Actor1->AddDataFromFile("walk.smd");
- Actor1->Animations->Items[1]->MakeSkeletalTranslationStatic();
- Actor1->AddDataFromFile("run.smd");
- Actor1->Animations->Items[2]->MakeSkeletalTranslationStatic();
- // Then load the two jumps
- Actor1->AddDataFromFile("long_jump.smd");
- Actor1->AddDataFromFile("jump.smd");
- // And the 'look_left_right' blending animations, that we immediately
- // assign to the controler. The MakeSkeletalRotationDelta removes absolute
- // information from the SMD (which HL may use, but GLScene doesn't)
- Actor1->AddDataFromFile("look_left_right.smd");
- Actor1->Animations->Items[5]->MakeSkeletalRotationDelta();
- AnimationControler1->AnimationName = "look_left_right";
- // Skeleton visible, and start with walk animation
- // (pseudo-animation 0 is for the static model in its default attitude)
- Actor1->OverlaySkeleton = true;
- baseAnimation = "walk";
- Actor1->SwitchToAnimation(baseAnimation);
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::FormMouseWheel(TObject *Sender, TShiftState Shift, int WheelDelta,
- TPoint &MousePos, bool &Handled)
- {
- GLCamera1 = GLSceneViewer1->Camera;
- GLCamera1->AdjustDistanceToTarget(Power(1.1, WheelDelta / 120));
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::RBWalkClick(TObject *Sender)
- {
- // user requested 'walk'
- baseAnimation = "walk";
- Actor1->SwitchToAnimation(baseAnimation, true);
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::RBRunClick(TObject *Sender)
- {
- // user requested 'run'
- baseAnimation = "run";
- Actor1->SwitchToAnimation(baseAnimation, true);
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::BULongJumpClick(TObject *Sender)
- {
- // Smoothly switch to Long Jump
- Actor1->SwitchToAnimation(3, true);
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::BUHighJumpClick(TObject *Sender)
- {
- // Smoothly switch to High Jump
- Actor1->SwitchToAnimation(4, true);
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::Actor1EndFrameReached(TObject *Sender)
- {
- // If we weren't walking, switch back to walk
- if (Actor1->CurrentAnimation() != baseAnimation)
- Actor1->SwitchToAnimation(baseAnimation, true);
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::CBBlendClick(TObject *Sender)
- {
- // Enable/disable blending by binding or unbinding the animation controler
- // to the actor
- if (CBBlend->Checked)
- {
- AnimationControler1->Actor = Actor1;
- TrackBar1Change(this);
- }
- else
- AnimationControler1->Actor = NULL;
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::TrackBar1Change(TObject *Sender)
- {
- // Blending along the controler's animation is just a matter of adjusting
- // the ratio, with 0 = first frame and 1 = last frame.
- AnimationControler1->Ratio = TrackBar1->Position*0.01;
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::CheckBox1Click(TObject *Sender)
- {
- Actor1->OverlaySkeleton = CheckBox1->Checked;
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::GLSceneViewer1MouseDown(TObject *Sender, TMouseButton Button,
- TShiftState Shift, int X, int Y)
- {
- mx = X; my = Y;
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::GLSceneViewer1MouseMove(TObject *Sender, TShiftState Shift,
- int X, int Y)
- {
- if (Shift.Contains(ssLeft) || Shift.Contains(ssRight))
- {
- GLCamera1->MoveAroundTarget(my-Y, mx-X);
- mx = X; my = Y;
- }
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::Timer1Timer(TObject *Sender)
- {
- LabelFPS->Caption = Format("%.1f FPS",
- ARRAYOFCONST ((GLSceneViewer1->FramesPerSecond())));
- GLSceneViewer1->ResetPerformanceMonitor();
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::GLCadencer1Progress(TObject *Sender, const double deltaTime,
- const double newTime)
- {
- GLScene1->NotifyChange(NULL);
- }
- //---------------------------------------------------------------------------
|