#include <irrlicht.h>
//los namespace para definir funciones de irrlicht
using namespace irr;
using namespace core;
using namespace video;
using namespace gui;
#if defined(_MSC_VER)
#pragma comment(lib, "Irrlicht.lib")
#endif
//Creo una struct para definir mi contexto
struct SAppContext
{
IrrlichtDevice *device;
};
//Defino valores para identificar las acciones que realizaran los botones
enum
{
QUIT = 101,
NEW
};
//Creo una clase para definir los eventos y sus acciones al presionar los botones
class MyEventReceiver : public IEventReceiver
{
public:
//Inicializo mis valores en el contructor
MyEventReceiver(SAppContext & context) : Context(context)
{
}
//Creo una funcion virtual para manejar el evento
virtual bool OnEvent( const SEvent &event )
{
//Si es un evento de gui
if (event.EventType == EET_GUI_EVENT)
{
s32 id = event.GUIEvent.Caller->getID();
IGUIEnvironment *guiEnv = Context.device->getGUIEnvironment();
//Si se a presionado el boton
if (event.GUIEvent.EventType == EGET_BUTTON_CLICKED)
{
//Cierra la aplicacion
if (id == QUIT)
{
Context.device->closeDevice();
return true;
}
//Crea una ventana nueva
if (id == NEW)
{
IGUIWindow *window = guiEnv->addWindow(rect<s32>(100, 100, 300, 200),
false, L"Ventana Nueva");
return true;
}
}
}
return false;
}
private:
//Variable del struct que construimos
SAppContext & Context;
};
int main()
{
//define un device para la pantalla
IrrlichtDevice *device = createDevice(EDT_OPENGL, dimension2d<u32>(640, 480), 16, false,
false, false, 0);
//en caso de error
if (!device)
return 1;
//Creo un driver de video
IVideoDriver *driver = device->getVideoDriver();
//Agrego componente del GUI o Interfaz Grafica de Usuario.
IGUIEnvironment *guiEnv = device->getGUIEnvironment();
//Establesco una fuente mediante un archivo xml que se encuentra en media de la carpeta de irrlicht
IGUIFont *font = guiEnv->getFont("lucida.xml");
//le agrego un texto y la posicion
guiEnv->addStaticText(L"Hola a todos", rect<s32>(100, 20, 200, 30), true);
//Agrego un boton para Salir
guiEnv->addButton(rect<s32>(250, 20, 250 + 120, 50), 0, QUIT, L"Salir", L"presiona para cerrar programa");
//Agrego un boton para crear nueva ventana
guiEnv->addButton(rect<s32>(400, 20, 400 + 120, 50), 0, NEW, L"Nueva Ventana", L"Presiona para crear nueva ventana");
//Creo un contexto con el struct que creamos
SAppContext context;
//le asigno mi device
context.device = device;
//Creo un objeto de mi clase
MyEventReceiver receiver(context);
device->setEventReceiver( &receiver );
//Gameloop
while (device->run())
{
driver->beginScene(true, true, SColor(255,255,255,255));
//muestro el texto
guiEnv->drawAll();
//Dibujo otro texto
font->draw(L"GUI en Irrlicht", rect<s32>(300, 300, 300, 50), SColor(255, 25, 25, 255));
driver->endScene();
}
//cerrar device
device->drop();
return 0;
}
No hay comentarios:
Publicar un comentario