1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
|
/*
* Code that sets up an OpenLayer application with Guichan using the
* Guichan OpenLayer back end.
*/
#include <guichan.hpp>
#include <guichan/openlayer.hpp>
namespace openlayer
{
// All back ends contain objects to make Guichan work on a
// specific target - in this case OpenLayer - and they are a Graphics
// object to make Guichan able to draw itself using OpenLayer, an
// input objec to make Guichan able to get user input using OpenLayer
// and an ImageLoader object to make Guichan able to load images
// using OpenLayer.
gcn::OpenLayerGraphics* graphics;
gcn::OpenLayerInput* input;
gcn::OpenLayerImageLoader* imageLoader;
/**
* Initialises the OpenLayer application. This function creates the global
* Gui object that can be populated by various examples.
*/
void init()
{
// We simply initialise OpenLayer as we would do with any OpenLayer application.
ol::Setup::SetupProgram(true, true, true);
ol::Setup::SetupScreen(640, 480, WINDOWED);
// Now it's time to initialise the Guichan OpenLayer back end.
imageLoader = new gcn::OpenLayerImageLoader();
// The ImageLoader Guichan should use needs to be passed to the Image object
// using a static function.
gcn::Image::setImageLoader(imageLoader);
graphics = new gcn::OpenLayerGraphics();
// We need to tell the OpenLayer Graphics object how big the screen is.
graphics->setTargetPlane(640, 480);
input = new gcn::OpenLayerInput();
// Now we create the Gui object to be used with this OpenLayer 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 OpenLayer implementations of these objects hence making Guichan
// able to utilise OpenLayer.
globals::gui->setGraphics(graphics);
globals::gui->setInput(input);
}
/**
* Halts the OpenLayer application.
*/
void halt()
{
delete globals::gui;
delete imageLoader;
delete input;
delete graphics;
}
/**
* Runs the OpenLayer application.
*/
void run()
{
ol::Bitmap mouse_bmp;
mouse_bmp.Load(mouse_sprite, ol::CONVERT_MAGIC_PINK);
if (!mouse_bmp )
{
ol::OlError("Pointer not loaded.");
}
while(!key[KEY_ESC])
{
// Now we let the Gui object perform its logic.
globals::gui->logic();
// Now we let the Gui object draw itself.
globals::gui->draw();
// We draw the mouse pointer manually.
mouse_bmp.Blit(mouse_x, mouse_y);
// Finally we update the screen.
ol::GfxRend::RefreshScreen();
}
}
}
|