#include "client/tile.h"
#endif
+
/******************************************************************************/
void TextDestGuiEngine::gotText(const StringMap &fields)
{
if (name.empty())
return NULL;
- m_to_delete.insert(name);
-
#if ENABLE_GLES
video::ITexture *retval = m_driver->findTexture(name.c_str());
if (retval)
image = Align2Npot2(image, m_driver);
retval = m_driver->addTexture(name.c_str(), image);
+ m_to_delete.insert(name);
image->drop();
return retval;
#else
/** MenuMusicFetcher */
/******************************************************************************/
void MenuMusicFetcher::fetchSounds(const std::string &name,
- std::set<std::string> &dst_paths, std::set<std::string> &dst_datas)
+ std::set<std::string> &dst_paths,
+ std::set<std::string> &dst_datas)
{
- if (m_fetched.count(name))
+ if(m_fetched.count(name))
return;
m_fetched.insert(name);
std::string base;
base = porting::path_share + DIR_DELIM + "sounds";
dst_paths.insert(base + DIR_DELIM + name + ".ogg");
int i;
- for (i = 0; i < 10; i++)
- dst_paths.insert(base + DIR_DELIM + name + "." + itos(i) + ".ogg");
+ for(i=0; i<10; i++)
+ dst_paths.insert(base + DIR_DELIM + name + "."+itos(i)+".ogg");
base = porting::path_user + DIR_DELIM + "sounds";
dst_paths.insert(base + DIR_DELIM + name + ".ogg");
- for (i = 0; i < 10; i++)
- dst_paths.insert(base + DIR_DELIM + name + "." + itos(i) + ".ogg");
+ for(i=0; i<10; i++)
+ dst_paths.insert(base + DIR_DELIM + name + "."+itos(i)+".ogg");
}
/******************************************************************************/
/** GUIEngine */
/******************************************************************************/
-GUIEngine::GUIEngine(JoystickController *joystick, gui::IGUIElement *parent,
- IMenuManager *menumgr, MainMenuData *data, bool &kill) :
- m_parent(parent),
- m_menumanager(menumgr), m_smgr(RenderingEngine::get_scene_manager()),
- m_data(data), m_kill(kill)
+GUIEngine::GUIEngine(JoystickController *joystick,
+ gui::IGUIElement *parent,
+ RenderingEngine *rendering_engine,
+ IMenuManager *menumgr,
+ MainMenuData *data,
+ bool &kill) :
+ m_rendering_engine(rendering_engine),
+ m_parent(parent),
+ m_menumanager(menumgr),
+ m_smgr(rendering_engine->get_scene_manager()),
+ m_data(data),
+ m_kill(kill)
{
- // initialize texture pointers
+ //initialize texture pointers
for (image_definition &texture : m_textures) {
texture.texture = NULL;
}
// is deleted by guiformspec!
m_buttonhandler = new TextDestGuiEngine(this);
- // create texture source
- m_texture_source = new MenuTextureSource(RenderingEngine::get_video_driver());
+ //create texture source
+ m_texture_source = new MenuTextureSource(rendering_engine->get_video_driver());
- // create soundmanager
+ //create soundmanager
MenuMusicFetcher soundfetcher;
#if USE_SOUND
if (g_settings->getBool("enable_sound") && g_sound_manager_singleton.get())
- m_sound_manager = createOpenALSoundManager(
- g_sound_manager_singleton.get(), &soundfetcher);
+ m_sound_manager = createOpenALSoundManager(g_sound_manager_singleton.get(), &soundfetcher);
#endif
if (!m_sound_manager)
m_sound_manager = &dummySoundManager;
- // create topleft header
+ //create topleft header
m_toplefttext = L"";
core::rect<s32> rect(0, 0, g_fontengine->getTextWidth(m_toplefttext.c_str()),
- g_fontengine->getTextHeight());
+ g_fontengine->getTextHeight());
rect += v2s32(4, 0);
- m_irr_toplefttext = gui::StaticText::add(RenderingEngine::get_gui_env(),
+ m_irr_toplefttext = gui::StaticText::add(rendering_engine->get_gui_env(),
m_toplefttext, rect, false, true, 0, -1);
- // create formspecsource
+ //create formspecsource
m_formspecgui = new FormspecFormSource("");
/* Create menu */
- m_menu = new GUIFormSpecMenu(joystick, m_parent, -1, m_menumanager,
- NULL /* &client */, m_texture_source, m_formspecgui,
- m_buttonhandler, "", false);
+ m_menu = new GUIFormSpecMenu(joystick,
+ m_parent,
+ -1,
+ m_menumanager,
+ NULL /* &client */,
+ m_rendering_engine->get_gui_env(),
+ m_texture_source,
+ m_sound_manager,
+ m_formspecgui,
+ m_buttonhandler,
+ "",
+ false);
m_menu->allowClose(false);
- m_menu->lockSize(true, v2u32(800, 600));
+ m_menu->lockSize(true,v2u32(800,600));
// Initialize scripting
// Set main menu path (for core.get_mainmenu_path())
m_scriptdir = g_settings->get("main_menu_path");
if (m_scriptdir.empty()) {
- m_scriptdir = porting::path_share + DIR_DELIM + "builtin" + DIR_DELIM +
- "mainmenu";
+ m_scriptdir = porting::path_share + DIR_DELIM + "builtin" + DIR_DELIM + "mainmenu";
}
// Load builtin (which will load the main menu script)
- std::string script =
- porting::path_share + DIR_DELIM "builtin" + DIR_DELIM "init.lua";
+ std::string script = porting::path_share + DIR_DELIM "builtin" + DIR_DELIM "init.lua";
try {
m_script->loadScript(script);
// Menu script loaded
return true;
} catch (const ModError &e) {
- errorstream << "GUIEngine: execution of menu script failed: " << e.what()
- << std::endl;
+ errorstream << "GUIEngine: execution of menu script failed: "
+ << e.what() << std::endl;
}
return false;
{
// Always create clouds because they may or may not be
// needed based on the game selected
- video::IVideoDriver *driver = RenderingEngine::get_video_driver();
+ video::IVideoDriver *driver = m_rendering_engine->get_video_driver();
cloudInit();
unsigned int text_height = g_fontengine->getTextHeight();
- irr::core::dimension2d<u32> previous_screen_size(
- g_settings->getU16("screen_w"), g_settings->getU16("screen_h"));
+ irr::core::dimension2d<u32> previous_screen_size(g_settings->getU16("screen_w"),
+ g_settings->getU16("screen_h"));
static const video::SColor sky_color(255, 140, 186, 250);
fog_pixelfog, fog_rangefog);
}
- while (RenderingEngine::run() && (!m_startgame) && (!m_kill)) {
+ while (m_rendering_engine->run() && (!m_startgame) && (!m_kill)) {
const irr::core::dimension2d<u32> ¤t_screen_size =
- RenderingEngine::get_video_driver()->getScreenSize();
+ m_rendering_engine->get_video_driver()->getScreenSize();
// Verify if window size has changed and save it if it's the case
// Ensure evaluating settings->getBool after verifying screensize
// First condition is cheaper
if (previous_screen_size != current_screen_size &&
- current_screen_size !=
- irr::core::dimension2d<u32>(0, 0) &&
+ current_screen_size != irr::core::dimension2d<u32>(0,0) &&
g_settings->getBool("autosave_screensize")) {
g_settings->setU16("screen_w", current_screen_size.Width);
g_settings->setU16("screen_h", current_screen_size.Height);
previous_screen_size = current_screen_size;
}
- // check if we need to update the "upper left corner"-text
+ //check if we need to update the "upper left corner"-text
if (text_height != g_fontengine->getTextHeight()) {
updateTopLeftTextSize();
text_height = g_fontengine->getTextHeight();
driver->beginScene(true, true, sky_color);
- if (m_clouds_enabled) {
+ if (m_clouds_enabled)
+ {
cloudPreProcess();
drawOverlay(driver);
- } else
+ }
+ else
drawBackground(driver);
drawHeader(driver);
drawFooter(driver);
- RenderingEngine::get_gui_env()->drawAll();
+ m_rendering_engine->get_gui_env()->drawAll();
driver->endScene();
+ IrrlichtDevice *device = m_rendering_engine->get_raw_device();
+ u32 frametime_min = 1000 / (device->isWindowFocused()
+ ? g_settings->getFloat("fps_max")
+ : g_settings->getFloat("fps_max_unfocused"));
if (m_clouds_enabled)
- cloudPostProcess();
+ cloudPostProcess(frametime_min, device);
else
- sleep_ms(25);
+ sleep_ms(frametime_min);
m_script->step();
/******************************************************************************/
GUIEngine::~GUIEngine()
{
- if (m_sound_manager != &dummySoundManager) {
+ if (m_sound_manager != &dummySoundManager){
delete m_sound_manager;
m_sound_manager = NULL;
}
- infostream << "GUIEngine: Deinitializing scripting" << std::endl;
+ infostream<<"GUIEngine: Deinitializing scripting"<<std::endl;
delete m_script;
m_irr_toplefttext->setText(L"");
- // clean up texture pointers
+ //clean up texture pointers
for (image_definition &texture : m_textures) {
if (texture.texture)
- RenderingEngine::get_video_driver()->removeTexture(
- texture.texture);
+ m_rendering_engine->get_video_driver()->removeTexture(texture.texture);
}
delete m_texture_source;
{
m_cloud.clouds = new Clouds(m_smgr, -1, rand());
m_cloud.clouds->setHeight(100.0f);
- m_cloud.clouds->update(v3f(0, 0, 0), video::SColor(255, 240, 240, 255));
+ m_cloud.clouds->update(v3f(0, 0, 0), video::SColor(255,240,240,255));
- m_cloud.camera = m_smgr->addCameraSceneNode(0, v3f(0, 0, 0), v3f(0, 60, 100));
+ m_cloud.camera = m_smgr->addCameraSceneNode(0,
+ v3f(0,0,0), v3f(0, 60, 100));
m_cloud.camera->setFarValue(10000);
- m_cloud.lasttime = RenderingEngine::get_timer_time();
+ m_cloud.lasttime = m_rendering_engine->get_timer_time();
}
/******************************************************************************/
void GUIEngine::cloudPreProcess()
{
- u32 time = RenderingEngine::get_timer_time();
+ u32 time = m_rendering_engine->get_timer_time();
- if (time > m_cloud.lasttime)
+ if(time > m_cloud.lasttime)
m_cloud.dtime = (time - m_cloud.lasttime) / 1000.0;
else
m_cloud.dtime = 0;
m_cloud.lasttime = time;
- m_cloud.clouds->step(m_cloud.dtime * 3);
+ m_cloud.clouds->step(m_cloud.dtime*3);
m_cloud.clouds->render();
m_smgr->drawAll();
}
/******************************************************************************/
-void GUIEngine::cloudPostProcess()
+void GUIEngine::cloudPostProcess(u32 frametime_min, IrrlichtDevice *device)
{
- float fps_max = g_settings->getFloat("pause_fps_max");
// Time of frame without fps limit
u32 busytime_u32;
// not using getRealTime is necessary for wine
- u32 time = RenderingEngine::get_timer_time();
- if (time > m_cloud.lasttime)
+ u32 time = m_rendering_engine->get_timer_time();
+ if(time > m_cloud.lasttime)
busytime_u32 = time - m_cloud.lasttime;
else
busytime_u32 = 0;
- // FPS limiter
- u32 frametime_min = 1000. / fps_max;
-
+ // FPS limit
if (busytime_u32 < frametime_min) {
u32 sleeptime = frametime_min - busytime_u32;
- RenderingEngine::get_raw_device()->sleep(sleeptime);
+ device->sleep(sleeptime);
}
}
}
}
+
/******************************************************************************/
void GUIEngine::drawBackground(video::IVideoDriver *driver)
{
v2u32 screensize = driver->getScreenSize();
- video::ITexture *texture = m_textures[TEX_LAYER_BACKGROUND].texture;
+ video::ITexture* texture = m_textures[TEX_LAYER_BACKGROUND].texture;
/* If no texture, draw background of solid color */
- if (!texture) {
- video::SColor color(255, 80, 58, 37);
+ if(!texture){
+ video::SColor color(255,80,58,37);
core::rect<s32> rect(0, 0, screensize.X, screensize.Y);
driver->draw2DRectangle(color, rect, NULL);
return;
v2u32 sourcesize = texture->getOriginalSize();
- if (m_textures[TEX_LAYER_BACKGROUND].tile) {
- v2u32 tilesize(MYMAX(sourcesize.X,
- m_textures[TEX_LAYER_BACKGROUND].minsize),
- MYMAX(sourcesize.Y, m_textures[TEX_LAYER_BACKGROUND]
- .minsize));
- for (unsigned int x = 0; x < screensize.X; x += tilesize.X) {
- for (unsigned int y = 0; y < screensize.Y; y += tilesize.Y) {
+ if (m_textures[TEX_LAYER_BACKGROUND].tile)
+ {
+ v2u32 tilesize(
+ MYMAX(sourcesize.X,m_textures[TEX_LAYER_BACKGROUND].minsize),
+ MYMAX(sourcesize.Y,m_textures[TEX_LAYER_BACKGROUND].minsize));
+ for (unsigned int x = 0; x < screensize.X; x += tilesize.X )
+ {
+ for (unsigned int y = 0; y < screensize.Y; y += tilesize.Y )
+ {
draw2DImageFilterScaled(driver, texture,
- core::rect<s32>(x, y, x + tilesize.X,
- y + tilesize.Y),
- core::rect<s32>(0, 0, sourcesize.X,
- sourcesize.Y),
- NULL, NULL, true);
+ core::rect<s32>(x, y, x+tilesize.X, y+tilesize.Y),
+ core::rect<s32>(0, 0, sourcesize.X, sourcesize.Y),
+ NULL, NULL, true);
}
}
return;
/* Draw background texture */
draw2DImageFilterScaled(driver, texture,
- core::rect<s32>(0, 0, screensize.X, screensize.Y),
- core::rect<s32>(0, 0, sourcesize.X, sourcesize.Y), NULL, NULL,
- true);
+ core::rect<s32>(0, 0, screensize.X, screensize.Y),
+ core::rect<s32>(0, 0, sourcesize.X, sourcesize.Y),
+ NULL, NULL, true);
}
/******************************************************************************/
{
v2u32 screensize = driver->getScreenSize();
- video::ITexture *texture = m_textures[TEX_LAYER_OVERLAY].texture;
+ video::ITexture* texture = m_textures[TEX_LAYER_OVERLAY].texture;
/* If no texture, draw nothing */
- if (!texture)
+ if(!texture)
return;
/* Draw background texture */
v2u32 sourcesize = texture->getOriginalSize();
draw2DImageFilterScaled(driver, texture,
- core::rect<s32>(0, 0, screensize.X, screensize.Y),
- core::rect<s32>(0, 0, sourcesize.X, sourcesize.Y), NULL, NULL,
- true);
+ core::rect<s32>(0, 0, screensize.X, screensize.Y),
+ core::rect<s32>(0, 0, sourcesize.X, sourcesize.Y),
+ NULL, NULL, true);
}
/******************************************************************************/
{
core::dimension2d<u32> screensize = driver->getScreenSize();
- video::ITexture *texture = m_textures[TEX_LAYER_HEADER].texture;
+ video::ITexture* texture = m_textures[TEX_LAYER_HEADER].texture;
/* If no texture, draw nothing */
- if (!texture)
+ if(!texture)
return;
f32 mult = (((f32)screensize.Width / 2.0)) /
- ((f32)texture->getOriginalSize().Width);
+ ((f32)texture->getOriginalSize().Width);
v2s32 splashsize(((f32)texture->getOriginalSize().Width) * mult,
((f32)texture->getOriginalSize().Height) * mult);
// Don't draw the header if there isn't enough room
- s32 free_space = (((s32)screensize.Height) - 320) / 2;
+ s32 free_space = (((s32)screensize.Height)-320)/2;
if (free_space > splashsize.Y) {
core::rect<s32> splashrect(0, 0, splashsize.X, splashsize.Y);
- splashrect += v2s32((screensize.Width / 2) - (splashsize.X / 2),
- ((free_space / 2) - splashsize.Y / 2) + 10);
-
- video::SColor bgcolor(255, 50, 50, 50);
+ splashrect += v2s32((screensize.Width/2)-(splashsize.X/2),
+ ((free_space/2)-splashsize.Y/2)+10);
- draw2DImageFilterScaled(driver, texture, splashrect,
- core::rect<s32>(core::position2d<s32>(0, 0),
- core::dimension2di(
- texture->getOriginalSize())),
- NULL, NULL, true);
+ draw2DImageFilterScaled(driver, texture, splashrect,
+ core::rect<s32>(core::position2d<s32>(0,0),
+ core::dimension2di(texture->getOriginalSize())),
+ NULL, NULL, true);
}
}
{
core::dimension2d<u32> screensize = driver->getScreenSize();
- video::ITexture *texture = m_textures[TEX_LAYER_FOOTER].texture;
+ video::ITexture* texture = m_textures[TEX_LAYER_FOOTER].texture;
/* If no texture, draw nothing */
- if (!texture)
+ if(!texture)
return;
- f32 mult = (((f32)screensize.Width)) / ((f32)texture->getOriginalSize().Width);
+ f32 mult = (((f32)screensize.Width)) /
+ ((f32)texture->getOriginalSize().Width);
v2s32 footersize(((f32)texture->getOriginalSize().Width) * mult,
((f32)texture->getOriginalSize().Height) * mult);
// Don't draw the footer if there isn't enough room
- s32 free_space = (((s32)screensize.Height) - 320) / 2;
+ s32 free_space = (((s32)screensize.Height)-320)/2;
if (free_space > footersize.Y) {
- core::rect<s32> rect(0, 0, footersize.X, footersize.Y);
- rect += v2s32(screensize.Width / 2, screensize.Height - footersize.Y);
- rect -= v2s32(footersize.X / 2, 0);
+ core::rect<s32> rect(0,0,footersize.X,footersize.Y);
+ rect += v2s32(screensize.Width/2,screensize.Height-footersize.Y);
+ rect -= v2s32(footersize.X/2, 0);
draw2DImageFilterScaled(driver, texture, rect,
- core::rect<s32>(core::position2d<s32>(0, 0),
- core::dimension2di(
- texture->getOriginalSize())),
- NULL, NULL, true);
+ core::rect<s32>(core::position2d<s32>(0,0),
+ core::dimension2di(texture->getOriginalSize())),
+ NULL, NULL, true);
}
}
bool GUIEngine::setTexture(texture_layer layer, const std::string &texturepath,
bool tile_image, unsigned int minsize)
{
- video::IVideoDriver *driver = RenderingEngine::get_video_driver();
+ video::IVideoDriver *driver = m_rendering_engine->get_video_driver();
if (m_textures[layer].texture) {
driver->removeTexture(m_textures[layer].texture);
}
m_textures[layer].texture = driver->getTexture(texturepath.c_str());
- m_textures[layer].tile = tile_image;
+ m_textures[layer].tile = tile_image;
m_textures[layer].minsize = minsize;
if (!m_textures[layer].texture) {
void GUIEngine::updateTopLeftTextSize()
{
core::rect<s32> rect(0, 0, g_fontengine->getTextWidth(m_toplefttext.c_str()),
- g_fontengine->getTextHeight());
+ g_fontengine->getTextHeight());
rect += v2s32(4, 0);
m_irr_toplefttext->remove();
- m_irr_toplefttext = gui::StaticText::add(RenderingEngine::get_gui_env(),
+ m_irr_toplefttext = gui::StaticText::add(m_rendering_engine->get_gui_env(),
m_toplefttext, rect, false, true, 0, -1);
}
}
/******************************************************************************/
-unsigned int GUIEngine::queueAsync(
- const std::string &serialized_func, const std::string &serialized_params)
+unsigned int GUIEngine::queueAsync(const std::string &serialized_func,
+ const std::string &serialized_params)
{
return m_script->queueAsync(serialized_func, serialized_params);
}