X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2FguiEngine.h;h=d527f722243dc735832a682bf1f3e0f71fc31950;hb=c26eb87aec7438d167fa2f460a3f412db09c0ac5;hp=2f96b0b1c4669f51ed2e4f6cd5a363909ced1095;hpb=4fb4efd8ed54a81ea545e51265f2acdd01654f21;p=oweals%2Fminetest.git diff --git a/src/guiEngine.h b/src/guiEngine.h index 2f96b0b1c..d527f7222 100644 --- a/src/guiEngine.h +++ b/src/guiEngine.h @@ -25,18 +25,13 @@ with this program; if not, write to the Free Software Foundation, Inc., /******************************************************************************/ #include "irrlichttypes.h" #include "modalMenu.h" -#include "clouds.h" -#include "guiLuaApi.h" #include "guiFormSpecMenu.h" #include "sound.h" +#include "client/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, @@ -46,12 +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,55 +68,78 @@ 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 */ - void gotText(std::map fields); + void gotText(const StringMap &fields); /** * receive text/events transmitted by guiFormSpecMenu * @param text textual representation of event */ void gotText(std::wstring text); + private: /** target to transmit data to */ GUIEngine* m_engine; }; -class MenuMusicFetcher: public OnDemandSoundFetcher +/** GUIEngine specific implementation of ISimpleTextureSource */ +class MenuTextureSource : public ISimpleTextureSource { - std::set m_fetched; 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 +{ +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) - { - 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"); - 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"); - } + std::set &dst_datas); + +private: + /** set of fetched sound names */ + std::set m_fetched; }; /** implementation of main menu based uppon formspecs */ class GUIEngine { -public: - /** TextDestGuiEngine needs to transfer data to engine */ - friend class TextDestGuiEngine; - /** guiLuaApi is used to initialize contained stack */ - friend class guiLuaApi; + /** grant ModApiMainMenu access to private members */ + friend class ModApiMainMenu; +public: /** * default constructor * @param dev device to draw at @@ -124,91 +149,81 @@ 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(); - s32 playSound(SimpleSoundSpec spec, bool looped); - void stopSound(s32 handle); - -protected: - /** - * process field data recieved from formspec - * @param fields data in field format - */ - void handleButtons(std::map fields); /** - * process events received from formspec - * @param text events in textual form + * return MainMenuScripting interface */ - void handleEvent(std::string text); + 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: - /* run main menu loop */ + /** find and run the main menu script */ + bool loadMainMenuScript(); + + /** run main menu loop */ void run(); /** handler to limit frame rate within main menu */ void limitFrameRate(); + /** update size of topleftext element */ + void updateTopLeftTextSize(); + /** 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; - /** variable used to abort menu and return back to main game handling */ - bool m_startgame; + /** reference to kill variable managed by SIGINT handler */ + bool& m_kill; - /** - * initialize lua stack - * @param L stack to initialize - */ - void initalize_api(lua_State * L); - - /** - * run a lua script - * @param script full path to script to run - */ - bool runScript(std::string script); - - /** - * script error handler to process errors within lua - */ - void scriptError(const char *fmt, ...); + /** variable used to abort menu and return back to main game handling */ + bool m_startgame; - /** lua stack */ - lua_State* m_engineluastack; - /** lua internal stack number of error handler*/ - int m_luaerrorhandler; + /** scripting interface */ + MainMenuScripting* m_script; /** script basefolder */ - std::string m_scriptdir; + std::string m_scriptdir; /** * draw background layer @@ -236,17 +251,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(); @@ -270,19 +286,25 @@ 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); + /** stop playing a sound started with playSound() */ + void stopSound(s32 handle); + };