#include "..\C-Engine\CHeader.hpp" #include"BoatControl.hpp" #include "BoatControlPirate.hpp" extern "C" { #include } void BoatControlPirate::Start() { StartBoat(); GetObject()->ORigibody = new Rigibody(GetObject()); GetObject()->AffectTag("Pirate"); //On écrit que c'est un pirate GetObject()->ORigibody->SetMass(500); BateauActuelle->VoilesLongitudinal.Pourcentage = 0;//On met ces voiles à 0 BateauActuelle->VoilesLateralle.Pourcentage = 0; BateauActuelle->viemax = 3;//Les pirates ont 3 de vies. BateauActuelle->vie = BateauActuelle->viemax ; BateauActuelle->CanonDroit.couldown = 0; BateauActuelle->CanonGauche.couldown = 0; } void BoatControlPirate::Update() { UpdateBoat(); int difx , dify ; int distance; float angle , difangle; difx = GetX() - GetEngine()->ListeObject[0]->OTransforms->GetX(); dify = GetY() - GetEngine()->ListeObject[0]->OTransforms->GetY(); distance = sqrt( difx * difx + dify * dify); //On calcul la distance entre le joueur et le bateau pirate. angle = 360 - 90 - radtodegre(atan2( difx , dify)); if(angle > 360) angle -= 360; if(angle < 0) angle += 360; difangle = angle - direction; if(distance < 50 || distance > 350) { difangle = angle - direction + 90; BateauActuelle->VoilesLateralle.Pourcentage = BateauActuelle->VoilesLateralle.Pourcentage - 3; BateauActuelle->VoilesLongitudinal.Pourcentage = BateauActuelle->VoilesLongitudinal.Pourcentage - 3; } else { if(BateauActuelle->VoilesLateralle.Pourcentage < 70)BateauActuelle->VoilesLateralle.Pourcentage = BateauActuelle->VoilesLateralle.Pourcentage + 2; if(BateauActuelle->VoilesLateralle.Pourcentage < 70)BateauActuelle->VoilesLongitudinal.Pourcentage = BateauActuelle->VoilesLongitudinal.Pourcentage + 2; } if(difangle > 360) difangle -= 360; if(difangle < 0) difangle += 360; if(difangle < 180 && difangle > 2)Turn(2);//On aligne le bateau dans la bonne direction if(difangle > 180 && difangle < 358) Turn(-2); if(distance < 50) { Fire(90); Fire(-90); } int affichage = BateauActuelle->vie * 15 / BateauActuelle->viemax;//On affiche la vie du pirate à sa gauche. PrintMini( GetObject()->OTransforms->GetRelativeX() + 18 , 63 - GetObject()->OTransforms->GetRelativeY() - 10 , "P" , 0); ML_line( GetObject()->OTransforms->GetRelativeX() - 2 , 62 - GetObject()->OTransforms->GetRelativeY() , GetObject()->OTransforms->GetRelativeX() - 2 , 62 - GetObject()->OTransforms->GetRelativeY() - affichage, ML_BLACK); Object * Buffer = NULL; Buffer = GetObject()->CollisionTagO("Boulet"); if(Buffer != NULL)//Si il est touché par un boulet de canon il perd une vie. { GetEngine()->DelObject(Buffer); BateauActuelle->vie --; } if( BateauActuelle->vie <= 0)//Si il n'a plus de vie il meurt. { GetEngine()->DelObject(GetObject()); } } void BoatControlPirate::Fire( float angle)//Pareil que pour le BoatControl , seul le tag change. { if(angle == 90) { if(BateauActuelle->CanonDroit.couldown <= 0) { float angletire; angletire = direction - angle; Object * Buffer = new Object; Buffer->OTransforms->SetXY( GetX() + 8 , GetY() + 8); Buffer->ORender->SetRender(RenderBoulet , 1); Buffer->ORigibody = new Rigibody(Buffer); Buffer->ORigibody->SetMass(5); Buffer->AffectTag("BouletP"); SBoulet * Script_Boulet = new SBoulet; Buffer->AffectScript(Script_Boulet); Script_Boulet->time = 20; Buffer->ORigibody->R_body.velocity.x = cos(degretorad(angletire)) * 40; Buffer->ORigibody->R_body.velocity.y = sin(degretorad(angletire)) * 40; GetEngine()->AddObject(Buffer); BateauActuelle->CanonDroit.couldown = 100; } } if(angle == -90) { if(BateauActuelle->CanonGauche.couldown <= 0) { float angletire; angletire = direction - angle; Object * Buffer = new Object; Buffer->OTransforms->SetXY( GetX() + 8 , GetY() + 8); Buffer->ORender->SetRender(RenderBoulet , 1); Buffer->ORigibody = new Rigibody(Buffer); Buffer->ORigibody->SetMass(5); Buffer->AffectTag("BouletP"); SBoulet * Script_Boulet = new SBoulet; Buffer->AffectScript(Script_Boulet); Script_Boulet->time = 20; Buffer->ORigibody->R_body.velocity.x = cos(degretorad(angletire)) * 40; Buffer->ORigibody->R_body.velocity.y = sin(degretorad(angletire)) * 40; GetEngine()->AddObject(Buffer); BateauActuelle->CanonGauche.couldown = 100; } } }