static void Main(string[] args)
{
//We choosed OpenGL because it is cross-platform and GUI does not need
//Amazing performances...
IrrlichtDevice device = new IrrlichtDevice(DriverType.OpenGL,
new Dimension2D(640, 480),
16, false, false, false, false);
//Delegate that will catch our events
device.OnEvent += new OnEventDelegate(device_OnEvent);
//Does not seem to work on Linux but well...
device.Resizeable = false;
//We set a basic caption
device.WindowCaption = "Irrlicht .NET CP General User Interface Example";
//We set our handlers
driver = device.VideoDriver;
guienv = device.GUIEnvironment;
//We set the skin as a metallic windows skin
guienv.Skin = guienv.CreateSkin(GUISkinTypes.WindowsMetallic);
guienv.Skin.SetColor(GuiDefaultColor.ButtonText, Color.White);
TTFont font = new TTFont(device.VideoDriver);
font.Antialias = true;
TTFace face = new TTFace();
face.Load("../../medias/FreeSans.ttf");
font.Attach(face, 14);
guienv.Skin.Font = font;
//Our fader. We set it as first because we don't want him to hide our buttons.
guienv.AddInOutFader(null, (int)GUIItems.Fader);
//We add several buttons with the IDs we defined downwards
guienv.AddButton(new Rect(new Position2D(250, 0), new Dimension2D(140, 100)),
null, (int)GUIItems.ClickMe, "Click me !");
guienv.AddButton(new Rect(new Position2D(250, 380), new Dimension2D(140, 100)),
null, (int)GUIItems.DontClickMe, "Don't click me !");
guienv.AddButton(new Rect(new Position2D(0, 190), new Dimension2D(140, 100)),
null, (int)GUIItems.FadeMe, "Fade me !");
guienv.AddButton(new Rect(new Position2D(500, 190), new Dimension2D(140, 100)),
null, (int)GUIItems.FunnyEffect, "Funny effect !");
guienv.AddStaticText ("Move this scrollbar and you'll see the miracle !", new Rect(new Position2D(220, 240), new Dimension2D(240, 30)),
false, true, null, -1, false);
guienv.AddSpinBox ("", new Rect(new Position2D (220, 270), new Dimension2D (120, 30)), null, -1);
guienv.AddEditBox ("", new Rect(new Position2D (220, 300), new Dimension2D (120, 30)), true, null, -1);
listbox = guienv.AddListBox(new Rect(new Position2D(400, 20), new Dimension2D(220, 150)), null, -1, true);
//Our logo
guienv.AddImage(driver.GetTexture("../../medias/NETCPlogo.png"), new Position2D(0, 0), true, null, -1, "");
//And now the scrollbar
GUIScrollBar scroll = guienv.AddScrollBar(true, new Rect(new Position2D(220, 220), new Dimension2D(240, 20)), null,
(int)GUIItems.ScrollBar);
el = new CustomElement(guienv, null, -1, new Rect(new Position2D(220, 120), new Dimension2D(160, 100)));
//Var for the funny effects
int toAdd = 1;
//While the device is running and we don't want him to exit
while (device.Run() && !Exit)
{
//If our funny effect is enabled, we just scroll the scrollbar
//It may seems strange but the "ScrollBarChanged" event is NOT fired
//When we manually change the position... It's a gift and a cursed, depending on the situation.
if (FunnyEffectEnabled)
{
scroll.Pos += toAdd;
if(scroll.Pos >= 100 || scroll.Pos <= 0)
toAdd = -toAdd;
BackColor = Color.From(255, 255-scroll.Pos * 5 / 2, 255 - (scroll.Pos * 5 / 2), scroll.Pos * 5 / 2);
}
//Here we are, we begin the scene
//Notice that we DO NOT use the ZBuffer because we have only two dimensions
driver.BeginScene(true, false, BackColor);
//We draw all the GUI
guienv.DrawAll();
//And we end
driver.EndScene();
}
//As in the first example, we need to release main resources
device.DumpElements();
device.Close();
}