Irrlicht Lime wrapper of the IrrLicht Engine example 09- MeshViewer
Code can be compiled and run, but the coding for the slider bars does not work. (thus the 99%)
Still very educational.
Code: Select all
Option Explicit On
Imports System.Threading
Imports System.Collections.Generic
Imports System
Imports Microsoft.VisualBasic.Strings
Imports System.Net
Imports Microsoft.VisualBasic
Imports IrrlichtLime
Imports IrrlichtLime.Core
Imports IrrlichtLime.Video
Imports IrrlichtLime.IO
Imports IrrlichtLime.GUI
Imports IrrlichtLime.Scene
Imports IrrlichtLime.IrrlichtDevice
Imports System.Text
Imports System.IO
Imports System.ComponentModel
Imports System.Xml
Public Module Module1
Public device As IrrlichtDevice = Nothing
Public startUpModelFile As String
Public messageText As String
Public caption As String
Public model As SceneNode = Nothing
Public skybox As SceneNode = Nothing
Public octree As Boolean = False
Public useLight As Boolean = False
Public camera(1) As CameraSceneNode
' Values used to identify individual GUI elements
Public Enum guiID
DialogRootWindow = &H10000
XScale
YScale
ZScale
OpenModel
SetModelArchive
LoadAsOctree
SkyBoxVisible
ToggleDebugInfo
DebugOff
DebugBoundingBox
DebugNormals
DebugSkeleton
DebugWireOverlay
DebugHalfTransparent
DebugBuffersBoundingBoxes
DebugAll
ModelMaterialSolid
ModelMaterialTransparent
ModelMaterialReflection
CameraMaya
CameraFirstPerson
PositionText
About
Quit
TextureFilter
SkinTransparency
SkinAnimationFPS
ButtonSetScale
ButtonScaleMul10
ButtonScaleDiv10
ButtonOpenModel
ButtonShowAbout
ButtonShowToolbox
ButtonSelectArchive
Logo
End Enum
' And some magic numbers
Private Const MaxFramerate As Integer = 1000
Private Const DefaultFramerate As Integer = 30
Public Sub Main(ByVal args() As String)
Dim driverType As New DriverType
driverType = AskUserForDriver(driverType)
device = IrrlichtDevice.CreateDevice(driverType, New Dimension2Di(800, 600), 16)
If device Is Nothing Then
Return
End If
AddHandler device.OnEvent, AddressOf device_OnEvent
device.SetWindowResizable(True)
device.SetWindowCaption("Irrlicht Engine - Loading...")
Dim driver As VideoDriver = device.VideoDriver
Dim env As GUIEnvironment = device.GUIEnvironment
Dim smgr As SceneManager = device.SceneManager
' "COLLADA_CreateSceneInstances" is a value of scene::COLLADA_CREATE_SCENE_INSTANCES, Irrlicht' constant.
' It is not ported yet, so for Lime it is a "magic" value.
' All "magic" values that can be used with SceneManager's Attributes,
' described in "Variables" section at http://irrlicht.sourceforge.net/docu/namespaceirr_1_1scene.html.
smgr.Attributes.SetValue("COLLADA_CreateSceneInstances", True)
driver.SetTextureCreationFlag(TextureCreationFlag.Always32Bit, True)
smgr.AddLightSceneNode(Nothing, New Vector3Df(200), New Colorf(1.0F, 1.0F, 1.0F), 2000)
smgr.AmbientLight = New Colorf(0.3F, 0.3F, 0.3F)
' add our media directory as "search path"
device.FileSystem.AddFileArchive("../../media/")
' read configuration from xml file
' (we use .NET way to do this, since Lime doesn't support native Irrlicht' xml reader)
Dim xml As New XmlDocument()
xml.Load("../../media/config.xml")
startUpModelFile = xml.DocumentElement("startUpModel").Attributes("file").Value
caption = xml.DocumentElement("messageText").Attributes("caption").Value
messageText = xml.DocumentElement("messageText").InnerText
If args.Length > 0 Then
startUpModelFile = args(0)
End If
' set a nicer font
Dim font As GUIFont = env.GetFont("fonthaettenschweiler.bmp")
If font IsNot Nothing Then
env.Skin.SetFont(font)
End If
' load the irrlicht engine logo
Dim img As GUIImage = env.AddImage(driver.GetTexture("irrlichtlogoalpha2.tga"), New Vector2Di(10, CInt(driver.ScreenSize.Height) - 128))
img.ID = CInt(Fix(guiID.Logo))
' lock the logo's edges to the bottom left corner of the screen
img.SetAlignment(GUIAlignment.UpperLeft, GUIAlignment.UpperLeft, GUIAlignment.LowerRight, GUIAlignment.LowerRight)
' create menu
Dim menu As GUIContextMenu = env.AddMenu()
menu.AddItem("File", -1, True, True)
menu.AddItem("View", -1, True, True)
menu.AddItem("Camera", -1, True, True)
menu.AddItem("Help", -1, True, True)
Dim submenu As GUIContextMenu
submenu = menu.GetSubMenu(0)
submenu.AddItem("Open Model File & Texture...", CInt(Fix(guiID.OpenModel)))
submenu.AddItem("Set Model Archive...", CInt(Fix(guiID.SetModelArchive)))
submenu.AddItem("Load as Octree", CInt(Fix(guiID.LoadAsOctree)))
submenu.AddSeparator()
submenu.AddItem("Quit", CInt(Fix(guiID.Quit)))
submenu = menu.GetSubMenu(1)
submenu.AddItem("sky box visible", CInt(Fix(guiID.SkyBoxVisible)), True, False, True)
submenu.AddItem("toggle model debug information", CInt(Fix(guiID.ToggleDebugInfo)), True, True)
submenu.AddItem("model material", -1, True, True)
submenu = submenu.GetSubMenu(1)
submenu.AddItem("Off", CInt(Fix(guiID.DebugOff)))
submenu.AddItem("Bounding Box", CInt(Fix(guiID.DebugBoundingBox)))
submenu.AddItem("Normals", CInt(Fix(guiID.DebugNormals)))
submenu.AddItem("Skeleton", CInt(Fix(guiID.DebugSkeleton)))
submenu.AddItem("Wire overlay", CInt(Fix(guiID.DebugWireOverlay)))
submenu.AddItem("Half-Transparent", CInt(Fix(guiID.DebugHalfTransparent)))
submenu.AddItem("Buffers bounding boxes", CInt(Fix(guiID.DebugBuffersBoundingBoxes)))
submenu.AddItem("All", CInt(Fix(guiID.DebugAll)))
submenu = menu.GetSubMenu(1).GetSubMenu(2)
submenu.AddItem("Solid", CInt(Fix(guiID.ModelMaterialSolid)))
submenu.AddItem("Transparent", CInt(Fix(guiID.ModelMaterialTransparent)))
submenu.AddItem("Reflection", CInt(Fix(guiID.ModelMaterialReflection)))
submenu = menu.GetSubMenu(2)
submenu.AddItem("Maya Style", CInt(Fix(guiID.CameraMaya)))
submenu.AddItem("First Person", CInt(Fix(guiID.CameraFirstPerson)))
submenu = menu.GetSubMenu(3)
submenu.AddItem("About", CInt(Fix(guiID.About)))
' create toolbar
Dim bar As GUIToolBar = env.AddToolBar()
Dim image As Texture = driver.GetTexture("open.png")
bar.AddButton(CInt(Fix(guiID.ButtonOpenModel)), Nothing, "Open a model", image, Nothing, False, True)
image = driver.GetTexture("tools.png")
bar.AddButton(CInt(Fix(guiID.ButtonShowToolbox)), Nothing, "Open Toolset", image, Nothing, False, True)
image = driver.GetTexture("zip.png")
bar.AddButton(CInt(Fix(guiID.ButtonSelectArchive)), Nothing, "Set Model Archive", image, Nothing, False, True)
image = driver.GetTexture("help.png")
bar.AddButton(CInt(Fix(guiID.ButtonShowAbout)), Nothing, "Open Help", image, Nothing, False, True)
' create a combobox with some senseless texts
Dim box As GUIComboBox = env.AddComboBox(New Recti(250, 4, 350, 23), bar, CInt(Fix(guiID.TextureFilter)))
box.AddItem("No filtering")
box.AddItem("Bilinear")
box.AddItem("Trilinear")
box.AddItem("Anisotropic")
box.AddItem("Isotropic")
' disable alpha
setSkinTransparency(255, env.Skin)
' add a tabcontrol
createToolBox()
' create fps text
Dim fpstext As GUIStaticText = env.AddStaticText("", New Recti(400, 4, 570, 23), True, False, bar)
Dim postext As GUIStaticText = env.AddStaticText("", New Recti(10, 50, 470, 80), False, False, Nothing, CInt(Fix(guiID.PositionText)))
postext.Visible = False
' show about message box and load default model
If args.Length = 0 Then
showAboutText()
End If
loadModel(startUpModelFile)
' add skybox
skybox = smgr.AddSkyBoxSceneNode("irrlicht2_up.jpg", "irrlicht2_dn.jpg", "irrlicht2_lf.jpg", "irrlicht2_rt.jpg", "irrlicht2_ft.jpg", "irrlicht2_bk.jpg")
' add a camera scene node
camera(0) = smgr.AddCameraSceneNodeMaya()
camera(0).FarValue = 20000
' Maya cameras reposition themselves relative to their target,
' so target the location where the mesh scene node is placed.
camera(0).Target = New Vector3Df(0, 30, 0)
camera(1) = smgr.AddCameraSceneNodeFPS()
camera(1).FarValue = 20000
camera(1).Position = New Vector3Df(0, 0, -70)
camera(1).Target = New Vector3Df(0, 30, 0)
setActiveCamera(camera(0))
' set window caption
caption = String.Format("{0} - [{1}]", caption, driver.Name)
device.SetWindowCaption(caption)
' draw everything
Do While device.Run() AndAlso driver IsNot Nothing
If device.WindowActive Then
driver.BeginScene(True, True, New Color(50, 50, 50))
smgr.DrawAll()
env.DrawAll()
driver.EndScene()
Dim str As String = String.Format("FPS: {0} Tris: {1}", driver.FPS, driver.PrimitiveCountDrawn)
fpstext.Text = str
Dim cam As CameraSceneNode = device.SceneManager.ActiveCamera
str = String.Format("Pos: {0} Tgt: {1}", cam.Position, cam.Target)
postext.Text = str
Else
device.Yield()
End If
Loop
device.Drop()
End Sub
Public Function device_OnEvent(ByVal e As [Event]) As Boolean
' Escape swaps Camera Input
If e.Type = EventType.Key AndAlso (Not e.Key.PressedDown) AndAlso OnKeyUp(e.Key.Key) Then
Return True
End If
If e.Type = EventType.GUI Then
Dim id As guiID = CType(e.GUI.Caller.ID, guiID)
Dim env As GUIEnvironment = device.GUIEnvironment
Select Case e.GUI.Type
Case GUIEventType.MenuItemSelected
' a menu item was clicked
OnMenuItemSelected(e.GUI.Caller)
Case GUIEventType.FileDialogFileSelected
' load the model file, selected in the file open dialog
loadModel(e.ToString)
Case GUIEventType.ScrollBarChanged
If id = guiID.SkinTransparency Then
' Can't figure this part out. transparancey control
'
' control skin transparency
'Dim p As Integer = e.GUI.Element. 'Element ' Integer = 0 ' e.GUI.Element.
'setSkinTransparency(p, env.Skin)
' setSkinTransparency(p, env.Skin)
ElseIf id = guiID.SkinAnimationFPS Then
'control animation speed
Dim p As GUI.GUIScrollBar = e.GUI.Element 'As Integer = 0 'e.GUI.Caller.Position
If model.Type = SceneNodeType.AnimatedMesh Then
' Can't figure this part out. Animation speed control
'
' AnimatedMeshSceneNode.AnimationSpeed
' model.
' model = AnimatedMeshSceneNode '
' model. = p.Position
End If
End If
Case GUIEventType.ComboBoxChanged
If id = guiID.TextureFilter Then
' control anti-aliasing/filtering
OnTextureFilterSelected(e.GUI.Caller)
End If
Case GUIEventType.ButtonClicked
Select Case id
Case guiID.ButtonSetScale
' set scale
Dim r As GUIElement = env.RootElement
Dim s As New Vector3Df(Convert.ToSingle(r.GetElementFromID(CInt(Fix(guiID.XScale)), True).Text), Convert.ToSingle(r.GetElementFromID(CInt(Fix(guiID.YScale)), True).Text), Convert.ToSingle(r.GetElementFromID(CInt(Fix(guiID.ZScale)), True).Text))
If model IsNot Nothing Then
model.Scale = s
End If
updateScaleInfo(model)
Case guiID.ButtonScaleMul10
If model IsNot Nothing Then
model.Scale *= 10
End If
updateScaleInfo(model)
Case guiID.ButtonScaleDiv10
If model IsNot Nothing Then
model.Scale *= 0.1F
End If
updateScaleInfo(model)
Case guiID.ButtonOpenModel
env.AddFileOpenDialog("Please select a model file to open")
Case guiID.ButtonSelectArchive
env.AddFileOpenDialog("Please select your game archive/directory")
Case guiID.ButtonShowAbout
showAboutText()
Case guiID.ButtonShowToolbox
createToolBox()
End Select
End Select
End If
Return False
End Function
Public Function OnKeyUp(ByVal keyCode As KeyCode) As Boolean
If device Is Nothing Then
Return False
End If
Select Case keyCode
Case keyCode.Esc
Dim c As CameraSceneNode = device.SceneManager.ActiveCamera
If c IsNot Nothing Then
c.InputReceiverEnabled = Not c.InputReceiverEnabled
End If
Return True
Case keyCode.F1
Dim e As GUIElement = device.GUIEnvironment.RootElement.GetElementFromID(CInt(Fix(guiID.PositionText)))
If e IsNot Nothing Then
e.Visible = Not e.Visible
End If
Case keyCode.KeyM
device.MinimizeWindow()
Case keyCode.KeyL
useLight = Not useLight
If model IsNot Nothing Then
model.SetMaterialFlag(MaterialFlag.Lighting, useLight)
model.SetMaterialFlag(MaterialFlag.NormalizeNormals, useLight)
End If
End Select
Return False
End Function
Public Sub OnMenuItemSelected(ByVal menu As GUIContextMenu)
Dim id As guiID = CType(menu.SelectedCommandID, guiID)
Dim env As GUIEnvironment = device.GUIEnvironment
Select Case id
Case guiID.OpenModel ' FilOnButtonSetScalinge -> Open Model
env.AddFileOpenDialog("Please select a model file to open")
Case guiID.SetModelArchive ' File -> Set Model Archive
env.AddFileOpenDialog("Please select your game archive/directory")
Case guiID.LoadAsOctree ' File -> LoadAsOctree
octree = Not octree
menu.SetItemChecked(menu.SelectedIndex, octree)
Case guiID.Quit ' File -> Quit
device.Close()
Case guiID.SkyBoxVisible ' View -> Skybox
menu.SetItemChecked(menu.SelectedIndex, (Not menu.GetItemChecked(menu.SelectedIndex)))
skybox.Visible = Not skybox.Visible
Case guiID.DebugOff ' View -> Debug Information -> Off
For i As Integer = 1 To 6
menu.SetItemChecked(menu.SelectedIndex + i, False)
Next i
If model IsNot Nothing Then
model.DebugDataVisible = DebugSceneType.Off
End If
Case guiID.DebugBoundingBox ' View -> Debug Information -> Bounding Box
menu.SetItemChecked(menu.SelectedIndex, (Not menu.GetItemChecked(menu.SelectedIndex)))
If model IsNot Nothing Then
model.DebugDataVisible = model.DebugDataVisible Xor DebugSceneType.BBox
End If
Case guiID.DebugNormals ' View -> Debug Information -> Normals
menu.SetItemChecked(menu.SelectedIndex, (Not menu.GetItemChecked(menu.SelectedIndex)))
If model IsNot Nothing Then
model.DebugDataVisible = model.DebugDataVisible Xor DebugSceneType.Normals
End If
Case guiID.DebugSkeleton ' View -> Debug Information -> Skeleton
menu.SetItemChecked(menu.SelectedIndex, (Not menu.GetItemChecked(menu.SelectedIndex)))
If model IsNot Nothing Then
model.DebugDataVisible = model.DebugDataVisible Xor DebugSceneType.Skeleton
End If
Case guiID.DebugWireOverlay ' View -> Debug Information -> Wire overlay
menu.SetItemChecked(menu.SelectedIndex, (Not menu.GetItemChecked(menu.SelectedIndex)))
If model IsNot Nothing Then
model.DebugDataVisible = model.DebugDataVisible Xor DebugSceneType.MeshWireOverlay
End If
Case guiID.DebugHalfTransparent ' View -> Debug Information -> Half-Transparent
menu.SetItemChecked(menu.SelectedIndex, (Not menu.GetItemChecked(menu.SelectedIndex)))
If model IsNot Nothing Then
model.DebugDataVisible = model.DebugDataVisible Xor DebugSceneType.HalfTransparency
End If
Case guiID.DebugBuffersBoundingBoxes ' View -> Debug Information -> Buffers bounding boxes
menu.SetItemChecked(menu.SelectedIndex, (Not menu.GetItemChecked(menu.SelectedIndex)))
If model IsNot Nothing Then
model.DebugDataVisible = model.DebugDataVisible Xor DebugSceneType.BBoxBuffers
End If
Case guiID.DebugAll ' View -> Debug Information -> All
For i As Integer = 1 To 6
menu.SetItemChecked(menu.SelectedIndex - i, True)
Next i
If model IsNot Nothing Then
model.DebugDataVisible = DebugSceneType.Full
End If
Case guiID.About ' Help->About
showAboutText()
Case guiID.ModelMaterialSolid ' View -> Material -> Solid
If model IsNot Nothing Then
model.SetMaterialType(MaterialType.Solid)
End If
Case guiID.ModelMaterialTransparent ' View -> Material -> Transparent
If model IsNot Nothing Then
model.SetMaterialType(MaterialType.TransparentAddColor)
End If
Case guiID.ModelMaterialReflection ' View -> Material -> Reflection
If model IsNot Nothing Then
model.SetMaterialType(MaterialType.SphereMap)
End If
Case guiID.CameraMaya
setActiveCamera(camera(0))
Case guiID.CameraFirstPerson
setActiveCamera(camera(1))
End Select
End Sub
Public Sub OnTextureFilterSelected(ByVal combo As GUIComboBox)
If model Is Nothing Then
Return
End If
Dim p As Integer = combo.SelectedIndex
Select Case p
Case 0 ' No filtering
model.SetMaterialFlag(MaterialFlag.BilinearFilter, False)
model.SetMaterialFlag(MaterialFlag.TrilinearFilter, False)
model.SetMaterialFlag(MaterialFlag.AnisotropicFilter, False)
Case 1 ' Bilinear
model.SetMaterialFlag(MaterialFlag.BilinearFilter, True)
model.SetMaterialFlag(MaterialFlag.TrilinearFilter, False)
Case 2 ' Trilinear
model.SetMaterialFlag(MaterialFlag.BilinearFilter, False)
model.SetMaterialFlag(MaterialFlag.TrilinearFilter, True)
Case 3 ' Anisotropic
model.SetMaterialFlag(MaterialFlag.AnisotropicFilter, True)
Case 4 ' Isotropic
model.SetMaterialFlag(MaterialFlag.AnisotropicFilter, False)
End Select
End Sub
Public Sub setActiveCamera(ByVal newActive As CameraSceneNode)
If device Is Nothing Then
Return
End If
Dim c As CameraSceneNode = device.SceneManager.ActiveCamera
c.InputReceiverEnabled = False
newActive.InputReceiverEnabled = True
device.SceneManager.ActiveCamera = newActive
End Sub
Public Sub setSkinTransparency(ByVal alpha As Integer, ByVal skin As GUISkin)
Dim I As Integer
For I = 0 To 24 ' (0 to 24 is the enums of GUIDefaultColor)
'System.Enum.GetValues '(typeof(GUIDefaultColor))
Dim c As Color = skin.GetColor(I)
c.Alpha = alpha
skin.SetColor(c, I)
Next
End Sub
Public Sub updateScaleInfo(ByVal model As SceneNode)
Dim t As GUIElement = device.GUIEnvironment.RootElement.GetElementFromID(CInt(Fix(guiID.DialogRootWindow)), True)
If t Is Nothing Then
Return
End If
If model Is Nothing Then
t.GetElementFromID(CInt(Fix(guiID.XScale)), True).Text = "-"
t.GetElementFromID(CInt(Fix(guiID.YScale)), True).Text = "-"
t.GetElementFromID(CInt(Fix(guiID.ZScale)), True).Text = "-"
Else
Dim s As Vector3Df = model.Scale
t.GetElementFromID(CInt(Fix(guiID.XScale)), True).Text = s.X.ToString()
t.GetElementFromID(CInt(Fix(guiID.YScale)), True).Text = s.Y.ToString()
t.GetElementFromID(CInt(Fix(guiID.ZScale)), True).Text = s.Z.ToString()
End If
End Sub
Public Sub showAboutText()
device.GUIEnvironment.AddMessageBox(caption, messageText)
End Sub
Public Sub loadModel(ByVal f As String)
Dim e As String = Path.GetExtension(f)
Select Case e
' if a texture is loaded apply it to the current model
Case ".jpg", ".pcx", ".png", ".ppm", ".pgm", ".pbm", ".psd", ".tga", ".bmp", ".wal", ".rgb", ".rgba"
Dim t As Texture = device.VideoDriver.GetTexture(f)
If t IsNot Nothing AndAlso model IsNot Nothing Then
' always reload texture
device.VideoDriver.RemoveTexture(t)
t = device.VideoDriver.GetTexture(f)
model.SetMaterialTexture(0, t)
End If
Return
' if a archive is loaded add it to the FileArchive
Case ".pk3", ".zip", ".pak", ".npk"
device.FileSystem.AddFileArchive(f)
Return
End Select
' load a model into the engine
If model IsNot Nothing Then
model.Remove()
End If
model = Nothing
If e = ".irr" Then
device.SceneManager.LoadScene(f)
model = device.SceneManager.GetSceneNodeFromType(SceneNodeType.AnimatedMesh)
Return
End If
Dim m As AnimatedMesh = device.SceneManager.GetMesh(f)
If m Is Nothing Then
' model could not be loaded
If startUpModelFile <> f Then
device.GUIEnvironment.AddMessageBox(caption, "The model could not be loaded. Maybe it is not a supported file format.")
End If
Return
End If
' set default material properties
If octree Then
model = device.SceneManager.AddOctreeSceneNode(m.GetMesh(0))
Else
Dim n As AnimatedMeshSceneNode = device.SceneManager.AddAnimatedMeshSceneNode(m)
n.AnimationSpeed = 30
model = n
End If
model.SetMaterialFlag(MaterialFlag.Lighting, useLight)
model.SetMaterialFlag(MaterialFlag.NormalizeNormals, useLight)
model.DebugDataVisible = DebugSceneType.Off
' we need to uncheck the menu entries. would be cool to fake a menu event, but
' that's not so simple. so we do it brute force
Dim u As GUIContextMenu = device.GUIEnvironment.RootElement.GetElementFromID(CInt(Fix(guiID.ToggleDebugInfo)), True)
If u IsNot Nothing Then
For i As Integer = 0 To 5
u.SetItemChecked(i, False)
Next i
End If
updateScaleInfo(model)
End Sub
Public Sub createToolBox()
Dim env As GUIEnvironment = device.GUIEnvironment
Dim root As GUIElement = env.RootElement
' remove tool box if already there
Dim e As GUIElement = root.GetElementFromID(CInt(Fix(guiID.DialogRootWindow)), True)
If e IsNot Nothing Then
e.Remove()
End If
' create the toolbox window
Dim w As GUIWindow = env.AddWindow(New Recti(600, 45, 800, 480), False, "Toolset", Nothing, CInt(Fix(guiID.DialogRootWindow)))
' create tab control and tabs
Dim tab As GUITabControl = env.AddTabControl(New Recti(2, 20, 800 - 602, 480 - 7), w, True, True)
Dim t1 As GUITab = tab.AddTab("Config")
' add some edit boxes and a button to tab one
env.AddStaticText("Scale:", New Recti(10, 20, 60, 45), False, False, t1)
env.AddStaticText("X:", New Recti(22, 48, 40, 66), False, False, t1)
env.AddEditBox("1.0", New Recti(40, 46, 130, 66), True, t1, CInt(Fix(guiID.XScale)))
env.AddStaticText("Y:", New Recti(22, 78, 40, 96), False, False, t1)
env.AddEditBox("1.0", New Recti(40, 76, 130, 96), True, t1, CInt(Fix(guiID.YScale)))
env.AddStaticText("Z:", New Recti(22, 108, 40, 126), False, False, t1)
env.AddEditBox("1.0", New Recti(40, 106, 130, 126), True, t1, CInt(Fix(guiID.ZScale)))
env.AddButton(New Recti(10, 134, 85, 165), t1, CInt(Fix(guiID.ButtonSetScale)), "Set")
' quick scale buttons
env.AddButton(New Recti(65, 20, 95, 40), t1, CInt(Fix(guiID.ButtonScaleMul10)), "* 10")
env.AddButton(New Recti(100, 20, 130, 40), t1, CInt(Fix(guiID.ButtonScaleDiv10)), "* 0.1")
updateScaleInfo(model)
' add transparency control
env.AddStaticText("GUI Transparency Control:", New Recti(10, 200, 150, 225), True, False, t1)
Dim b As GUIScrollBar = env.AddScrollBar(True, New Recti(10, 225, 150, 240), t1, CInt(Fix(guiID.SkinTransparency)))
b.MaxValue = 255
b.Position = 255
' add framerate control
env.AddStaticText("Framerate:", New Recti(10, 240, 150, 265), True, False, t1)
b = env.AddScrollBar(True, New Recti(10, 265, 150, 280), t1, CInt(Fix(guiID.SkinAnimationFPS)))
b.MaxValue = MaxFramerate
b.MinValue = -MaxFramerate
b.Position = DefaultFramerate
' bring irrlicht engine logo to front, because it now may be below the newly created toolbox
root.BringToFront(root.GetElementFromID(CInt(Fix(guiID.Logo)), True))
End Sub
Public Function AskUserForDriver(ByVal OutdriverType As Integer) As Integer
OutdriverType = DriverType.Null
Console.Write("Please select the driver you want for this example:" & vbLf & " (a) OpenGL" & vbLf & " (b) Direct3D 9.0c" & vbLf & " (c) Direct3D 8.1" & vbLf & " (d) Burning's Software Renderer" & vbLf & " (e) Software Renderer" & vbLf & " (f) NullDevice" & vbLf & " (otherKey) exit" & vbLf & vbLf)
Dim i As ConsoleKeyInfo = Console.ReadKey()
Select Case i.Key
Case ConsoleKey.A
OutdriverType = DriverType.OpenGL
Case ConsoleKey.B
OutdriverType = DriverType.Direct3D9
Case ConsoleKey.C
OutdriverType = DriverType.Direct3D8
Case ConsoleKey.D
OutdriverType = DriverType.BurningsVideo
Case ConsoleKey.E
OutdriverType = DriverType.Software
Case ConsoleKey.F
OutdriverType = DriverType.Null
Case Else
Return 0
End Select
Return OutdriverType
Return True
End Function
End Module