Es bestehen immer noch die gleichen fehler
bei // edit ist der neue code
Code:
#include <irrlicht.h>
#include <audiere.h> // audiere kümmert sich um den sound
using namespace irr;
using namespace video;
using namespace scene;
using namespace core;
int modellife;
int mylife; // leben 0-9999
int life;
int i;
int rcounter=0;
float frames;
int x = 0;
int y = 75;
int z = 100;
bool shot=false;
char otherplayer[100];
IrrlichtDevice *device=0;
class MyEventReceiver : public IEventReceiver
{
public:
virtual bool OnEvent(SEvent event)
{
if(mylife<0)
return true;
if(event.EventType==EET_MOUSE_INPUT_EVENT){
if(event.MouseInput.Event==EMIE_LMOUSE_PRESSED_DOWN){
shot=true;
}
}
if(device && device->getSceneManager()->getActiveCamera())
device->getSceneManager()->getActiveCamera()->OnEvent(event);
return true;
}
};
void iamhit(){ // bei einem treffer wird die funktion aufgerufen
printf("Du wurdest getroffen! Status:%d %",mylife);
if(mylife<0){
printf("Du hast verloren\n");
modellife=9999;
}
return;
}
int main()
{
MyEventReceiver receiver;
// deviceType, windowSize, bits, fullscreen(16/32), stencilbuffer, vsync, eventReceiver
// 1280x1024,
device=createDevice(EDT_OPENGL,dimension2d<s32>(800, 600),16,true,false,true,&receiver);
IVideoDriver* driver=device->getVideoDriver();
ISceneManager* smgr=device->getSceneManager();
IAnimatedMesh* mapmesh=smgr->getMesh("map1.x"); // läd die map
ISceneNode* map = 0;
map=smgr->addOctTreeSceneNode(mapmesh->getMesh(0));
IAnimatedMesh* modelmesh=smgr->getMesh("feind.md2"); // läd den Feind
IAnimatedMeshSceneNode* model=smgr->addAnimatedMeshSceneNode(modelmesh);
// edit
mesh = smgr->getMesh("feind2.md2"); // load mesh
node = smgr->addMeshSceneNode(mesh); // SceneNode herstellen
// edit end
model->setMaterialTexture( 0, driver->getTexture("tex.pcx") );
model->setPosition(vector3df(0,150,100));
model->setScale(vector3df(3,3,3));
model->setMD2Animation(EMAT_RUN);
// setzt dynamische Lichtquellen
smgr->addLightSceneNode(0,vector3d<f32>(-480,100,970),SColorf(0.1,0.7,0.3),300);
smgr->addLightSceneNode(0,vector3d<f32>(480,100,700),SColorf(0.1,0.7,0.3),300);
smgr->addLightSceneNode(0,vector3d<f32>(0,400,0),SColorf(1,1,1),500);
ILightSceneNode* floater=smgr->addLightSceneNode(0,vector3d<f32>(251,300,766),SColorf(1,0.1,0.2),400);
ISceneNodeAnimator* floateranim=smgr->createFlyCircleAnimator(vector3d<f32>(251,400,-766),100,0.01);
floater->addAnimator(floateranim);
ICameraSceneNode* camera=smgr->addCameraSceneNodeFPS();
camera->setPosition(vector3df(0,150,20));
///////////////////////////////////
camera->setPosition(core::vector3df(0,150,0));
ITriangleSelector* selector = smgr->createOctTreeTriangleSelector(mesh->getMesh(0),node, 128);
node->setTriangleSelector(selector);
selector->drop();
ISceneNodeAnimator* anim=smgr->createCollisionResponseAnimator(selector,camera,vector3df(30,50,30));
camera->addAnimator(anim);
anim->drop();
////////////////////////////////////
IMetaTriangleSelector* metaselector;
metaselector=smgr->createMetaTriangleSelector();
ITriangleSelector* mapselector=smgr->createOctTreeTriangleSelector(mapmesh->getMesh(0), map, 128);
metaselector->addTriangleSelector(mapselector);
mapselector->drop();
ITriangleSelector* modelselector=smgr->createTriangleSelector(modelmesh->getMesh(0), model);
metaselector->addTriangleSelector(modelselector);
modelselector->drop();
aabbox3d<f32> box=model->getBoundingBox();
anim=smgr->createCollisionResponseAnimator(
metaselector,camera,(box.MaxEdge-box.getCenter())*3);
camera->addAnimator(anim);
anim->drop();
device->getCursorControl()->setVisible(false);
// Sound mit audiere
audiere::AudioDevicePtr audiodevice(audiere::OpenDevice());
// "name.wav", schleife?
audiere::OutputStreamPtr sndtrck(audiere::OpenSound(audiodevice, "ddd.wav", true)); // läd den sound
audiere::OutputStreamPtr aas(audiere::OpenSound(audiodevice, "sss.wav", false));
// setzt die lautstärke und wiederholung
aas->setVolume(1);
sndtrck->setRepeat(true);
sndtrck->setVolume(0.7);
sndtrck->play();
//
restart:
modellife=10;
mylife=0;
while(device->run())
{
driver->beginScene(true, true, SColor(0,10,10,10));
smgr->drawAll();
driver->endScene();
vector3d<f32> explosion;
if(life==9999){
mylife=life;
printf("you win!\n");
model->setMD2Animation(EMAT_DEATH_FALLBACK);
}
if(life<mylife){
mylife=life;
aas->play();
iamhit();
}
int time=(float(rcounter)/frames)*1000;
rcounter=0;
ISceneNodeAnimator* runto=smgr->createFlyStraightAnimator(model->getPosition(),vector3df(x,y,z),time,0);
model->setRotation(vector3df(0,-90,0));
model->addAnimator(runto);
runto->drop();
if(shot && !aas->isPlaying()){
aas->play();
vector3d<f32> direction=camera->getTarget()-camera->getPosition();
direction.normalize();
line3d<f32> bullet;
bullet.start=camera->getPosition();
bullet.end=camera->getPosition()+direction*1500;
triangle3d<f32> dummy;
vector3d<f32> mapcollision;
vector3d<f32> modelcollision;
bool gotmap=smgr->getSceneCollisionManager()->getCollisionPoint(bullet,mapselector,mapcollision,dummy);
bool gotmodel=smgr->getSceneCollisionManager()->getCollisionPoint(bullet,modelselector,modelcollision,dummy);
float mapdistance=0;
float modeldistance=0;
if(gotmap){
mapdistance=camera->getPosition().getDistanceFromSQ(mapcollision);
}
if(gotmodel){
modeldistance=camera->getPosition().getDistanceFromSQ(modelcollision);
}
if(gotmodel && gotmap){
if(modeldistance<=mapdistance){
modellife-=1;
aas->stop();
aas->play();
printf("you score!\n");
explosion=modelcollision;
}
else
explosion=mapcollision;
}
if(gotmodel && !gotmap){
modellife-=1;
aas->stop();
aas->play();
printf("you score!\n");
explosion=modelcollision;
}
if(!gotmodel && gotmap){
explosion=mapcollision;
}
}
else if(shot)
shot=false;
}
device->drop();
return 0;
}