#include "settings.h"
#include "guiMainMenu.h"
#include "sound.h"
-#include "sound_openal.h"
-#include "clouds.h"
+#include "client/sound_openal.h"
+#include "client/clouds.h"
#include "httpfetch.h"
#include "log.h"
-#include "fontengine.h"
-#include "guiscalingfilter.h"
+#include "client/fontengine.h"
+#include "client/guiscalingfilter.h"
#include "irrlicht_changes/static_text.h"
-#ifdef __ANDROID__
+#if ENABLE_GLES
#include "client/tile.h"
-#include <GLES/gl.h>
#endif
/******************************************************************************/
video::ITexture *MenuTextureSource::getTexture(const std::string &name, u32 *id)
{
- if(id)
+ if (id)
*id = 0;
- if(name.empty())
+
+ if (name.empty())
return NULL;
- m_to_delete.insert(name);
-#ifdef __ANDROID__
- video::IImage *image = m_driver->createImageFromFile(name.c_str());
- if (image) {
- image = Align2Npot2(image, m_driver);
- video::ITexture* retval = m_driver->addTexture(name.c_str(), image);
- image->drop();
+#if ENABLE_GLES
+ video::ITexture *retval = m_driver->findTexture(name.c_str());
+ if (retval)
return retval;
- }
-#endif
+
+ video::IImage *image = m_driver->createImageFromFile(name.c_str());
+ if (!image)
+ return NULL;
+
+ image = Align2Npot2(image, m_driver);
+ retval = m_driver->addTexture(name.c_str(), image);
+ m_to_delete.insert(name);
+ image->drop();
+ return retval;
+#else
return m_driver->getTexture(name.c_str());
+#endif
}
/******************************************************************************/
/******************************************************************************/
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(RenderingEngine::get_scene_manager()),
+ m_smgr(rendering_engine->get_scene_manager()),
m_data(data),
m_kill(kill)
{
m_buttonhandler = new TextDestGuiEngine(this);
//create texture source
- m_texture_source = new MenuTextureSource(RenderingEngine::get_video_driver());
+ m_texture_source = new MenuTextureSource(rendering_engine->get_video_driver());
//create soundmanager
MenuMusicFetcher soundfetcher;
#if USE_SOUND
- m_sound_manager = createOpenALSoundManager(&soundfetcher);
+ if (g_settings->getBool("enable_sound") && g_sound_manager_singleton.get())
+ m_sound_manager = createOpenALSoundManager(g_sound_manager_singleton.get(), &soundfetcher);
#endif
- if(!m_sound_manager)
+ if (!m_sound_manager)
m_sound_manager = &dummySoundManager;
//create topleft header
g_fontengine->getTextHeight());
rect += v2s32(4, 0);
- m_irr_toplefttext =
- addStaticText(RenderingEngine::get_gui_env(), m_toplefttext,
- rect, false, true, 0, -1);
+ m_irr_toplefttext = gui::StaticText::add(rendering_engine->get_gui_env(),
+ m_toplefttext, rect, false, true, 0, -1);
//create formspecsource
m_formspecgui = new FormspecFormSource("");
-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);
{
// 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();
irr::core::dimension2d<u32> previous_screen_size(g_settings->getU16("screen_w"),
g_settings->getU16("screen_h"));
- while (RenderingEngine::run() && (!m_startgame) && (!m_kill)) {
+ static const video::SColor sky_color(255, 140, 186, 250);
+
+ // Reset fog color
+ {
+ video::SColor fog_color;
+ video::E_FOG_TYPE fog_type = video::EFT_FOG_LINEAR;
+ f32 fog_start = 0;
+ f32 fog_end = 0;
+ f32 fog_density = 0;
+ bool fog_pixelfog = false;
+ bool fog_rangefog = false;
+ driver->getFog(fog_color, fog_type, fog_start, fog_end, fog_density,
+ fog_pixelfog, fog_rangefog);
+
+ driver->setFog(sky_color, fog_type, fog_start, fog_end, fog_density,
+ fog_pixelfog, fog_rangefog);
+ }
+
+ 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
text_height = g_fontengine->getTextHeight();
}
- driver->beginScene(true, true, video::SColor(255,140,186,250));
+ driver->beginScene(true, true, sky_color);
if (m_clouds_enabled)
{
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();
//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,200,200,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->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)
m_cloud.dtime = (time - m_cloud.lasttime) / 1000.0;
}
/******************************************************************************/
-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();
+ 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::setFormspecPrepend(const std::string &fs)
+{
+ if (m_menu) {
+ m_menu->setFormspecPrepend(fs);
}
}
+
/******************************************************************************/
void GUIEngine::drawBackground(video::IVideoDriver *driver)
{
splashrect += v2s32((screensize.Width/2)-(splashsize.X/2),
((free_space/2)-splashsize.Y/2)+10);
- video::SColor bgcolor(255,50,50,50);
-
draw2DImageFilterScaled(driver, texture, splashrect,
core::rect<s32>(core::position2d<s32>(0,0),
core::dimension2di(texture->getOriginalSize())),
}
/******************************************************************************/
-bool GUIEngine::setTexture(texture_layer layer, std::string texturepath,
+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);
{
#if USE_CURL
std::ofstream target_file(target.c_str(), std::ios::out | std::ios::binary);
-
if (!target_file.good()) {
return false;
}
httpfetch_sync(fetch_request, fetch_result);
if (!fetch_result.succeeded) {
+ target_file.close();
+ fs::DeleteSingleFileOrEmptyDirectory(target);
return false;
}
target_file << fetch_result.data;
rect += v2s32(4, 0);
m_irr_toplefttext->remove();
- m_irr_toplefttext =
- addStaticText(RenderingEngine::get_gui_env(), m_toplefttext,
- rect, false, true, 0, -1);
+ m_irr_toplefttext = gui::StaticText::add(m_rendering_engine->get_gui_env(),
+ m_toplefttext, rect, false, true, 0, -1);
}
/******************************************************************************/
-s32 GUIEngine::playSound(SimpleSoundSpec spec, bool looped)
+s32 GUIEngine::playSound(const SimpleSoundSpec &spec, bool looped)
{
s32 handle = m_sound_manager->playSound(spec, looped);
return handle;
{
return m_script->queueAsync(serialized_func, serialized_params);
}
-