#include "CEventReceiver.h"
CEventReceiver::CEventReceiver(irr::scene::IAnimatedMeshSceneNode* Nmodele)//revoilà notre constructeur :)
{
m_Nmodele = Nmodele;//On pointe le mesh passe en parametre.
m_isAvance = false;//Par défaut , le modele est immobile .Donc le booléen qui indique si l'on bouge est à false
m_animrun=true;//et comme l'animation n'est du coup pas "courir" , on met notre booléen à false aussi
m_isRecule=false;
m_isDroite=false;
m_isGauche=false;
m_isSauter=false;
}
bool CEventReceiver::OnEvent(const irr::SEvent &event)//En cas d'évenement :
{
//On verifie que le pointeur est ok
if(m_Nmodele != 0
//Qu'il s'agit d'un event concernant un appui/relachement de touche
&& event.EventType == irr::EET_KEY_INPUT_EVENT
//Qu'il s'agit bien de la touche z
&& event.KeyInput.Key == irr::KEY_KEY_Z)
{
//Si il s'agit d'un appui
if(event.KeyInput.PressedDown == true)
m_isAvance = true;//On passe notre booléen "est en train de bouger" à true
//Sinon c'est un relachement
else
m_isAvance = false;//Donc , comme on doit s'arrêter , on met ce même booléen à false
//L'event est traite, on retourne true
return true;
}
//Si on arrive la, c'est qu'on a pas traite l'event , donc on retourne false
if(m_Nmodele != 0 && event.EventType == irr::EET_KEY_INPUT_EVENT && event.KeyInput.Key == irr::KEY_KEY_S)
{
if(event.KeyInput.PressedDown == true)
m_isRecule = true;
else
m_isRecule = false;
return true;
}
//Si on arrive la, c'est qu'on a pas traite l'event , donc on retourne false
if(m_Nmodele != 0 && event.EventType == irr::EET_KEY_INPUT_EVENT && event.KeyInput.Key == irr::KEY_KEY_D)
{
if(event.KeyInput.PressedDown == true)
m_isDroite = true;
else
m_isDroite = false;
return true;
}
//Si on arrive la, c'est qu'on a pas traite l'event , donc on retourne false
if(m_Nmodele != 0 && event.EventType == irr::EET_KEY_INPUT_EVENT && event.KeyInput.Key == irr::KEY_KEY_Q)
{
if(event.KeyInput.PressedDown == true)
m_isGauche = true;
else
m_isGauche = false;
return true;
}
//Si on arrive la, c'est qu'on a pas traite l'event , donc on retourne false
if(m_Nmodele != 0 && event.EventType == irr::EET_KEY_INPUT_EVENT && event.KeyInput.Key == irr::KEY_SPACE)
{
if(event.KeyInput.PressedDown == true)
m_isSauter = true;
else
m_isSauter = false;
return true;
}
//Si on arrive la, c'est qu'on a pas traite l'event , donc on retourne false
return false;
}
void CEventReceiver::majPosMesh()//revoilà notre chère fonction de mise à jour de la position
{
core::vector3df c =m_Nmodele->getPosition();
core::vector3df d= m_Nmodele->getRotation();
float diry = ((d.Y+90)*3.14)/180;
int speed=1;
//On verifie que le pointeur vers le mesh est
//ok et que la touche est enfoncee
if(m_Nmodele != 0 && m_isAvance == true)
{
c.X += speed * cos((d.Y) * 3.14 / 180);
c.Z -= speed * sin((d.Y) * 3.14 / 180);
}
if(m_Nmodele != 0 && m_isRecule == true)
{
c.X -= speed * cos((d.Y) * 3.14 / 180);
c.Z += speed * sin((d.Y) * 3.14 / 180);
}
if(m_Nmodele != 0 && m_isDroite == true)
{
d.Y += 0.1;
}
if(m_Nmodele != 0 && m_isGauche == true)
{
d.Y -= 0.1;
}
if(m_Nmodele != 0 && m_isSauter == true)
{
c.Y += 5.1;
}
m_Nmodele->setRotation(d);
int xf = (c.X-sin(diry)*125);
int yf =(c.Z-cos(diry)*125);
int zf =100;
m_Nmodele->setPosition(c);
}
void CEventReceiver::majAnimMesh()//Ici , on met à jour l'animation
{
if(m_Nmodele != 0 && m_isAvance == true && m_animrun ==false) //Si le pointeur vers le mesh est ok , si l'on bouge et si l'on n'a pas encore mis à jour l'animation ...
{
m_Nmodele->setMD2Animation(EMAT_STAND);//on passe à l'animation "courir"
m_Nmodele->setFrameLoop(1,44);
m_Nmodele->setAnimationSpeed(80);
m_animrun=true;//on declare que l'animation courir est bien en trainde se derouler
}
if(m_Nmodele != 0 && m_isAvance == false && m_animrun ==true) //Si le pointeur vers le mesh est ok , si l'on ne bouge plus et si l'on n'a pas encore mis à jour l'animation ...
{
m_Nmodele->setMD2Animation(EMAT_RUN);//on passe à l'animation "rester en place"
m_animrun=false;//et on declare que l'animation courir ne se deroule plus , du coup
}
}
|