/******************************************************************************/
#include "irrlichttypes.h"
#include "modalMenu.h"
-#include "clouds.h"
-#include "guiLuaApi.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,
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 */
* @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
* @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<std::string> 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<std::string> 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<std::string> &dst_paths,
- std::set<std::string> &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<std::string> &dst_datas);
+
+private:
+ /** set of fetched sound names */
+ std::set<std::string> 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
* @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<std::string, std::string> 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();
/** 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;
-
- /** variable used to abort menu and return back to main game handling */
- bool m_startgame;
+ GUIFormSpecMenu* m_menu;
- /**
- * initialize lua stack
- * @param L stack to initialize
- */
- void initalize_api(lua_State * L);
+ /** reference to kill variable managed by SIGINT handler */
+ bool& m_kill;
- /**
- * 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
* @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();
/** 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);
+
};