gui i i
DESCRIPTION
GUI I I . Ogre3D GUI with MyGUI. Project initialization. http://cg.iit.bme.hu/gamedev/KIC/06_GUI/ 06_02_Ogre3D_ MyGui _ Base.zip Extract Run: Ogre MyGui . sln Set include and library paths (if not correct) Set working directory (if not $( SolutionDir )/bin) Compile Run Play !!. - PowerPoint PPT PresentationTRANSCRIPT
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 OgrePlatform2012. 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.