gui ii. ogre3d gui with mygui. project initialization 06_02_ogre3d_mygui_base.zip extract run:...
TRANSCRIPT
GUI II.Ogre3D GUI with MyGUI
Project initialization http://cg.iit.bme.hu/gamedev/KIC/06_GUI/ 06_02_Ogre3D_MyGui_Base.zip Extract Run: OgreMyGui.sln Set include and library paths (if not correct) Set working directory (if not $
(SolutionDir)/bin) Compile Run Play !!
Ghost Game with Overlays
MyGUI• free, open source library
• targeted at Ogre3D
• relatively simple and flexible
• visual tools for GUI editing
• dismal documentation for coding
2012. 11. 8.
MyGUI compilation• there is no downloadable SDK
– but included in guibase.zip for you
• if code had to be compiled
– requires Ogre3D SDK
– requires FreeType library• for Windows, install FreeType for Windows from
gnuwin32.sourceforge.net
– requires CMake build tool
2012. 11. 8.
MyGUI configuration• in CMake specify Ogre and FreeType
directories as dependencies
• click “Generate”
• open generated MyGUI.sln in Visual Studio
– verify that boost version of the Ogre SDK is included (addition include dirs)
• compile MyGUIEngine and OgrePlatform
2012. 11. 8.
MyGUI includes• include directories
– ..\..\..\MyGUI_3.2.0\MyGUIEngine\include
– ..\..\..\MyGUI_3.2.0\Platforms\Ogre\OgrePlatform\include
2012. 11. 8.
main.cpp
#include "MyGUI.h"#include "MyGUI_OgrePlatform.h"
Channeling events to the GUI
2012. 11. 8.
class GuiInputHandler : public OIS::MouseListener , public OIS::KeyListener { public:bool mouseMoved( const OIS::MouseEvent &arg ) {return MyGUI::InputManager::getInstance().injectMouseMove(arg.state.X.abs, arg.state.Y.abs, arg.state.Z.abs); }bool mousePressed( const OIS::MouseEvent &arg, OIS::MouseButtonID id ){return MyGUI::InputManager::getInstance().injectMousePress( arg.state.X.abs, arg.state.Y.abs, MyGUI::MouseButton::Enum(id)); }bool mouseReleased( const OIS::MouseEvent &arg,OIS::MouseButtonID id ) {return MyGUI::InputManager::getInstance().injectMouseRelease( arg.state.X.abs, arg.state.Y.abs, MyGUI::MouseButton::Enum(id)); }bool keyPressed( const OIS::KeyEvent &arg ) {return MyGUI::InputManager::getInstance().injectKeyPress( MyGUI::KeyCode::Enum(arg.key), arg.text); }bool keyReleased( const OIS::KeyEvent &arg ) {return MyGUI::InputManager::getInstance().injectKeyRelease( MyGUI::KeyCode::Enum(arg.key)); } };
InputManager modification (inputs.h)
2012. 11. 8.
public:OIS::Keyboard* mKeyboard;OIS::Mouse* mMouse;
mKeyboard = static_cast<OIS::Keyboard*>(OISInputManager->createInputObject( OIS::OISKeyboard,
true ));mMouse = static_cast<OIS::Mouse*>(
OISInputManager->createInputObject( OIS::OISMouse, true ));
Listener registrationin main.cpp: setupListeners
2012. 11. 8.
GuiInputHandler* guiInputHander = new GuiInputHandler();inputManager->mMouse->
setEventCallback(guiInputHander);inputManager->mKeyboard->
setEventCallback(guiInputHander);
GUI initializationmain.cpp: setupScene
2012. 11. 8.
platform = new MyGUI::OgrePlatform();platform->initialise(renderWindow, sceneManager); gui = new MyGUI::Gui();gui->initialise();
// GUI element creation may commence here
Let us create a progress bar!
2012. 11. 8.
//globalMyGUI::ProgressPtr progressBar;
// in setupScene()// GUI element creation may commence hereprogressBar = gui->createWidget<MyGUI::ProgressBar> ("ProgressBar",100,10,500,30,MyGUI::Align::Center,"Main");// skin^ position^
progressBar->setEnabled(true);progressBar->setProgressRange(stopTimes[numStops-1]);progressBar->setProgressPosition(0);
Indicate progress in every frame!
2012. 11. 8.
progressBar->setProgressPosition(animTime);
Result
2012. 11. 8.
Add checkbox to toggle music on/off!
2012. 11. 8.
MyGUI::ButtonPtr button = gui->createWidget<MyGUI::Button> ("CheckBox", 10, 40, 300, 26, MyGUI::Align::Default, "Main");
button->setCaption("Music");
Result
2012. 11. 8.
GameAudio.h: new method
2012. 11. 8.
void setMusicVolume(float musicVolume) {this->musicVolume = musicVolume;AL_SAFE_CALL(
alSourcef (ambientSource, AL_GAIN, musicVolume),
"unable to set ambient volume");}
Global function
2012. 11. 8.
void guiToggleMusic(MyGUI::Widget* _sender) { MyGUI::ButtonPtr checkbox =
_sender->castType<MyGUI::Button>();if(checkbox->getStateSelected()) {
checkbox->setStateSelected(false);gameAudio->setMusicVolume(0);
} else {checkbox->setStateSelected(true);
gameAudio->setMusicVolume(10);}
}
Add event listener
2012. 11. 8.
button->eventMouseButtonClick +=MyGUI::newDelegate(
guiToggleMusic);
Result
2012. 11. 8.
The End
2012. 11. 8.