Skip to content
Snippets Groups Projects
Commit be2c7dfb authored by Perttu Ahola's avatar Perttu Ahola
Browse files

pausemenu stuff

parent 451f46f6
No related branches found
No related tags found
No related merge requests found
File suppressed by a .gitattributes entry or the file's encoding is unsupported.
/*
Minetest-c55
Copyright (C) 2010 celeron55, Perttu Ahola <celeron55@gmail.com>
Original author Kabak Dmitry <userdima@gmail.com>, contributed under
the minetest contributor agreement.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#include "guiPauseMenu.h"
void guiPauseMenu::scaleGui() // this function scales gui from the size stored in file to screen size
{
core::dimension2du screen=dev->getVideoDriver()->getScreenSize();
core::vector2di real=root->getAbsolutePosition().LowerRightCorner; // determine gui size stored in file (which is size of my menu root node)
float factorX=(float)screen.Width/(float)real.X;
float factorY=(float)screen.Height/(float)real.Y;
scaleGui(guienv->getRootGUIElement(),factorX,factorY);
}
void guiPauseMenu::scaleGui(gui::IGUIElement *node,float factorX,float factorY) // recursive set scale
{
if((node->getParent() && node->getParent()->getID()==255) || node->getID()==255) // modify only menu's elements
{
int lx,rx,ly,ry;
lx=(float)node->getRelativePosition().UpperLeftCorner.X*factorX;
ly=(float)node->getRelativePosition().UpperLeftCorner.Y*factorY;
rx=(float)node->getRelativePosition().LowerRightCorner.X*factorX;
ry=(float)node->getRelativePosition().LowerRightCorner.Y*factorY;
node->setRelativePosition(core::recti(lx,ly,rx,ry));
}
core::list<gui::IGUIElement*>::ConstIterator it = node->getChildren().begin();
for(; it != node->getChildren().end(); ++it)
scaleGui((*it),factorX,factorY);
}
bool guiPauseMenu::loadMenu()
{
guienv->loadGUI("../data/pauseMenu.gui");
root=(gui::IGUIStaticText*)guienv->getRootGUIElement()->getElementFromId(255,true);
if(!root) // if there is no my root node then menu file not found or corrupted
return false;
scaleGui(); // scale gui to our screen size
root->setVisible(false); // hide our menu
// make it transparent
//root->setBackgroundColor(video::SColor(100,128,100,128));
root->setBackgroundColor(video::SColor(140,0,0,0));
return true;
}
guiPauseMenu::guiPauseMenu(IrrlichtDevice *device, IEventReceiver *recv) : dev(device), oldRecv(recv)
{
if(!dev)
return;
guienv=dev->getGUIEnvironment();
if (!loadMenu())
return;
device->setEventReceiver(this); // now WE are the input receiver! ahhaha!
}
bool guiPauseMenu::OnEvent(const SEvent& event)
{
if(!dev->isWindowFocused())
setVisible(true);
bool ret=false;
if(oldRecv && !isVisible()) // call master if we have it and if we are inactive
ret=oldRecv->OnEvent(event);
if(ret==true)
return true; // if the master receiver does the work
if(event.EventType==EET_KEY_INPUT_EVENT)
{
if(event.KeyInput.Key==KEY_ESCAPE && event.KeyInput.PressedDown)
{
setVisible(!isVisible());
}
}
if(event.EventType==EET_GUI_EVENT)
{
if(event.GUIEvent.EventType==gui::EGET_BUTTON_CLICKED)
{
switch(event.GUIEvent.Caller->getID())
{
case 256: // continue
setVisible(false);
break;
case 257: // exit
dev->closeDevice();
break;
}
}
}
return false;
}
guiPauseMenu::~guiPauseMenu(void)
{
}
/*
Minetest-c55
Copyright (C) 2010 celeron55, Perttu Ahola <celeron55@gmail.com>
Original author Kabak Dmitry <userdima@gmail.com>, contributed under
the minetest contributor agreement.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#ifndef GUIPAUSEMENU_HEADER
#define GUIPAUSEMENU_HEADER
#include <irrlicht.h>
using namespace irr;
class guiPauseMenu : public IEventReceiver
{
private:
IrrlichtDevice *dev;
gui::IGUIEnvironment *guienv;
IEventReceiver *oldRecv;
gui::IGUIStaticText *root;
bool loadMenu();
void scaleGui();
void scaleGui(gui::IGUIElement *node,float factorX,float factorY);
public:
guiPauseMenu(IrrlichtDevice *device,IEventReceiver *recv);
void setVisible(bool visible){root->setVisible(visible);};
bool isVisible(){return root->isVisible();};
bool OnEvent(const SEvent& event);
~guiPauseMenu(void);
};
#endif
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment