|
- #include "..\C-Engine\CHeader.hpp"
-
- #include"BoatControl.hpp"
-
- extern "C"
- {
- #include <math.h>
- }
-
-
- void BoatControl::StartBoat()
- {
- direction = 180; // Direction des bateaux au départ
- }
-
- void BoatControl::UpdateBoat()
- {
- if(BateauActuelle->VoilesLateralle.Pourcentage < 0)BateauActuelle->VoilesLateralle.Pourcentage = 0; // Pourcentage des voiles
- if(BateauActuelle->VoilesLateralle.Pourcentage > 100)BateauActuelle->VoilesLateralle.Pourcentage = 100;
-
- if(BateauActuelle->VoilesLongitudinal.Pourcentage < 0)BateauActuelle->VoilesLongitudinal.Pourcentage = 0;
- if(BateauActuelle->VoilesLongitudinal.Pourcentage > 100)BateauActuelle->VoilesLongitudinal.Pourcentage = 100;
-
- if(BateauActuelle->CanonDroit.couldown > 0)BateauActuelle->CanonDroit.couldown = BateauActuelle->CanonDroit.couldown - 4; // Diminution du couldown pour les canons.
- if(BateauActuelle->CanonGauche.couldown > 0)BateauActuelle->CanonGauche.couldown = BateauActuelle->CanonGauche.couldown - 4;
-
- float anglelong , anglelat;
- float priseventlong;
- float priseventlat;
- float forceventapplique , forceapplique;
- float forceappliquex , forceappliquey;
-
- GetObject()->GetRender()->SetDirection(direction - 90); //Set de la direction pour l'affichage
-
- anglelong = direction + 135; if(anglelong < 0)anglelong += 360; if(anglelong > 360) anglelong -= 360; // Calcul de l'angle des voiles.
- anglelat = direction + 90; if(anglelat < 0)anglelat += 360; if(anglelat > 360) anglelat -= 360;
-
- priseventlat = sin( degretorad( anglelat - VentActuelle->direction ) ) * BateauActuelle->VoilesLateralle.Pourcentage / 100;// Entre 0 et 1 // Pourcentage de la prise au vent des voiles.
- priseventlong = sin( degretorad( anglelong - VentActuelle->direction ) * BateauActuelle->VoilesLongitudinal.Pourcentage / 100);// Entre -1 et 1
-
- if(priseventlat < 0)priseventlat = 0;
-
- forceventapplique = (( ABS(priseventlat) * VentActuelle->force ) + (ABS(priseventlong * VentActuelle->force)) ); // Force que le vent applique sur le bateau.
- forceapplique = cos(degretorad(direction - VentActuelle->direction)) * forceventapplique * 10;
-
- if(forceapplique < 0)forceapplique = 0;
-
- forceappliquex = cos(degretorad(direction)) * forceapplique; // Passage de forme polaire à carthésienne.
- forceappliquey = sin(degretorad(direction)) * forceapplique;
-
- if(forceappliquex > -10 && forceappliquex < 0)forceappliquex = -10; // On cap les forces
- if(forceappliquey > -10 && forceappliquey < 0)forceappliquey = -10;
-
- if(forceappliquex > 20)forceappliquex = 20;
- if(forceappliquey > 20)forceappliquey = 20;
-
- GetObject()->GetRigibody()->GetBody()->velocity.x = forceappliquex; // On applique les forces.
- GetObject()->GetRigibody()->GetBody()->velocity.y = forceappliquey;
-
- }
-
-
- void BoatControl::Initialisation( Vent * v , Boat * b , Animation * r)
- {
- this->VentActuelle = v; // On initialise les différens pointeurs.
- this->BateauActuelle = b;
- this->RenderBoulet = r;
- }
-
-
- void BoatControl::Turn(float v)
- {
- direction += v; // On fait tourner le bateau.
-
- if(direction < 0)direction += 360;
- if(direction > 360) direction -= 360;
- }
-
-
- void BoatControl::Fire( float angle)
- {
- if(angle == 90) // Tire du canon droit
- {
- if(BateauActuelle->CanonDroit.couldown <= 0)
- {
- float angletire;
-
- angletire = direction - angle; // Angle de tire
-
- Object * Buffer = new Object; // Création du boulet
-
- Buffer->GetTransforms()->SetXY( GetX() + 8 , GetY() + 8); //On place le boulet sur la map
- Buffer->GetRender()->SetRender(RenderBoulet , 1); //On set le rendu du boulet
- Buffer->AddRigibody(); // On donne un Rigibody
- Buffer->GetRigibody()->SetMass(5); //On dit qu'il pèse 5 kilo
-
- Buffer->AffectTag("Boulet");
-
- SBoulet * Script_Boulet = new SBoulet; // On créait le script du boulet
- Buffer->AffectScript(Script_Boulet);
-
- Script_Boulet->time = 20;
-
- Buffer->GetRigibody()->GetBody()->velocity.x = cos(degretorad(angletire)) * 40; //On calcul la trajectoire du boule puis on set sa vitesse.
- Buffer->GetRigibody()->GetBody()->velocity.y = sin(degretorad(angletire)) * 40;
-
- GetEngine()->AddObject(Buffer); // On ajoute le boulet au jeu
-
- BateauActuelle->CanonDroit.couldown = 100; // On place le compteur à 100.
- }
- }
-
- if(angle == -90) // Tire du canon gauche
- {
- if(BateauActuelle->CanonGauche.couldown <= 0)
- {
- float angletire;
-
- angletire = direction - angle;
-
- Object * Buffer = new Object;
-
- Buffer->GetTransforms()->SetXY( GetX() + 8 , GetY() + 8);
- Buffer->GetRender()->SetRender(RenderBoulet , 1);
- Buffer->AddRigibody();
- Buffer->GetRigibody()->SetMass(5);
-
- Buffer->AffectTag("Boulet");
-
- SBoulet * Script_Boulet = new SBoulet;
- Buffer->AffectScript(Script_Boulet);
-
- Script_Boulet->time = 20;
-
- Buffer->GetRigibody()->GetBody()->velocity.x = cos(degretorad(angletire)) * 40;
- Buffer->GetRigibody()->GetBody()->velocity.y = sin(degretorad(angletire)) * 40;
-
- GetEngine()->AddObject(Buffer);
-
- BateauActuelle->CanonGauche.couldown = 100;
- }
- }
-
- }
-
-
- void SBoulet::Update()
- {
- time--; //On diminue sa durée de vie
- if(time < 0) //Si la durée de vie est écoulé alors on le détruit.
- {
- GetEngine()->DelObject(GetObject());
- }
- }
|