main.cpp
#include <irr/irrlicht.h>
#include "event.h"
using namespace irr;
using namespace core;
using namespace scene;
using namespace video;
using namespace gui;
using namespace io;
IrrlichtDevice *device;
ISceneManager* smgr;
IVideoDriver* driver;
vector3df playerLastPosition;
bool playerMove;
int main()
{
MyReceiver receiver;
device = createDevice(EDT_OPENGL, dimension2d<s32>(800, 600),32, false, true, true);
driver = device->getVideoDriver();
smgr = device->getSceneManager();
ICameraSceneNode *camera = smgr->addCameraSceneNode();
IAnimatedMesh* mesh = smgr->getMesh("data\\\\game\\\\players\\\\1\\\\1.md2");
IAnimatedMeshSceneNode *player = smgr->addAnimatedMeshSceneNode(mesh);
this->device->setEventReceiver(receiver);
camera->setParent(player);
while(this->device->run())
{
this->driver->beginScene(true, true, SColor(255,100,101,140));
smgr->drawAll();
driver->endScene();
//==============================================================//
//=== Recuperation de la position du player pour l'animation ===//
//==============================================================//
playerLastPosition = player->getPosition();
//==============================================================//
//=== Actualisation de la camera ===//
//==============================================================//
camera->setTarget(player->getPosition());
camera->setPosition(vector3df(-60,50,0));
//=============================================================//
//=== Deplacement du personnage ===//
//=============================================================//
if (receiver.keys[KEY_UP]) //Avance
{
vector3df facing(cos(player->getRotation().Y * PI/180.0f), 0, -sin(player->getRotation().Y * PI/180.0f));
facing.normalize();
vector3df newPos = player->getPosition() + (facing - (facing * (f32)0.5));
player->setPosition(newPos);
}
if (receiver.keys[KEY_DOWN]) //Recule
{
vector3df facing(cos(player->getRotation().Y * PI/180.0f),0,-sin(player->getRotation().Y * PI/180.0f));
facing.normalize();
vector3df newPos = player->getPosition() - (facing- (facing * (f32)0.7));
player->setPosition(newPos);
playerMove = true;
}
if (receiver.keys[KEY_LEFT]) //Rotation vers la gauche
{
player->setRotation(player->getRotation() - vector3df(0,1,0));
}
if (receiver.keys[KEY_RIGHT]) //Rotation vers la droite
{
player->setRotation(player->getRotation() + vector3df(0,1,0));
}
//==============================================================//
//=== Animation du personnage ===//
//==============================================================//
if (playerLastPosition != player->getPosition()) //Si le joueur bouge
{
if (playerMove == false) //Si l'animation de deplacement n'est pas activer
{
player->setMD2Animation(EMAT_RUN); //Change l'animation du joueur
playerMove = true;
}
}
else //Si le joueur ne bouge plus
{
if (playerMove == true) //Si l'animation "courire" a ete activer
{
player->setMD2Animation(EMAT_STAND); //Change l'animation du joueur
playerMove = false;
}
}
if (receiver.keys[KEY_ESCAPE])
{
exit(0);
}
}
return 0;
}