Unit1.cpp 4.5 KB

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