KirbyDreamLand/IA_Whispy.cpp

212 lines
4.1 KiB
C++
Raw Normal View History

2016-07-12 19:10:22 +02:00
#include "IA_Whispy.hpp"
Mob_Whispy::Mob_Whispy()
{
direction = false;
choix = 0;
life = 6;
couldown = 0;
}
void Mob_Whispy::Update()
{
switch(choix)
{
case 0:
SetIt(0);
break;
case 1:
SetIt(0);
if(!rand_int(80))
{
Object * Buffer = new Object;
Ia_Apple * Buffer_Script = new Ia_Apple;
Buffer->AffectScript(Buffer_Script);
Buffer->GetTransform()->SetXY( rand_int_ab(16,80) , 140);
Buffer->AddRigidBody();
Buffer->GetRigidBody()->SetMass(1);
Buffer->GetRender()->SetRender(A_Apple);
Buffer->AffectTag("Ennemis");
GetEngine()->AddObject(Buffer);
couldown --;
}
if(!couldown)choix = 0;
break;
case 2:
SetIt(1);
if(!rand_int(50))
{
Object * Buffer = new Object;
Ia_Souffle * Buffer_Script = new Ia_Souffle;
Buffer->AffectScript(Buffer_Script);
2016-07-19 15:40:58 +02:00
Buffer->GetTransform()->SetXY( GetX() - 4 , GetY() + 2);
2016-07-12 19:10:22 +02:00
Buffer->AddRigidBody();
Buffer->GetRender()->SetRender(A_Souffle);
Buffer->GetRender()->ReverseRender(true);
Buffer->AffectTag("Boss");
GetEngine()->AddObject(Buffer);
couldown --;
}
if(!couldown)choix = 0;
break;
case 3:
SetIt(2);
couldown--;
if(!couldown)choix = 0;
break;
default: break;
}
GetEngine()->UpdateRelativePosition();
int x = GetObject()->GetTransform()->GetRelativeX() + 16;
int y = 64 - GetObject()->GetTransform()->GetRelativeY() + 6;
for(int i = 0 ; i < life ; i++)
{
ML_rectangle( x + i * 4 , y , x + 2 + i * 4, y - 3 , 1 , ML_BLACK , ML_BLACK);
}
Object * Star = GetObject()->GetObjectCollisionTag("Star");
if(Star)
{
GetEngine()->DelObject(Star);
life --;
choix = 3;
couldown = 35;
if(life < 1)
{
choix = -1;
SetIt(2);
2016-07-19 15:40:58 +02:00
Object * Buffer = new Object;
Ia_FS * Buffer_Script = new Ia_FS;
Buffer->AffectScript(Buffer_Script);
Buffer->GetTransform()->SetXY( 50, 50 );
Buffer->GetRender()->SetRender(A_FS);
Buffer->AffectTag("FS");
GetEngine()->AddObject(Buffer);
2016-07-12 19:10:22 +02:00
GetObject()->AffectTag(" ");
}
}
}
void Mob_Whispy::UpdateEverySecond()
{
Object * Kirby;
for(int i = 0 ; i < GetEngine()->GetCurrentLevel()->GetNbObject() ; i++ )
{
if(!strcmp(GetEngine()->GetCurrentLevel()->GetListeObject()[i]->GetTag(), "Kirby"))Kirby = GetEngine()->GetCurrentLevel()->GetListeObject()[i];
}
int y = Kirby->GetTransform()->GetY();
if(!choix && y < 200)
{
choix = rand_int(6);
if(choix > 2)choix = 0;
couldown = 3;
}
}
Ia_Apple::Ia_Apple()
{
rebond = 1;
}
void Ia_Apple::Update()
{
const unsigned char Arrow[]={0xff, 0xff, 0x6f, };
if(!GetObject()->IsOnScreen() && GetY() > 32)
{
ML_bmp_or_cl(Arrow,GetObject()->GetTransform()->GetRelativeX() + 6 , 1 , 4 , 3);
}
GetObject()->GetRender()->SetDirection(GetObject()->GetRender()->GetDirection() + 20);
if(CollisionDecor( GetX() , GetY() - 1 ) )
{
if(rebond)
{
GetBody()->velocity.y = 12;
GetBody()->velocity.x = 12;
rebond --;
}
else
{
GetEngine()->DelObject(GetObject());
}
}
}
void Ia_Souffle::Update()
{
Move( - 3 , rand_int_ab(-1,1));
if(CollisionDecor( GetX() - 1, GetY() ) )GetEngine()->DelObject(GetObject());
}
2016-07-19 15:40:58 +02:00
Ia_FS::Ia_FS()
{
time = 0;
}
void Ia_FS::Update()
{
if(!time)GetObject()->GetRender()->SetDirection(GetObject()->GetRender()->GetDirection() + 45);
time ++;
if(time > 5)time = 0;
}