X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2FguiEngine.h;h=7f35949d1891e54a207acb383f23ec6385892807;hb=8852333eb3042580592ade478e5def20f8ed5d4c;hp=3987b52c73dc50df9e6446e86b6f54f3153ccdb6;hpb=4e1f50035e860a00636ca5d804c267119df99601;p=oweals%2Fminetest.git diff --git a/src/guiEngine.h b/src/guiEngine.h index 3987b52c7..7f35949d1 100644 --- a/src/guiEngine.h +++ b/src/guiEngine.h @@ -25,17 +25,13 @@ with this program; if not, write to the Free Software Foundation, Inc., /******************************************************************************/ #include "irrlichttypes.h" #include "modalMenu.h" -#include "clouds.h" #include "guiFormSpecMenu.h" #include "sound.h" +#include "tile.h" /******************************************************************************/ /* Typedefs and macros */ /******************************************************************************/ -#define MAX_MENUBAR_BTN_COUNT 10 -#define MAX_MENUBAR_BTN_ID 256 -#define MIN_MENUBAR_BTN_ID (MAX_MENUBAR_BTN_ID - MAX_MENUBAR_BTN_COUNT) - /** texture layer ids */ typedef enum { TEX_LAYER_BACKGROUND = 0, @@ -45,13 +41,19 @@ typedef enum { TEX_LAYER_MAX } texture_layer; +typedef struct { + video::ITexture* texture; + bool tile; + unsigned int minsize; +} image_definition; + /******************************************************************************/ /* forward declarations */ /******************************************************************************/ class GUIEngine; class MainMenuScripting; +class Clouds; struct MainMenuData; -struct SimpleSoundSpec; /******************************************************************************/ /* declarations */ @@ -66,6 +68,7 @@ public: * @param engine the engine data is transmitted for further processing */ TextDestGuiEngine(GUIEngine* engine); + /** * receive fields transmitted by guiFormSpecMenu * @param fields map containing formspec field elements currently active @@ -77,18 +80,58 @@ public: * @param text textual representation of event */ void gotText(std::wstring text); + private: /** target to transmit data to */ GUIEngine* m_engine; }; +/** GUIEngine specific implementation of ISimpleTextureSource */ +class MenuTextureSource : public ISimpleTextureSource +{ +public: + /** + * default constructor + * @param driver the video driver to load textures from + */ + MenuTextureSource(video::IVideoDriver *driver); + + /** + * destructor, removes all loaded textures + */ + virtual ~MenuTextureSource(); + + /** + * get a texture, loading it if required + * @param name path to the texture + * @param id receives the texture ID, always 0 in this implementation + */ + video::ITexture* getTexture(const std::string &name, u32 *id = NULL); + +private: + /** driver to get textures from */ + video::IVideoDriver *m_driver; + /** set of texture names to delete */ + std::set m_to_delete; +}; + +/** GUIEngine specific implementation of OnDemandSoundFetcher */ class MenuMusicFetcher: public OnDemandSoundFetcher { - std::set m_fetched; public: + /** + * get sound file paths according to sound name + * @param name sound name + * @param dst_paths receives possible paths to sound files + * @param dst_datas receives binary sound data (not used here) + */ void fetchSounds(const std::string &name, std::set &dst_paths, std::set &dst_datas); + +private: + /** set of fetched sound names */ + std::set m_fetched; }; /** implementation of main menu based uppon formspecs */ @@ -106,10 +149,11 @@ public: * @param data struct to transfer data to main game handling */ GUIEngine( irr::IrrlichtDevice* dev, - gui::IGUIElement* parent, - IMenuManager *menumgr, - scene::ISceneManager* smgr, - MainMenuData* data); + gui::IGUIElement* parent, + IMenuManager *menumgr, + scene::ISceneManager* smgr, + MainMenuData* data, + bool& kill); /** default destructor */ virtual ~GUIEngine(); @@ -117,17 +161,22 @@ public: /** * return MainMenuScripting interface */ - MainMenuScripting* getScriptIface() { + MainMenuScripting* getScriptIface() + { return m_script; } /** * return dir of current menuscript */ - std::string getScriptDir() { + std::string getScriptDir() + { return m_scriptdir; } + /** pass async callback to scriptengine **/ + unsigned int queueAsync(std::string serialized_fct,std::string serialized_params); + private: /** find and run the main menu script */ @@ -140,33 +189,38 @@ private: void limitFrameRate(); /** device to draw at */ - irr::IrrlichtDevice* m_device; + irr::IrrlichtDevice* m_device; /** parent gui element */ - gui::IGUIElement* m_parent; + gui::IGUIElement* m_parent; /** manager to add menus to */ - IMenuManager* m_menumanager; + IMenuManager* m_menumanager; /** scene manager to add scene elements to */ - scene::ISceneManager* m_smgr; + scene::ISceneManager* m_smgr; /** pointer to data beeing transfered back to main game handling */ - MainMenuData* m_data; + MainMenuData* m_data; + /** pointer to texture source */ + ISimpleTextureSource* m_texture_source; /** pointer to soundmanager*/ - ISoundManager* m_sound_manager; + ISoundManager* m_sound_manager; /** representation of form source to be used in mainmenu formspec */ - FormspecFormSource* m_formspecgui; + FormspecFormSource* m_formspecgui; /** formspec input receiver */ - TextDestGuiEngine* m_buttonhandler; + TextDestGuiEngine* m_buttonhandler; /** the formspec menu */ - GUIFormSpecMenu* m_menu; + GUIFormSpecMenu* m_menu; + + /** reference to kill variable managed by SIGINT handler */ + bool& m_kill; /** variable used to abort menu and return back to main game handling */ - bool m_startgame; + bool m_startgame; /** scripting interface */ - MainMenuScripting* m_script; + MainMenuScripting* m_script; /** script basefolder */ - std::string m_scriptdir; + std::string m_scriptdir; /** * draw background layer @@ -194,17 +248,18 @@ private: * @param layer draw layer to specify texture * @param texturepath full path of texture to load */ - bool setTexture(texture_layer layer,std::string texturepath); + bool setTexture(texture_layer layer, std::string texturepath, + bool tile_image, unsigned int minsize); /** * download a file using curl * @param url url to download * @param target file to store to */ - bool downloadFile(std::string url,std::string target); + static bool downloadFile(std::string url,std::string target); /** array containing pointers to current specified texture layers */ - video::ITexture* m_textures[TEX_LAYER_MAX]; + image_definition m_textures[TEX_LAYER_MAX]; /** draw version string in topleft corner */ void drawVersion(); @@ -228,19 +283,19 @@ private: /** internam data required for drawing clouds */ struct clouddata { /** delta time since last cloud processing */ - f32 dtime; + f32 dtime; /** absolute time of last cloud processing */ - u32 lasttime; + u32 lasttime; /** pointer to cloud class */ - Clouds* clouds; + Clouds* clouds; /** camera required for drawing clouds */ scene::ICameraSceneNode* camera; }; /** is drawing of clouds enabled atm */ - bool m_clouds_enabled; + bool m_clouds_enabled; /** data used to draw clouds */ - clouddata m_cloud; + clouddata m_cloud; /** start playing a sound and return handle */ s32 playSound(SimpleSoundSpec spec, bool looped);