fdJoistickplayer.pas 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. unit fdJoistickplayer;
  2. interface
  3. uses
  4. System.SysUtils,
  5. System.Types,
  6. System.UITypes,
  7. System.Classes,
  8. System.Variants,
  9. System.Math.Vectors,
  10. FMX.Types,
  11. FMX.Controls,
  12. FMX.Forms,
  13. FMX.Graphics,
  14. FMX.Dialogs,
  15. FMX.Controls3D,
  16. FMX.Objects3D,
  17. FMX.Viewport3D,
  18. FMX.MaterialSources,
  19. FMX.Ani,
  20. FMX.Layouts,
  21. FMX.Controls.Presentation,
  22. FMX.StdCtrls,
  23. FMX.ListBox,
  24. FMX.Objects,
  25. FMX.Types3D,
  26. uGBEUtils3D,
  27. GBE.Joystick,
  28. GBE.PlayerPosition,
  29. GBE.Heightmap,
  30. GBE.Viewport3D;
  31. type
  32. TFormJoistick = class(TForm)
  33. GBEViewport: TGBEViewport3D;
  34. dmyMonde: TDummy;
  35. GBEHeightmap1: TGBEHeightmap;
  36. TextureMaterialSource1: TTextureMaterialSource;
  37. FloatAnimation1: TFloatAnimation;
  38. ColorMaterialSource1: TColorMaterialSource;
  39. GBEPlayerPosition1: TGBEPlayerPosition;
  40. Layout1: TLayout;
  41. GBEJoystick1: TGBEJoystick;
  42. Layout2: TLayout;
  43. GBEJoystick2: TGBEJoystick;
  44. corps: TCube;
  45. Label1: TLabel;
  46. Switch1: TSwitch;
  47. Label2: TLabel;
  48. ComboBox1: TComboBox;
  49. Rectangle1: TRectangle;
  50. Image1: TImage;
  51. Image2: TImage;
  52. Dummy1: TDummy;
  53. jambeD: TCube;
  54. jambeG: TCube;
  55. Sphere1: TSphere;
  56. brasD: TCube;
  57. brasG: TCube;
  58. texCorps: TTextureMaterialSource;
  59. texTete: TTextureMaterialSource;
  60. texJambe: TTextureMaterialSource;
  61. texBras: TTextureMaterialSource;
  62. procedure FormCreate(Sender: TObject);
  63. procedure FloatAnimation1Process(Sender: TObject);
  64. procedure Switch1Switch(Sender: TObject);
  65. procedure ComboBox1Change(Sender: TObject);
  66. private
  67. { Déclarations privées }
  68. public
  69. { Déclarations publiques }
  70. vitesse : single;
  71. end;
  72. const
  73. tailleJoueur = 0.7; // Taille du joueur pour la vue FirstPerson
  74. vitesseMax = 0.1; // Vitesse maxi de déplacement
  75. var
  76. FormJoistick: TFormJoistick;
  77. implementation
  78. {$R *.fmx}
  79. procedure TFormJoistick.ComboBox1Change(Sender: TObject);
  80. begin
  81. case ComboBox1.ItemIndex of
  82. 0: GBEPlayerPosition1.TypePosition := TGBETypePosition.thirdPerson;
  83. 1: GBEPlayerPosition1.TypePosition := TGBETypePosition.firstPerson;
  84. end;
  85. end;
  86. procedure TFormJoistick.FloatAnimation1Process(Sender: TObject);
  87. begin
  88. if GBEJoystick2.Acceleration = 0 then vitesse := 0
  89. else begin
  90. if abs(vitesse) <= vitesseMax then vitesse := vitesse + GBEJoystick2.Acceleration/5000;
  91. GBEPlayerPosition1.NextPosition.Position.point := GBEPlayerPosition1.Position.Point - GBEJoystick2.direction * vitesse;
  92. GBEPlayerPosition1.NextPosition.position.Y := GBEHeightmap1.GetHeight(GBEPlayerPosition1.Position.Point);
  93. if GBEPlayerPosition1.TypePosition = TGBETypePosition.firstPerson then
  94. GBEPlayerPosition1.NextPosition.position.Y := GBEPlayerPosition1.NextPosition.position.Y + tailleJoueur;
  95. // On controle que la prochaine position est dans l'aire de jeu
  96. if (GBEPlayerPosition1.NextPosition.position.Point.x < GBEHeightmap1.Depth*0.5) and
  97. (GBEPlayerPosition1.NextPosition.position.Point.x > -GBEHeightmap1.Depth*0.5) and
  98. (GBEPlayerPosition1.NextPosition.position.Point.z < GBEHeightmap1.width*0.5) and
  99. (GBEPlayerPosition1.NextPosition.position.Point.z > -GBEHeightmap1.Depth*0.5) then
  100. begin
  101. GBEPlayerPosition1.Position.point := GBEPlayerPosition1.NextPosition.position.Point; // Si c'est le cas, on peut affecter la position à la procahine calculée
  102. end
  103. else vitesse := 0; // sinon on ne déplace pas le joueur et on réinitialise sa vitesse de déplacement
  104. end;
  105. end;
  106. procedure TFormJoistick.FormCreate(Sender: TObject);
  107. var
  108. stream : TResourceStream;
  109. begin
  110. Stream := TResourceStream.Create(HInstance, 'heightmap32', RT_RCDATA);
  111. GBEHeightmap1.loadHeightmapFromStream(stream);
  112. stream.Free;
  113. GBEViewport.Camera := GBEPlayerPosition1.getCamera;
  114. GBEViewport.UsingDesignCamera := false;
  115. GBEJoystick1.Width := 0;
  116. GBEJoystick2.Width := 0;
  117. GBEJoystick2.deplacement := Point3D(-1,0,1);
  118. vitesse := 0;
  119. FloatAnimation1.Start;
  120. end;
  121. procedure TFormJoistick.Switch1Switch(Sender: TObject);
  122. begin
  123. GBEHeightmap1.ShowLines := Switch1.IsChecked;
  124. end;
  125. end.