Transcript GUI II.

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\OgrePlatfo
rm\include
main.cpp
#include "MyGUI.h"
#include "MyGUI_OgrePlatform.h"
2012. 11. 8.
Channeling events to the GUI
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)); } };
2012. 11. 8.
InputManager modification
(inputs.h)
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 ));
2012. 11. 8.
Listener registration
in main.cpp: setupListeners
GuiInputHandler* guiInputHander = new GuiInputHandler();
inputManager->mMouse->
setEventCallback(guiInputHander);
inputManager->mKeyboard->
setEventCallback(guiInputHander);
2012. 11. 8.
GUI initialization
main.cpp: setupScene
platform = new MyGUI::OgrePlatform();
platform->initialise(renderWindow, sceneManager);
gui = new MyGUI::Gui();
gui->initialise();
// GUI element creation may commence here
2012. 11. 8.
Let us create a progress bar!
//global
MyGUI::ProgressPtr progressBar;
// in setupScene()
// GUI element creation may commence here
progressBar = 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);
2012. 11. 8.
Indicate progress in every frame!
progressBar->setProgressPosition(animTime);
2012. 11. 8.
Result
2012. 11. 8.
Add checkbox to toggle music
on/off!
MyGUI::ButtonPtr button =
gui->createWidget<MyGUI::Button>
("CheckBox", 10, 40, 300, 26,
MyGUI::Align::Default, "Main");
button->setCaption("Music");
2012. 11. 8.
Result
2012. 11. 8.
GameAudio.h: new method
void setMusicVolume(float musicVolume) {
this->musicVolume = musicVolume;
AL_SAFE_CALL(
alSourcef (ambientSource,
AL_GAIN, musicVolume),
"unable to set ambient volume");
}
2012. 11. 8.
Global function
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);
}
}
2012. 11. 8.
Add event listener
button->eventMouseButtonClick +=
MyGUI::newDelegate(
guiToggleMusic);
2012. 11. 8.
Result
2012. 11. 8.
The End
2012. 11. 8.