Code: Select all
#include <irrlicht.h>
#include <iostream>
#include <OpenGL/OpenGL.h>
using namespace irr;
/*
using namespace core;
using namespace scene;
using namespace video;
using namespace io;
using namespace gui;
*/
#pragma comment(lib, "libMacOSX.a")
int main()
{
int health;
int ammo;
int weapon;
// Set Render
video::E_DRIVER_TYPE driverType = video::EDT_OPENGL;
IrrlichtDevice *device =
createDevice(driverType, core::dimension2d<s32>(640, 480), 32, true );
if (device == 0)
return 1; // could not create selected driver.
video::IVideoDriver* driver = device->getVideoDriver();
scene::ISceneManager* smgr = device->getSceneManager();
device->getFileSystem()->addZipFileArchive("map-20kdm2.zip");
scene::IAnimatedMesh* q3levelmesh = smgr->getMesh("20kdm2.bsp");
scene::ISceneNode* q3node = 0;
if (q3levelmesh)
q3node = smgr->addOctTreeSceneNode(q3levelmesh->getMesh(0));
scene::ITriangleSelector* selector = 0;
if (q3node)
{
selector = smgr->createOctTreeTriangleSelector(q3levelmesh->getMesh(0), q3node, 128);
q3node->setTriangleSelector(selector);
selector->drop();
}
q3node->setPosition(core::vector3df(-900,-500,-500));
//Add FPS Camera
scene::ICameraSceneNode* camera =NULL;
SKeyMap keyMap[8];
keyMap[0].Action = EKA_MOVE_FORWARD;
keyMap[0].KeyCode = KEY_UP;
keyMap[1].Action = EKA_MOVE_FORWARD;
keyMap[1].KeyCode = KEY_KEY_W;
keyMap[2].Action = EKA_MOVE_BACKWARD;
keyMap[2].KeyCode = KEY_DOWN;
keyMap[3].Action = EKA_MOVE_BACKWARD;
keyMap[3].KeyCode = KEY_KEY_S;
keyMap[4].Action = EKA_STRAFE_LEFT;
keyMap[4].KeyCode = KEY_LEFT;
keyMap[5].Action = EKA_STRAFE_LEFT;
keyMap[5].KeyCode = KEY_KEY_A;
keyMap[6].Action = EKA_STRAFE_RIGHT;
keyMap[6].KeyCode = KEY_RIGHT;
keyMap[7].Action = EKA_STRAFE_RIGHT;
keyMap[7].KeyCode = KEY_KEY_D;
camera = smgr->addCameraSceneNodeFPS(0,0.1f,250.0f,-1, keyMap,8 , false);
scene::ISceneNodeAnimator* anim = smgr->createCollisionResponseAnimator(
selector, camera, core::vector3df(7,45,7), //collision
core::vector3df(0,-0.7,0), //height
core::vector3df(0,30,0));
camera->addAnimator(anim);
anim->drop();
scene::ISceneNode* node = smgr->addLightSceneNode(0, core::vector3df(0,0,0),
video::SColorf(1.0f, 0.6f, 0.7f, 1.0f), 600000.0f);
camera->addChild(node);
//Add Gun
scene::ISceneNode* gunNode = smgr->addAnimatedMeshSceneNode(smgr->getMesh("gloc.3ds"));
gunNode->setParent(camera);
gunNode->setPosition(core::vector3df(5,-30,10));
gunNode->setMaterialFlag(video::EMF_LIGHTING, true);
gunNode->setScale(core::vector3df(1,1,1));
gunNode->setRotation(core::vector3df(0,-0,0));
gunNode->setMaterialFlag(video::EMF_ZBUFFER,false);
camera->addChild(gunNode);
gunNode->setMaterialTexture(0, driver->getTexture("glocmap.jpg"));
core::vector3df start = camera->getPosition();
core::vector3df end = (camera->getTarget() - start);
end.normalize();
start += end*5.0f;
end = start + (end * camera->getFarValue());
core::triangle3df triangle;
core::line3d<f32> line(start, end);
device->getCursorControl()->setVisible(false);
//Add Crosshair
scene::ISceneNode* crosshair = 0;
crosshair = smgr->addBillboardSceneNode(crosshair,
core::dimension2d<f32>(25, 25));
crosshair->setMaterialFlag(video::EMF_LIGHTING, false);
crosshair->setMaterialTexture(0, driver->getTexture
("lol.bmp"));
crosshair->setMaterialType(video::EMT_TRANSPARENT_ADD_COLOR);
crosshair->setPosition(core::vector3df(-0,23,175));
crosshair->setMaterialFlag(video::EMF_ZBUFFER,false);
gunNode->addChild(crosshair);
//Add Health Icon
scene::ISceneNode* Health = 0;
Health = smgr->addBillboardSceneNode(Health,
core::dimension2d<f32>(20, 20));
Health->setMaterialFlag(video::EMF_LIGHTING, false);
Health->setMaterialTexture(0, driver->getTexture
("Health.bmp"));
Health->setMaterialType(video::EMT_TRANSPARENT_ADD_COLOR);
Health->setPosition(core::vector3df(-115,-90,150));
//---NEW-----------
Health->setMaterialFlag(video::EMF_ZBUFFER,false);
//-------------------
camera->addChild(Health);
//Add Ammo Icon
scene::ISceneNode* Ammo = 0;
Ammo = smgr->addBillboardSceneNode(Ammo,
core::dimension2d<f32>(20, 20));
Ammo->setMaterialFlag(video::EMF_LIGHTING, false);
Ammo->setMaterialTexture(0, driver->getTexture
("Ammo.bmp"));
Ammo->setMaterialType(video::EMT_TRANSPARENT_ADD_COLOR);
Ammo->setPosition(core::vector3df(-60,-90,150));
//---NEW-----------
Ammo->setMaterialFlag(video::EMF_ZBUFFER,false);
//-------------------
camera->addChild(Ammo);
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"));
while(device->run())
if (device->isWindowActive())
{
driver->beginScene(true, true, 0);
smgr->drawAll();
driver->endScene();
}
device->drop();
return 0;
}