forked from Mirrorlandia_minetest/irrlicht
114 lines
3.2 KiB
C++
114 lines
3.2 KiB
C++
#include <irrlicht.h>
|
|
#include "exampleHelper.h"
|
|
|
|
using namespace irr;
|
|
|
|
static video::E_DRIVER_TYPE chooseDriver(const char *arg_)
|
|
{
|
|
if (core::stringc(arg_) == "null")
|
|
return video::EDT_NULL;
|
|
|
|
if (IrrlichtDevice::isDriverSupported(video::EDT_OGLES1))
|
|
return video::EDT_OGLES1;
|
|
if (IrrlichtDevice::isDriverSupported(video::EDT_OGLES2))
|
|
return video::EDT_OGLES2;
|
|
return video::EDT_OPENGL;
|
|
}
|
|
|
|
int main(int argc, char *argv[])
|
|
{
|
|
SIrrlichtCreationParameters p;
|
|
p.DriverType = chooseDriver(argc > 1 ? argv[1] : "");
|
|
p.WindowSize = core::dimension2du(640, 480);
|
|
p.Vsync = true;
|
|
p.LoggingLevel = ELL_DEBUG;
|
|
|
|
IrrlichtDevice *device = createDeviceEx(p);
|
|
if (!device)
|
|
return 1;
|
|
|
|
device->setWindowCaption(L"Hello World!");
|
|
device->setResizable(true);
|
|
|
|
video::IVideoDriver* driver = device->getVideoDriver();
|
|
scene::ISceneManager* smgr = device->getSceneManager();
|
|
gui::IGUIEnvironment* guienv = device->getGUIEnvironment();
|
|
|
|
guienv->addStaticText(L"sample text", core::rect<s32>(10,10,110,22), false);
|
|
|
|
gui::IGUIButton* button = guienv->addButton(
|
|
core::rect<s32>(10,30,110,30 + 32), 0, -1, L"sample button",
|
|
L"sample tooltip");
|
|
|
|
gui::IGUIEditBox* editbox = guienv->addEditBox(L"",
|
|
core::rect<s32>(10,70,60,70 + 16));
|
|
|
|
const io::path mediaPath = getExampleMediaPath();
|
|
|
|
scene::IAnimatedMesh* mesh = smgr->getMesh(mediaPath + "coolguy_opt.x");
|
|
if (!mesh)
|
|
return 1;
|
|
scene::IAnimatedMeshSceneNode* node = smgr->addAnimatedMeshSceneNode(mesh);
|
|
if (node)
|
|
{
|
|
node->setMaterialFlag(video::EMF_LIGHTING, false);
|
|
node->setFrameLoop(0, 29);
|
|
node->setAnimationSpeed(30);
|
|
node->setMaterialTexture(0, driver->getTexture(mediaPath + "cooltexture.png"));
|
|
}
|
|
|
|
smgr->addCameraSceneNode(0, core::vector3df(0,4,5), core::vector3df(0,2,0));
|
|
|
|
s32 n = 0;
|
|
SEvent event;
|
|
device->getTimer()->start();
|
|
|
|
while (device->run())
|
|
{
|
|
if (device->getTimer()->getTime() >= 1300)
|
|
{
|
|
device->getTimer()->setTime(0);
|
|
++n;
|
|
if (n == 1) // Tooltip display
|
|
{
|
|
bzero(&event, sizeof(SEvent));
|
|
event.EventType = irr::EET_MOUSE_INPUT_EVENT;
|
|
event.MouseInput.Event = irr::EMIE_MOUSE_MOVED;
|
|
event.MouseInput.X = button->getAbsolutePosition().getCenter().X;
|
|
event.MouseInput.Y = button->getAbsolutePosition().getCenter().Y;
|
|
device->postEventFromUser(event);
|
|
}
|
|
else if (n == 2) // Text input focus
|
|
guienv->setFocus(editbox);
|
|
else if (n == 3) // Keypress for Text input
|
|
{
|
|
bzero(&event, sizeof(SEvent));
|
|
event.EventType = irr::EET_KEY_INPUT_EVENT;
|
|
event.KeyInput.Char = L'a';
|
|
event.KeyInput.Key = KEY_KEY_A;
|
|
event.KeyInput.PressedDown = true;
|
|
device->postEventFromUser(event);
|
|
event.KeyInput.PressedDown = false;
|
|
device->postEventFromUser(event);
|
|
}
|
|
else
|
|
device->closeDevice();
|
|
}
|
|
|
|
driver->beginScene(video::ECBF_COLOR | video::ECBF_DEPTH,
|
|
video::SColor(255,100,100,150));
|
|
smgr->drawAll();
|
|
guienv->drawAll();
|
|
driver->endScene();
|
|
}
|
|
|
|
if (core::stringw(L"a") != editbox->getText()) {
|
|
device->getLogger()->log("EditBox text mismatch", ELL_INFORMATION);
|
|
return 1;
|
|
}
|
|
|
|
device->getLogger()->log("Done.", ELL_INFORMATION);
|
|
device->drop();
|
|
return 0;
|
|
}
|