voici un extrait de ma fonction onEvent:
bool CEventReceiver::OnEvent(const irr::SEvent &event)
{
if (event.EventType == irr::EET_JOYSTICK_INPUT_EVENT
&& event.JoystickEvent.Axis[0] == -257)
{
std::cout << "axe stable" <<std::endl;
j_droit = false;
j_gauche = false;
j_face = false;
j_arriere = false;
j_stable =true;
}
if (event.EventType == irr::EET_JOYSTICK_INPUT_EVENT
&& event.JoystickEvent.Axis[0] == 32767)
{
std::cout << "axe droite" <<std::endl;
j_droit = true;
j_gauche = false;
j_stable = false;
j_face = false;
j_arriere = false;
}
if (event.EventType == irr::EET_JOYSTICK_INPUT_EVENT
&& event.JoystickEvent.Axis[0] == -32768)
{
std::cout << "axe gauche" <<std::endl;
j_gauche = true;
j_droit = false;
j_stable = false;
j_face = false;
j_arriere = false;
}
if (event.EventType == irr::EET_JOYSTICK_INPUT_EVENT
&& event.JoystickEvent.Axis[1] == -32768 )
{
j_gauche = false;
j_droit = false;
j_stable = false;
j_face = true;
j_arriere = false;
std::cout << "axe avant" <<std::endl;
}
if (event.EventType == irr::EET_JOYSTICK_INPUT_EVENT
&& event.JoystickEvent.Axis[1] == 32767)
{
std::cout << "axe arriere" <<std::endl;
j_gauche = false;
j_droit = false;
j_stable = false;
j_face = false;
j_arriere = true;
}
}
voici un extrait de la fonction :majPosMesh() (toujours dans le CeventReceiver)
void CEventReceiver::majPosMesh()
{
if (j_droit == true)
{
std::cout << "axe droit" <<std::endl;
//On commence par recuperer la position actuelle
irr::core::vector3df v = m_camera->getRotation();
//On y ajoute la valeur de deplacement
v.Y += 3.0f;
//On renvoie la nouvelle position
m_camera->setRotation(v);
}
if (j_gauche == true)
{
//On commence par recuperer la position actuelle
irr::core::vector3df rotation = m_camera->getRotation();
//On y ajoute la valeur de deplacement
rotation.Y -= 3.0f;
//On renvoie la nouvelle position
m_camera->setRotation(rotation);
m_camera->setPosition(rotation);
}
if (j_face == true)
{
//On commence par recuperer la position actuelle
/* irr::core::vector3df v = m_camera->getPosition();
//On y ajoute la valeur de deplacement
v.X += 2.0f;
//On renvoie la nouvelle position
m_camera->setPosition(v);*/
SEvent myevent;
myevent.EventType = EET_KEY_INPUT_EVENT;
myevent.KeyInput.PressedDown = true;
myevent.KeyInput.Key = KEY_UP;
device->postEventFromUser(myevent);
}
if (j_arriere == true)
{
//On commence par recuperer la position actuelle
irr::core::vector3df v = m_camera->getPosition();
//On y ajoute la valeur de deplacement
v.X -= 2.0f;
//On renvoie la nouvelle position
m_camera->setPosition(v);
}
}
et dans mon Game dans la boucle de rendu j'ai :
Event.majPosMesh();
en dehors de la boucle de rendu, dans mon game
CEventReceiver Event(camera,device);
device->setEventReceiver(Event);
Sinon je peux contourner le probleme en modifiant la camera avec des setPosition()... getPosition()
mais le probleme c'est qu'a chaque mouvement je doit changer le repére, car pour aller en avant et en arriere ca bouge que sur un axe..
c'est difficil a expliquer... desole :s
mais par exemple je vais tout droit puis je tourne : ok ca marche jusqu'a la
mais une fois tourner si je veux aller tout droit cela ne marchera pas puisque ca ne bougera pas sur le bon axe
ya t'il une fonction pour mettre a jour le repére selon la rotation de la camera?
merci de votre aide j'apprecie votre rapidité!!