InvasionSeanchans/BoatControlPirate.cpp

166 lines
4.8 KiB
C++

#include "..\C-Engine\CHeader.hpp"
#include"BoatControl.hpp"
#include "BoatControlPirate.hpp"
extern "C"
{
#include <math.h>
}
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;
}
}
}