fFPSMovementC.cpp 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. //---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. #pragma hdrstop
  4. #pragma package(smart_init)
  5. #include "fFPSMovementC.h"
  6. //---------------------------------------------------------------------------
  7. #pragma link "GLS.File3DS"
  8. #pragma link "GLS.FileJPEG"
  9. #pragma link "GLS.SimpleNavigation"
  10. #pragma link "GLS.Coordinates"
  11. #pragma link "GLS.FPSMovement"
  12. #pragma link "GLScene.BaseClasses"
  13. #pragma link "GLS.Cadencer"
  14. #pragma link "GLS.FPSMovement"
  15. #pragma link "GLS.Material"
  16. #pragma link "GLS.Navigator"
  17. #pragma link "GLS.Objects"
  18. #pragma link "GLS.Scene"
  19. #pragma link "GLS.SimpleNavigation"
  20. #pragma link "GLS.VectorFileObjects"
  21. #pragma link "GLS.SceneViewer"
  22. #pragma resource "*.dfm"
  23. TFormFPSMovement *FormFPSMovement;
  24. TGLBFPSMovement *behav, *behav2;
  25. double yangle = 90;
  26. double xangle = 0;
  27. bool WireFrame;
  28. //---------------------------------------------------------------------------
  29. __fastcall TFormFPSMovement::TFormFPSMovement(TComponent * Owner):TForm(Owner)
  30. {
  31. TFileName Path = GetCurrentAssetPath();
  32. SetCurrentDir(Path + "\\model");
  33. Map1->LoadFromFile("map.3ds");
  34. Map1->BuildOctree(3);
  35. Map1->Up->SetVector(0, 1, 0);
  36. Map2->LoadFromFile("beer.3ds");
  37. Map2->BuildOctree(3);
  38. ShowCursor(false);
  39. SetCursorPos(Vcl::Forms::Screen->Width / 2, Vcl::Forms::Screen->Height / 2);
  40. behav = GetFPSMovement(Player);
  41. behav2 = GetFPSMovement(Bot);
  42. }
  43. //---------------------------------------------------------------------------
  44. void __fastcall TFormFPSMovement::FormKeyDown(TObject * Sender, WORD & Key,
  45. TShiftState Shift)
  46. {
  47. // if(Key=Ord("R") ) resetScene;
  48. if(Key == VK_ESCAPE)
  49. Close();
  50. //show/hide arrows
  51. if(Key == VK_F1)
  52. behav->ShowArrows = !behav->ShowArrows;
  53. //pause / unpause
  54. if(Key == VK_PAUSE)
  55. GLCadencer1->Enabled = !GLCadencer1->Enabled;
  56. //first person
  57. if(Key == VK_F2)
  58. GLSceneViewer1->Camera = FirstPersonCamera;
  59. //third person
  60. if(Key == VK_F3)
  61. GLSceneViewer1->Camera = ThirdPersonCamera;
  62. // solid / wireframe
  63. if(IsKeyDown(VK_F5))
  64. {
  65. WireFrame = !WireFrame;
  66. if(WireFrame)
  67. {
  68. Map1->UseMeshMaterials = false;
  69. Map1->Material->PolygonMode = pmLines;
  70. Map2->UseMeshMaterials = false;
  71. Map2->Material->PolygonMode = pmLines;
  72. }
  73. else
  74. {
  75. Map1->UseMeshMaterials = true;
  76. Map1->Material->PolygonMode = pmFill;
  77. Map2->UseMeshMaterials = true;
  78. Map2->Material->PolygonMode = pmFill;
  79. }
  80. }
  81. }
  82. //---------------------------------------------------------------------------
  83. void __fastcall TFormFPSMovement::GLCadencer1Progress(TObject * Sender,
  84. const double deltaTime,
  85. const double newTime)
  86. {
  87. float MovementScale = MovManager->MovementScale;
  88. //) update position according to Keys being pressed
  89. if(IsKeyDown('W') || IsKeyDown('Z'))
  90. behav->MoveForward(MovementScale * deltaTime);
  91. if(IsKeyDown('S'))
  92. behav->MoveForward(-MovementScale * deltaTime);
  93. if(IsKeyDown('A') || IsKeyDown('Q'))
  94. behav->StrafeHorizontal(-MovementScale * deltaTime);
  95. if(IsKeyDown('D'))
  96. behav->StrafeHorizontal(MovementScale * deltaTime);
  97. //move up/down (f||debugging)
  98. if(IsKeyDown(VK_PRIOR) || IsKeyDown(VK_SPACE))
  99. behav->StrafeVertical(MovementScale * deltaTime);
  100. if(IsKeyDown(VK_NEXT))
  101. behav->StrafeVertical(-MovementScale * deltaTime);
  102. //move bot
  103. if(IsKeyDown('I'))
  104. behav2->MoveForward(MovementScale * deltaTime);
  105. if(IsKeyDown('K'))
  106. behav2->MoveForward(-MovementScale * deltaTime);
  107. if(IsKeyDown('J'))
  108. behav2->StrafeHorizontal(-MovementScale * deltaTime);
  109. if(IsKeyDown('L'))
  110. behav2->StrafeHorizontal(MovementScale * deltaTime);
  111. if(IsKeyDown('O'))
  112. behav2->StrafeVertical(MovementScale * deltaTime);
  113. if(IsKeyDown('P'))
  114. behav->StrafeVertical(-MovementScale * deltaTime);
  115. if(IsKeyDown(VK_LEFT))
  116. behav->TurnHorizontal(-70 * deltaTime);
  117. if(IsKeyDown(VK_RIGHT))
  118. behav->TurnHorizontal(70 * deltaTime);
  119. if(IsKeyDown(VK_UP))
  120. behav->TurnVertical(-70 * deltaTime);
  121. if(IsKeyDown(VK_DOWN))
  122. behav->TurnVertical(70 * deltaTime);
  123. //update mouse view
  124. xangle = Mouse->CursorPos.x - Vcl::Forms::Screen->Width / 2;
  125. yangle = Mouse->CursorPos.y - Vcl::Forms::Screen->Height / 2;
  126. SetCursorPos(Vcl::Forms::Screen->Width / 2, Vcl::Forms::Screen->Height / 2);
  127. behav->TurnHorizontal(xangle * 40 * deltaTime);
  128. behav->TurnVertical(-yangle * 20 * deltaTime);
  129. GLSceneViewer1->Invalidate();
  130. }
  131. //---------------------------------------------------------------------------