2016-04-30 14:07:43 +02:00
# 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 ;
2016-05-04 12:41:49 +02:00
GetObject ( ) - > GetRender ( ) - > SetDirection ( direction - 90 ) ; //Set de la direction pour l'affichage
2016-04-30 14:07:43 +02:00
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 <20> carth<74> 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 ;
2016-05-04 12:41:49 +02:00
GetObject ( ) - > GetRigibody ( ) - > GetBody ( ) - > velocity . x = forceappliquex ; // On applique les forces.
GetObject ( ) - > GetRigibody ( ) - > GetBody ( ) - > velocity . y = forceappliquey ;
2016-04-30 14:07:43 +02:00
}
void BoatControl : : Initialisation ( Vent * v , Boat * b , Animation * r )
{
this - > VentActuelle = v ; // On initialise les diff<66> 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<43> ation du boulet
2016-05-04 12:41:49 +02:00
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
2016-04-30 14:07:43 +02:00
Buffer - > AffectTag ( " Boulet " ) ;
SBoulet * Script_Boulet = new SBoulet ; // On cr<63> ait le script du boulet
Buffer - > AffectScript ( Script_Boulet ) ;
Script_Boulet - > time = 20 ;
2016-05-04 12:41:49 +02:00
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 ;
2016-04-30 14:07:43 +02:00
GetEngine ( ) - > AddObject ( Buffer ) ; // On ajoute le boulet au jeu
BateauActuelle - > CanonDroit . couldown = 100 ; // On place le compteur <20> 100.
}
}
if ( angle = = - 90 ) // Tire du canon gauche
{
if ( BateauActuelle - > CanonGauche . couldown < = 0 )
{
float angletire ;
angletire = direction - angle ;
Object * Buffer = new Object ;
2016-05-04 12:41:49 +02:00
Buffer - > GetTransforms ( ) - > SetXY ( GetX ( ) + 8 , GetY ( ) + 8 ) ;
Buffer - > GetRender ( ) - > SetRender ( RenderBoulet , 1 ) ;
Buffer - > AddRigibody ( ) ;
Buffer - > GetRigibody ( ) - > SetMass ( 5 ) ;
2016-04-30 14:07:43 +02:00
Buffer - > AffectTag ( " Boulet " ) ;
SBoulet * Script_Boulet = new SBoulet ;
Buffer - > AffectScript ( Script_Boulet ) ;
Script_Boulet - > time = 20 ;
2016-05-04 12:41:49 +02:00
Buffer - > GetRigibody ( ) - > GetBody ( ) - > velocity . x = cos ( degretorad ( angletire ) ) * 40 ;
Buffer - > GetRigibody ( ) - > GetBody ( ) - > velocity . y = sin ( degretorad ( angletire ) ) * 40 ;
2016-04-30 14:07:43 +02:00
GetEngine ( ) - > AddObject ( Buffer ) ;
BateauActuelle - > CanonGauche . couldown = 100 ;
}
}
}
void SBoulet : : Update ( )
{
time - - ; //On diminue sa dur<75> e de vie
if ( time < 0 ) //Si la dur<75> e de vie est <20> coul<75> alors on le d<> truit.
{
GetEngine ( ) - > DelObject ( GetObject ( ) ) ;
}
}