You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

BoatControlPirate.cpp 4.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. #include "..\C-Engine\CHeader.hpp"
  2. #include"BoatControl.hpp"
  3. #include "BoatControlPirate.hpp"
  4. extern "C"
  5. {
  6. #include <math.h>
  7. }
  8. void BoatControlPirate::Start()
  9. {
  10. StartBoat();
  11. GetObject()->AddRigibody();
  12. GetObject()->AffectTag("Pirate"); //On écrit que c'est un pirate
  13. GetObject()->GetRigibody()->SetMass(500);
  14. BateauActuelle->VoilesLongitudinal.Pourcentage = 0;//On met ces voiles à 0
  15. BateauActuelle->VoilesLateralle.Pourcentage = 0;
  16. BateauActuelle->viemax = 3;//Les pirates ont 3 de vies.
  17. BateauActuelle->vie = BateauActuelle->viemax ;
  18. BateauActuelle->CanonDroit.couldown = 0;
  19. BateauActuelle->CanonGauche.couldown = 0;
  20. }
  21. void BoatControlPirate::Update()
  22. {
  23. UpdateBoat();
  24. int difx , dify ;
  25. int distance;
  26. float angle , difangle;
  27. difx = GetX() - GetEngine()->GetListeObject()[0]->GetTransforms()->GetX();
  28. dify = GetY() - GetEngine()->GetListeObject()[0]->GetTransforms()->GetY();
  29. distance = sqrt( difx * difx + dify * dify); //On calcul la distance entre le joueur et le bateau pirate.
  30. angle = 360 - 90 - radtodegre(atan2( difx , dify));
  31. if(angle > 360) angle -= 360;
  32. if(angle < 0) angle += 360;
  33. difangle = angle - direction;
  34. if(distance < 50 || distance > 350)
  35. {
  36. difangle = angle - direction + 90;
  37. BateauActuelle->VoilesLateralle.Pourcentage = BateauActuelle->VoilesLateralle.Pourcentage - 3;
  38. BateauActuelle->VoilesLongitudinal.Pourcentage = BateauActuelle->VoilesLongitudinal.Pourcentage - 3;
  39. }
  40. else
  41. {
  42. if(BateauActuelle->VoilesLateralle.Pourcentage < 70)BateauActuelle->VoilesLateralle.Pourcentage = BateauActuelle->VoilesLateralle.Pourcentage + 2;
  43. if(BateauActuelle->VoilesLateralle.Pourcentage < 70)BateauActuelle->VoilesLongitudinal.Pourcentage = BateauActuelle->VoilesLongitudinal.Pourcentage + 2;
  44. }
  45. if(difangle > 360) difangle -= 360;
  46. if(difangle < 0) difangle += 360;
  47. if(difangle < 180 && difangle > 2)Turn(2);//On aligne le bateau dans la bonne direction
  48. if(difangle > 180 && difangle < 358) Turn(-2);
  49. if(distance < 50)
  50. {
  51. Fire(90);
  52. Fire(-90);
  53. }
  54. int affichage = BateauActuelle->vie * 15 / BateauActuelle->viemax;//On affiche la vie du pirate à sa gauche.
  55. PrintMini( GetObject()->GetTransforms()->GetRelativeX() + 18 , 63 - GetObject()->GetTransforms()->GetRelativeY() - 10 , "P" , 0);
  56. ML_line( GetObject()->GetTransforms()->GetRelativeX() - 2 , 62 - GetObject()->GetTransforms()->GetRelativeY() , GetObject()->GetTransforms()->GetRelativeX() - 2 , 62 - GetObject()->GetTransforms()->GetRelativeY() - affichage, ML_BLACK);
  57. Object * Buffer = NULL;
  58. Buffer = GetObject()->CollisionTagO("Boulet");
  59. if(Buffer != NULL)//Si il est touché par un boulet de canon il perd une vie.
  60. {
  61. GetEngine()->DelObject(Buffer);
  62. BateauActuelle->vie --;
  63. }
  64. if( BateauActuelle->vie <= 0)//Si il n'a plus de vie il meurt.
  65. {
  66. GetEngine()->DelObject(GetObject());
  67. }
  68. }
  69. void BoatControlPirate::Fire( float angle)//Pareil que pour le BoatControl , seul le tag change.
  70. {
  71. if(angle == 90)
  72. {
  73. if(BateauActuelle->CanonDroit.couldown <= 0)
  74. {
  75. float angletire;
  76. angletire = direction - angle;
  77. Object * Buffer = new Object;
  78. Buffer->GetTransforms()->SetXY( GetX() + 8 , GetY() + 8);
  79. Buffer->GetRender()->SetRender(RenderBoulet , 1);
  80. Buffer->AddRigibody();
  81. Buffer->GetRigibody()->SetMass(5);
  82. Buffer->AffectTag("BouletP");
  83. SBoulet * Script_Boulet = new SBoulet;
  84. Buffer->AffectScript(Script_Boulet);
  85. Script_Boulet->time = 20;
  86. Buffer->GetRigibody()->GetBody()->velocity.x = cos(degretorad(angletire)) * 40;
  87. Buffer->GetRigibody()->GetBody()->velocity.y = sin(degretorad(angletire)) * 40;
  88. GetEngine()->AddObject(Buffer);
  89. BateauActuelle->CanonDroit.couldown = 100;
  90. }
  91. }
  92. if(angle == -90)
  93. {
  94. if(BateauActuelle->CanonGauche.couldown <= 0)
  95. {
  96. float angletire;
  97. angletire = direction - angle;
  98. Object * Buffer = new Object;
  99. Buffer->GetTransforms()->SetXY( GetX() + 8 , GetY() + 8);
  100. Buffer->GetRender()->SetRender(RenderBoulet , 1);
  101. Buffer->AddRigibody();
  102. Buffer->GetRigibody()->SetMass(5);
  103. Buffer->AffectTag("BouletP");
  104. SBoulet * Script_Boulet = new SBoulet;
  105. Buffer->AffectScript(Script_Boulet);
  106. Script_Boulet->time = 20;
  107. Buffer->GetRigibody()->GetBody()->velocity.x = cos(degretorad(angletire)) * 40;
  108. Buffer->GetRigibody()->GetBody()->velocity.y = sin(degretorad(angletire)) * 40;
  109. Buffer->GetRigibody()->GetBody()->velocity.y = sin(degretorad(angletire)) * 40;
  110. GetEngine()->AddObject(Buffer);
  111. BateauActuelle->CanonGauche.couldown = 100;
  112. }
  113. }
  114. }