X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;ds=sidebyside;f=src%2FguiEngine.h;h=897244808fdae6baeaf5d2a810c54c34e9a6499f;hb=d1df09841d0eac7a88f638676b80ec848522cca5;hp=6b7d3b6ed11ef24eaac418cbdc06c3985d8cbb75;hpb=ade70fe4b92202065c17d04f21415848b2c6d419;p=dragonfireclient.git diff --git a/src/guiEngine.h b/src/guiEngine.h index 6b7d3b6ed..897244808 100644 --- a/src/guiEngine.h +++ b/src/guiEngine.h @@ -25,17 +25,14 @@ 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 "client/tile.h" +#include "util/enriched_string.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 +42,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,29 +69,70 @@ class TextDestGuiEngine : public TextDest * @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; }; +/** 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 */ @@ -105,12 +149,13 @@ class GUIEngine { * @param smgr scene manager to add scene elements to * @param data struct to transfer data to main game handling */ - GUIEngine( irr::IrrlichtDevice* dev, - gui::IGUIElement* parent, - IMenuManager *menumgr, - scene::ISceneManager* smgr, - MainMenuData* data, - bool& kill); + GUIEngine(irr::IrrlichtDevice* dev, + JoystickController *joystick, + gui::IGUIElement* parent, + IMenuManager *menumgr, + scene::ISceneManager* smgr, + MainMenuData* data, + bool& kill); /** default destructor */ virtual ~GUIEngine(); @@ -118,17 +163,22 @@ class GUIEngine { /** * 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,37 +190,42 @@ class GUIEngine { /** 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; /** reference to kill variable managed by SIGINT handler */ - bool& m_kill; + 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 @@ -198,29 +253,32 @@ class GUIEngine { * @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(); /** - * specify text to be appended to version string + * specify text to appear as top left string * @param text to set */ - void setTopleftText(std::string append); + void setTopleftText(const std::string &text); /** pointer to gui element shown at topleft corner */ irr::gui::IGUIStaticText* m_irr_toplefttext; + /** and text that is in it */ + EnrichedString m_toplefttext; /** initialize cloud subsystem */ void cloudInit(); @@ -232,19 +290,19 @@ class GUIEngine { /** 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);