LCOV - code coverage report
Current view: top level - src - guiEngine.h (source / functions) Hit Total Coverage
Test: report Lines: 6 6 100.0 %
Date: 2015-07-11 18:23:49 Functions: 6 6 100.0 %

          Line data    Source code
       1             : /*
       2             : Minetest
       3             : Copyright (C) 2013 sapier
       4             : 
       5             : This program is free software; you can redistribute it and/or modify
       6             : it under the terms of the GNU Lesser General Public License as published by
       7             : the Free Software Foundation; either version 2.1 of the License, or
       8             : (at your option) any later version.
       9             : 
      10             : This program is distributed in the hope that it will be useful,
      11             : but WITHOUT ANY WARRANTY; without even the implied warranty of
      12             : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      13             : GNU Lesser General Public License for more details.
      14             : 
      15             : You should have received a copy of the GNU Lesser General Public License along
      16             : with this program; if not, write to the Free Software Foundation, Inc.,
      17             : 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
      18             : */
      19             : 
      20             : #ifndef GUI_ENGINE_H_
      21             : #define GUI_ENGINE_H_
      22             : 
      23             : /******************************************************************************/
      24             : /* Includes                                                                   */
      25             : /******************************************************************************/
      26             : #include "irrlichttypes.h"
      27             : #include "modalMenu.h"
      28             : #include "guiFormSpecMenu.h"
      29             : #include "sound.h"
      30             : #include "client/tile.h"
      31             : 
      32             : /******************************************************************************/
      33             : /* Typedefs and macros                                                        */
      34             : /******************************************************************************/
      35             : /** texture layer ids */
      36             : typedef enum {
      37             :         TEX_LAYER_BACKGROUND = 0,
      38             :         TEX_LAYER_OVERLAY,
      39             :         TEX_LAYER_HEADER,
      40             :         TEX_LAYER_FOOTER,
      41             :         TEX_LAYER_MAX
      42             : } texture_layer;
      43             : 
      44             : typedef struct {
      45             :         video::ITexture* texture;
      46             :         bool             tile;
      47             :         unsigned int     minsize;
      48             : } image_definition;
      49             : 
      50             : /******************************************************************************/
      51             : /* forward declarations                                                       */
      52             : /******************************************************************************/
      53             : class GUIEngine;
      54             : class MainMenuScripting;
      55             : class Clouds;
      56             : struct MainMenuData;
      57             : 
      58             : /******************************************************************************/
      59             : /* declarations                                                               */
      60             : /******************************************************************************/
      61             : 
      62             : /** GUIEngine specific implementation of TextDest used within guiFormSpecMenu */
      63           2 : class TextDestGuiEngine : public TextDest
      64             : {
      65             : public:
      66             :         /**
      67             :          * default constructor
      68             :          * @param engine the engine data is transmitted for further processing
      69             :          */
      70             :         TextDestGuiEngine(GUIEngine* engine);
      71             : 
      72             :         /**
      73             :          * receive fields transmitted by guiFormSpecMenu
      74             :          * @param fields map containing formspec field elements currently active
      75             :          */
      76             :         void gotText(const StringMap &fields);
      77             : 
      78             :         /**
      79             :          * receive text/events transmitted by guiFormSpecMenu
      80             :          * @param text textual representation of event
      81             :          */
      82             :         void gotText(std::wstring text);
      83             : 
      84             : private:
      85             :         /** target to transmit data to */
      86             :         GUIEngine* m_engine;
      87             : };
      88             : 
      89             : /** GUIEngine specific implementation of ISimpleTextureSource */
      90             : class MenuTextureSource : public ISimpleTextureSource
      91             : {
      92             : public:
      93             :         /**
      94             :          * default constructor
      95             :          * @param driver the video driver to load textures from
      96             :          */
      97             :         MenuTextureSource(video::IVideoDriver *driver);
      98             : 
      99             :         /**
     100             :          * destructor, removes all loaded textures
     101             :          */
     102             :         virtual ~MenuTextureSource();
     103             : 
     104             :         /**
     105             :          * get a texture, loading it if required
     106             :          * @param name path to the texture
     107             :          * @param id receives the texture ID, always 0 in this implementation
     108             :          */
     109             :         video::ITexture* getTexture(const std::string &name, u32 *id = NULL);
     110             : 
     111             : private:
     112             :         /** driver to get textures from */
     113             :         video::IVideoDriver *m_driver;
     114             :         /** set of texture names to delete */
     115             :         std::set<std::string> m_to_delete;
     116             : };
     117             : 
     118             : /** GUIEngine specific implementation of OnDemandSoundFetcher */
     119           2 : class MenuMusicFetcher: public OnDemandSoundFetcher
     120             : {
     121             : public:
     122             :         /**
     123             :          * get sound file paths according to sound name
     124             :          * @param name sound name
     125             :          * @param dst_paths receives possible paths to sound files
     126             :          * @param dst_datas receives binary sound data (not used here)
     127             :          */
     128             :         void fetchSounds(const std::string &name,
     129             :                         std::set<std::string> &dst_paths,
     130             :                         std::set<std::string> &dst_datas);
     131             : 
     132             : private:
     133             :         /** set of fetched sound names */
     134             :         std::set<std::string> m_fetched;
     135             : };
     136             : 
     137             : /** implementation of main menu based uppon formspecs */
     138             : class GUIEngine {
     139             :         /** grant ModApiMainMenu access to private members */
     140             :         friend class ModApiMainMenu;
     141             : 
     142             : public:
     143             :         /**
     144             :          * default constructor
     145             :          * @param dev device to draw at
     146             :          * @param parent parent gui element
     147             :          * @param menumgr manager to add menus to
     148             :          * @param smgr scene manager to add scene elements to
     149             :          * @param data struct to transfer data to main game handling
     150             :          */
     151             :         GUIEngine(      irr::IrrlichtDevice* dev,
     152             :                         gui::IGUIElement* parent,
     153             :                         IMenuManager *menumgr,
     154             :                         scene::ISceneManager* smgr,
     155             :                         MainMenuData* data,
     156             :                         bool& kill);
     157             : 
     158             :         /** default destructor */
     159             :         virtual ~GUIEngine();
     160             : 
     161             :         /**
     162             :          * return MainMenuScripting interface
     163             :          */
     164           3 :         MainMenuScripting* getScriptIface()
     165             :         {
     166           3 :                 return m_script;
     167             :         }
     168             : 
     169             :         /**
     170             :          * return dir of current menuscript
     171             :          */
     172           2 :         std::string getScriptDir()
     173             :         {
     174           2 :                 return m_scriptdir;
     175             :         }
     176             : 
     177             :         /** pass async callback to scriptengine **/
     178             :         unsigned int queueAsync(std::string serialized_fct,std::string serialized_params);
     179             : 
     180             : private:
     181             : 
     182             :         /** find and run the main menu script */
     183             :         bool loadMainMenuScript();
     184             : 
     185             :         /** run main menu loop */
     186             :         void run();
     187             : 
     188             :         /** handler to limit frame rate within main menu */
     189             :         void limitFrameRate();
     190             : 
     191             :         /** update size of topleftext element */
     192             :         void updateTopLeftTextSize();
     193             : 
     194             :         /** device to draw at */
     195             :         irr::IrrlichtDevice*     m_device;
     196             :         /** parent gui element */
     197             :         gui::IGUIElement*        m_parent;
     198             :         /** manager to add menus to */
     199             :         IMenuManager*            m_menumanager;
     200             :         /** scene manager to add scene elements to */
     201             :         scene::ISceneManager*    m_smgr;
     202             :         /** pointer to data beeing transfered back to main game handling */
     203             :         MainMenuData*            m_data;
     204             :         /** pointer to texture source */
     205             :         ISimpleTextureSource*    m_texture_source;
     206             :         /** pointer to soundmanager*/
     207             :         ISoundManager*           m_sound_manager;
     208             : 
     209             :         /** representation of form source to be used in mainmenu formspec */
     210             :         FormspecFormSource*      m_formspecgui;
     211             :         /** formspec input receiver */
     212             :         TextDestGuiEngine*       m_buttonhandler;
     213             :         /** the formspec menu */
     214             :         GUIFormSpecMenu*         m_menu;
     215             : 
     216             :         /** reference to kill variable managed by SIGINT handler */
     217             :         bool&                    m_kill;
     218             : 
     219             :         /** variable used to abort menu and return back to main game handling */
     220             :         bool                     m_startgame;
     221             : 
     222             :         /** scripting interface */
     223             :         MainMenuScripting*       m_script;
     224             : 
     225             :         /** script basefolder */
     226             :         std::string              m_scriptdir;
     227             : 
     228             :         /**
     229             :          * draw background layer
     230             :          * @param driver to use for drawing
     231             :          */
     232             :         void drawBackground(video::IVideoDriver* driver);
     233             :         /**
     234             :          * draw overlay layer
     235             :          * @param driver to use for drawing
     236             :          */
     237             :         void drawOverlay(video::IVideoDriver* driver);
     238             :         /**
     239             :          * draw header layer
     240             :          * @param driver to use for drawing
     241             :          */
     242             :         void drawHeader(video::IVideoDriver* driver);
     243             :         /**
     244             :          * draw footer layer
     245             :          * @param driver to use for drawing
     246             :          */
     247             :         void drawFooter(video::IVideoDriver* driver);
     248             : 
     249             :         /**
     250             :          * load a texture for a specified layer
     251             :          * @param layer draw layer to specify texture
     252             :          * @param texturepath full path of texture to load
     253             :          */
     254             :         bool setTexture(texture_layer layer, std::string texturepath,
     255             :                         bool tile_image, unsigned int minsize);
     256             : 
     257             :         /**
     258             :          * download a file using curl
     259             :          * @param url url to download
     260             :          * @param target file to store to
     261             :          */
     262             :         static bool downloadFile(std::string url,std::string target);
     263             : 
     264             :         /** array containing pointers to current specified texture layers */
     265             :         image_definition m_textures[TEX_LAYER_MAX];
     266             : 
     267             :         /** draw version string in topleft corner */
     268             :         void drawVersion();
     269             : 
     270             :         /**
     271             :          * specify text to be appended to version string
     272             :          * @param text to set
     273             :          */
     274             :         void setTopleftText(std::string append);
     275             : 
     276             :         /** pointer to gui element shown at topleft corner */
     277             :         irr::gui::IGUIStaticText*       m_irr_toplefttext;
     278             : 
     279             :         /** initialize cloud subsystem */
     280             :         void cloudInit();
     281             :         /** do preprocessing for cloud subsystem */
     282             :         void cloudPreProcess();
     283             :         /** do postprocessing for cloud subsystem */
     284             :         void cloudPostProcess();
     285             : 
     286             :         /** internam data required for drawing clouds */
     287             :         struct clouddata {
     288             :                 /** delta time since last cloud processing */
     289             :                 f32     dtime;
     290             :                 /** absolute time of last cloud processing */
     291             :                 u32     lasttime;
     292             :                 /** pointer to cloud class */
     293             :                 Clouds* clouds;
     294             :                 /** camera required for drawing clouds */
     295             :                 scene::ICameraSceneNode* camera;
     296             :         };
     297             : 
     298             :         /** is drawing of clouds enabled atm */
     299             :         bool        m_clouds_enabled;
     300             :         /** data used to draw clouds */
     301             :         clouddata   m_cloud;
     302             : 
     303             :         /** start playing a sound and return handle */
     304             :         s32 playSound(SimpleSoundSpec spec, bool looped);
     305             :         /** stop playing a sound started with playSound() */
     306             :         void stopSound(s32 handle);
     307             : 
     308             : 
     309             : };
     310             : 
     311             : 
     312             : 
     313             : #endif /* GUI_ENGINE_H_ */

Generated by: LCOV version 1.11