Mercurial > fife-parpg
diff ext/guichan-0.8.1/examples/hge.hpp @ 0:4a0efb7baf70
* Datasets becomes the new trunk and retires after that :-)
author | mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222 |
---|---|
date | Sun, 29 Jun 2008 18:44:17 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ext/guichan-0.8.1/examples/hge.hpp Sun Jun 29 18:44:17 2008 +0000 @@ -0,0 +1,112 @@ +/* + * Code that sets up an HGE application with Guichan using the + * Guichan HGE back end. + */ + +#include <guichan.hpp> +#include <guichan/hge.hpp> +#include <string> + +namespace hge +{ + HGE *hge = NULL; + bool running = false; + + // All back ends contain objects to make Guichan work on a + // specific target - in this case HGE - and they are a Graphics + // object to make Guichan able to draw itself using HGE, an + // input objec to make Guichan able to get user input using HGE + // and an ImageLoader object to make Guichan able to load images + // using SDL. + gcn::HGEGraphics* graphics; + gcn::HGEInput* input; + gcn::HGEImageLoader* imageLoader; + + /** + * The frame function for the HGE application. + */ + bool frameFunc() + { + if (hge->Input_GetKeyState(HGEK_ESCAPE) || running) + { + return true; + } + + // Now we let the Gui object perform its logic. + globals::gui->logic(); + // Next we begin a scene. + hge->Gfx_BeginScene(); + hge->Gfx_Clear(0); + // Now we let the Gui object draw itself. + globals::gui->draw(); + // Finally we end the scene causing the screen to be updated. + hge->Gfx_EndScene(); + + return false; + } + + /** + * Initialises the HGE application. This function creates the global + * Gui object that can be populated by various examples. + */ + void init() + { + // We simply initialise HGE as we would do with any HGE application. + hge = hgeCreate(HGE_VERSION); + + hge->System_SetState(HGE_FRAMEFUNC, frameFunc); + hge->System_SetState(HGE_SCREENWIDTH, 640); + hge->System_SetState(HGE_SCREENHEIGHT, 480); + hge->System_SetState(HGE_WINDOWED, true); + hge->System_SetState(HGE_HIDEMOUSE, false); + hge->System_SetState(HGE_USESOUND, false); + hge->System_SetState(HGE_SHOWSPLASH, false); + hge->System_SetState(HGE_LOGFILE, "hgelog.txt"); + + if (!hge->System_Initiate()) + { + throw GCN_EXCEPTION("Unable to initialse HGE: " + std::string(hge->System_GetErrorMessage())); + } + + // Now it's time to initialise the Guichan HGE back end. + + imageLoader = new gcn::HGEImageLoader(); + // The ImageLoader Guichan should use needs to be passed to the Image object + // using a static function. + gcn::Image::setImageLoader(imageLoader); + graphics = new gcn::HGEGraphics(); + input = new gcn::HGEInput(); + + // Now we create the Gui object to be used with this HGE application. + globals::gui = new gcn::Gui(); + // The Gui object needs a Graphics to be able to draw itself and an Input + // object to be able to check for user input. In this case we provide the + // Gui object with HGE implementations of these objects hence making Guichan + // able to utilise HGE. + globals::gui->setGraphics(graphics); + globals::gui->setInput(input); + } + + /** + * Halts the HGE application. + */ + void halt() + { + delete globals::gui; + + delete imageLoader; + delete input; + delete graphics; + + hge->System_Shutdown(); + hge->Release(); + } + + /** + * Runs the HGE application. + */ + void run() + { + hge->System_Start(); + } +}