#include <irr/Irrlicht.h>
#include <iostream>
using namespace std;
using namespace irr;
using namespace scene;
using namespace video;
using namespace core;
using namespace gui;
using namespace io;
#ifdef _MSC_VER
#pragma comment(lib, "Irrlicht.lib")
#endif
struct SAppContext
{
IrrlichtDevice *device;
s32 counter;
ISceneManager *smgr;
ICameraSceneNode *camera;
};
enum
{
idBoutonEntrer,
idBoutonNew
};
class MyEventReceiver : public IEventReceiver
{
public:
MyEventReceiver(SAppContext & context) : Context(context) { }
virtual bool OnEvent(const SEvent &event)
{
if(event.EventType == irr::EET_GUI_EVENT)
{
s32 id = event.GUIEvent.Caller->getID();
IGUIEnvironment *gui = Context.device->getGUIEnvironment();
switch(event.GUIEvent.EventType)
{
case EGET_BUTTON_CLICKED:
switch(id)
{
case idBoutonNew:{
IMeshSceneNode *cube = Context.smgr->addCubeSceneNode(10);
Context.camera->setTarget(cube->getPosition());
}
return true;
default:
return false;
}
break;
default:
break;
}
}
return false;
}
/*void checkBoutons(ISceneManager* smgr, ICameraSceneNode* camera)
{
if(m_bouton_new_clicked == true)
{
IMeshSceneNode *cube = smgr->addCubeSceneNode(10);
camera->setTarget(cube->getPosition());
}
}*/
protected:
SAppContext & Context;
/*ISceneManager* m_smgr;
ICameraSceneNode* m_camera;
bool m_bouton_entrer_clicked;
bool m_bouton_new_clicked;*/
};
int main()
{
IrrlichtDevice *device = createDevice(EDT_OPENGL, dimension2d<u32>(800,600), 32, false, false, false);
IVideoDriver *driver = device->getVideoDriver();
ISceneManager *smgr = device->getSceneManager();
ICursorControl *cursor = device->getCursorControl();
IGUIEnvironment *gui = device->getGUIEnvironment();
IMeshManipulator *manipulator = smgr->getMeshManipulator();
cursor->setVisible(false);
device->setWindowCaption(L"Secret of Ragnor");
driver->setFog(
SColor(0,255,255,255),
EFT_FOG_LINEAR,
50.0f,
4000.0f,
0.01f,
true,
true);
smgr->setShadowColor(SColor(150,0,0,0));
ITexture * cursorImage = driver->getTexture("textures/curseur3.png");
dimension2d<u32> taille = cursorImage->getSize();
position2d<s32> position0;
position0.X = 0;
position0.Y = 0;
position2d<s32> position1;
position1.X = taille.Width;
position1.Y = taille.Height;
rect<s32> rectangle1;
rectangle1.UpperLeftCorner = position0;
rectangle1.LowerRightCorner = position1;
ICameraSceneNode * camera = smgr->addCameraSceneNode();
IAnimatedMeshSceneNode *creation_scene_floor = smgr->addAnimatedMeshSceneNode(smgr->getMesh("meshes/creation_scene_floor.3ds"), 0, -1, vector3df(0,0,0), vector3df(0,0,0), vector3df(30.0f,30.0f,30.0f));
creation_scene_floor->setMaterialFlag(EMF_LIGHTING, false);
creation_scene_floor->setMaterialTexture(0, driver->getTexture("textures/creation_scene_floor.png"));
creation_scene_floor->getMesh()->setHardwareMappingHint(EHM_STATIC);
creation_scene_floor->setMaterialFlag(EMF_FOG_ENABLE, true);
creation_scene_floor->addShadowVolumeSceneNode();
creation_scene_floor->setVisible(true);
manipulator->makePlanarTextureMapping(creation_scene_floor->getMesh(), 0.4f);
camera->setPosition(creation_scene_floor->getPosition() + vector3df(0,100,0));
camera->setTarget(vector3df(-180,-20,0));
IGUIButton *bouton_entrer_dans_le_jeu = gui->addButton(rect<s32>(100+175,80+400,200+175,120+400), 0, idBoutonEntrer, L"Entrer dans le jeu");
IGUIButton *bouton_nouveau_perso = gui->addButton(rect<s32>(100+300,80+400,200+300,120+400), 0, idBoutonNew, L"Nouveau personnage");
SAppContext context;
MyEventReceiver receiver(context);
device->setEventReceiver(&receiver);
//Skydome
driver->setTextureCreationFlag(video::ETCF_CREATE_MIP_MAPS, false);
scene::ISceneNode* skydome = smgr->addSkyDomeSceneNode(driver->getTexture("textures/skydome.png"), 16, 8, 0.95f, 2.0f);
driver->setTextureCreationFlag(video::ETCF_CREATE_MIP_MAPS, true);
while(device->run())
{
driver->beginScene(false, false, SColor(255,150,150,150));
smgr->drawAll();
gui->drawAll();
driver->draw2DImage(cursorImage, cursor->getPosition(), rectangle1, 0, SColor(255,255,255,255));
s32 posx = camera->getPosition().X;
s32 posy = camera->getPosition().Y;
s32 posz = camera->getPosition().Z;
int fps = driver->getFPS();
stringw str = L"Secret of Ragnor [";
str += driver->getName();
str += "] FPS : ";
str += fps;
str += " | X : ";
str += posx;
str += " | Y : ";
str += posy;
str += " | Z : ";
str += posz;
str += " |";
device->setWindowCaption(str.c_str());
//receiver.checkBoutons(smgr, camera);
driver->endScene();
}
device->drop();
return 0;
}