sorry my english.Please Help!
My CODE:
#include <irrlicht.h>
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <windows.h>
#include <math.h>
#include <mmsystem.h>
#include <audiere.h>
using namespace irr;
using namespace audiere;
using namespace core;
using namespace scene;
using namespace video;
using namespace io;
using namespace gui;
#pragma comment(lib, "Irrlicht.lib")
#pragma comment(lib, "audiere.lib")
scene::IAnimatedMeshSceneNode* bnode = 0;
class MyEventReceiver : public IEventReceiver
{
public:
virtual bool OnEvent(SEvent event) {
if (event.EventType == EET_KEY_INPUT_EVENT) {
switch(event.KeyInput.Key) {
case KEY_KEY_R:
if (event.KeyInput.PressedDown) {
bnode->setMD2Animation(irr::scene::EMAT_RUN);
} else {
bnode->setMD2Animation(irr::scene::EMAT_STAND);
}
break;
case KEY_KEY_J:
if(event.KeyInput.PressedDown){
bnode->setMD2Animation(irr::scene::EMAT_JUMP);
}
else{
bnode->setFrameLoop(0,310);
}
break;
case KEY_SPACE :
if(event.KeyInput.PressedDown){
bnode->setFrameLoop(400, 500);
}
break;
case KEY_KEY_Y:
{
core::vector3df r = bnode->getRotation();
if (r.Y == 360)
r.Y=0.0f;
else
r.Y += 10.0f;
bnode->setRotation(r);
}
break;
case KEY_KEY_H:
{
core::vector3df r = bnode->getRotation();
if (r.Y == 360)
r.Y=0.0f;
else
r.Y -= 10.0f;
bnode->setRotation(r);
}
break;
case KEY_KEY_W:
{
core::vector3df pos = bnode->getPosition();
pos.Z+=5.0f;
bnode->setPosition(pos);
}
break;
case KEY_KEY_S:
{
core::vector3df pos = bnode->getPosition();
pos.Z-=5.0f;
bnode->setPosition(pos);
}
break;
case KEY_KEY_A:
{
core::vector3df pos = bnode->getPosition();
pos.X-=5.0f;
bnode->setPosition(pos);
}
break;
case KEY_KEY_D:
{
core::vector3df pos = bnode->getPosition();
pos.X+=5.0f;
bnode->setPosition(pos);
}
break;
return true;
}
return false;
}
}
};
int main(char ** args)
{
// let user select driver type
MyEventReceiver receiver;
video::E_DRIVER_TYPE driverType;
printf("Please select the driver you want for this example:\n"\
" (a) Direct3D 9.0c\n (b) Direct3D 8.1\n (c) OpenGL 1.5\n"\
" (d) Software Renderer\n (e) Apfelbaum Software Renderer\n"\
" (f) NullDevice\n (otherKey) exit\n\n");
char i;
std::cin >> i;
switch(i)
{
case 'a': driverType = video::EDT_DIRECT3D9;break;
case 'b': driverType = video::EDT_DIRECT3D8;break;
case 'c': driverType = video::EDT_OPENGL; break;
case 'd': driverType = video::EDT_SOFTWARE; break;
case 'e': driverType = video::EDT_SOFTWARE2;break;
case 'f': driverType = video::EDT_NULL; break;
default: return 0;
}
// create device
IrrlichtDevice *device =
createDevice(driverType, core::dimension2d<s32>(640, 480), 16, false, false, false, &receiver);
if (device == 0)
return 1; // could not create selected driver.
video::IVideoDriver* driver = device->getVideoDriver();
scene::ISceneManager* smgr = device->getSceneManager();
IGUIEnvironment* guienv = device->getGUIEnvironment();
/*
We add a hello world label to the window, using the GUI environment.
*/
guienv->addStaticText(L"Hello World! This is the Irrlicht Apfelbaum Software renderer!",
rect<int>(10,10,260,22), true);
device->getFileSystem()->addZipFileArchive("map-20kdm2.pk3");
scene::IAnimatedMesh* q3levelmesh = smgr->getMesh("20kdm2.bsp");
scene::ISceneNode* q3node = 0;
/*import music MP3 file*/
AudioDevicePtr devices(OpenDevice());
OutputStreamPtr sound(OpenSound(devices,"06 Sasakure.mp3",false));
sound->setVolume(5.0);
sound->play();
sound->setRepeat(true);
if (q3levelmesh)
q3node = smgr->addOctTreeSceneNode(q3levelmesh->getMesh(0));
scene::ITriangleSelector* selector = 0;
if (q3node)
{
q3node->setPosition(core::vector3df(-1370,-130,-1400));
selector = smgr->createOctTreeTriangleSelector(q3levelmesh->getMesh(0), q3node, 128);
q3node->setTriangleSelector(selector);
selector->drop();
}
scene::ICameraSceneNode* camera =
smgr->addCameraSceneNodeFPS(0, 100.0f, 300.0f, -1, 0, 0, true);
camera->setPosition(core::vector3df(-100,50,-150));
scene::ISceneNodeAnimator* anim = smgr->createCollisionResponseAnimator(
selector, camera, core::vector3df(30,50,30),
core::vector3df(0,-3,0),
core::vector3df(0,50,0));
camera->addAnimator(anim);
anim->drop();
device->getCursorControl()->setVisible(false);
// add 3 animated faeries.
video::SMaterial material;
material.Texture1 = driver->getTexture("faerie2.bmp");
material.Lighting = true;
scene::IAnimatedMeshSceneNode* node = 0;
scene::IAnimatedMesh* faerie = smgr->getMesh("faerie.md2");
if (faerie)
{
node = smgr->addAnimatedMeshSceneNode(faerie);
node->setPosition(core::vector3df(-70,0,-90));
node->setScale(core::vector3df(3,3,3));
node->setMD2Animation(scene::EMAT_RUN);
node->getMaterial(0) = material;
node = smgr->addAnimatedMeshSceneNode(faerie);
node->setPosition(core::vector3df(-70,0,-30));
node->setScale(core::vector3df(3,3,3));
node->setMD2Animation(scene::EMAT_SALUTE);
node->getMaterial(0) = material;
node = smgr->addAnimatedMeshSceneNode(faerie);
node->setPosition(core::vector3df(-70,0,-60));
node->setScale(core::vector3df(3,3,3));
node->setMD2Animation(scene::EMAT_JUMP);
node->getMaterial(0) = material;
}
material.Texture1 = 0;
material.Lighting = false;
selector = smgr->createTriangleSelectorFromBoundingBox(node);
node->setTriangleSelector(selector);
selector->drop();
anim = smgr->createCollisionResponseAnimator(selector, camera, core::vector3df(5,5,5),core::vector3df(0,0,0), core::vector3df(0,0,0));
camera->addAnimator(anim);
anim->drop();
// add 1 animated soldier.
video::SMaterial materials;
materials.Texture1 = driver->getTexture("solo.bmp");
materials.Lighting = false;
//scene::IAnimatedMeshSceneNode* bnode = 0;
scene::IAnimatedMesh* soldier = smgr->getMesh("TRIS.md2");
scene::ISceneNode* soldnode = 0;
if (soldier)
{
bnode = smgr->addAnimatedMeshSceneNode(soldier);
bnode->setPosition(core::vector3df(170,-20,-50));
bnode->setScale(core::vector3df(3,5,3));
bnode->setFrameLoop(0, 310);
bnode->setAnimationSpeed(30);
bnode->setRotation(core::vector3df(0,0,0));
bnode->getMaterial(0) = materials;
}
materials.Texture1 = 0;
materials.Lighting = true;
selector = smgr->createTriangleSelectorFromBoundingBox(bnode);
bnode->setTriangleSelector(selector);
selector->drop();
anim = smgr->createCollisionResponseAnimator(selector, camera, core::vector3df(5,5,5),core::vector3df(0,0,0), core::vector3df(0,0,0));
camera->addAnimator(anim);
anim->drop();
// Add a light
smgr->addLightSceneNode(0, core::vector3df(-60,100,400),
video::SColorf(1.0f,1.0f,1.0f,1.0f),
600.0f);
// create skybox
driver->setTextureCreationFlag(video::ETCF_CREATE_MIP_MAPS, false);
smgr->addSkyBoxSceneNode(
driver->getTexture("irrlicht2_up.jpg"),
driver->getTexture("irrlicht2_dn.jpg"),
driver->getTexture("irrlicht2_lf.jpg"),
driver->getTexture("irrlicht2_rt.jpg"),
driver->getTexture("irrlicht2_ft.jpg"),
driver->getTexture("irrlicht2_bk.jpg"));
driver->setTextureCreationFlag(video::ETCF_CREATE_MIP_MAPS, true);
/*
For not making it to complicated, I'm doing picking inside the drawing loop.
We take two pointers for storing the current and the last selected scene node and
start the loop.
*/
scene::ISceneNode* selectedSceneNode = 0;
scene::ISceneNode* lastSelectedSceneNode = 0;
int lastFPS = -1;
while(device->run())
if (device->isWindowActive())
{
driver->beginScene(true, true, 0);
smgr->drawAll();
guienv->drawAll();
core::line3d<f32> line;
line.start = camera->getPosition();
line.end = line.start + (camera->getTarget() - line.start).normalize() * 1000.0f;
core::vector3df intersection;
core::triangle3df tri;
if (smgr->getSceneCollisionManager()->getCollisionPoint(
line, selector, intersection, tri))
{
driver->setTransform(video::ETS_WORLD, core::matrix4());
driver->setMaterial(material);
}
selectedSceneNode = smgr->getSceneCollisionManager()->getSceneNodeFromCameraBB(camera);
lastSelectedSceneNode = selectedSceneNode;
/*
That's it, we just have to finish drawing.
*/
driver->endScene();
int fps = driver->getFPS();
if (lastFPS != fps)
{
core::stringw str = L"Collision detection example - Irrlicht Engine [";
str += driver->getName();
str += "] FPS:";
str += fps;
device->setWindowCaption(str.c_str());
lastFPS = fps;
}
}
device->drop();
return 0;
}
[/b]