Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Aug 19, 2009, 12:19:11 AM (15 years ago)
Author:
rgrieder
Message:

Cleaned out the lua script files for the GUI.
Also replaced "require" function to support resources.
Fixed a problem with the return value of doFile, includeFile and require being discarded because the tolua binding is for a C++ function returning void.

Location:
code/branches/resource2
Files:
9 deleted
7 edited
4 moved

Legend:

Unmodified
Added
Removed
  • code/branches/resource2/data/gui/layouts/MainMenu.layout

    r5653 r5661  
    1212            <Property Name="Text" Value="Standalone"/>
    1313            <Property Name="Disabled" Value="true"/>
    14             <Event Name="Clicked" Function="mainmenu_2.button_standalone_clicked"/>
     14            <Event Name="Clicked" Function="MainMenu.button_standalone_clicked"/>
    1515        </Window>
    1616       
     
    2020            <Property Name="UnifiedSize" Value="{{0.35,0},{0.33,0}}" />
    2121            <Property Name="Tooltip" Value="Available Levels." />
    22             <Event Name="ItemSelectionChanged" Function="mainmenu_2.listbox_level_selectionchanged" />
     22            <Event Name="ItemSelectionChanged" Function="MainMenu.listbox_level_selectionchanged" />
    2323        </Window>
    2424       
     
    2727            <Property Name="UnifiedSize" Value="{{0.15,0},{0.05,0}}"/>
    2828            <Property Name="Text" Value="Dedicated"/>
    29             <Event Name="Clicked" Function="mainmenu_2.button_dedicated_clicked"/>
     29            <Event Name="Clicked" Function="MainMenu.button_dedicated_clicked"/>
    3030        </Window>
    3131       
     
    3434            <Property Name="UnifiedSize" Value="{{0.15,0},{0.05,0}}"/>
    3535            <Property Name="Text" Value="Server"/>
    36             <Event Name="Clicked" Function="mainmenu_2.button_server_clicked"/>
     36            <Event Name="Clicked" Function="MainMenu.button_server_clicked"/>
    3737        </Window>
    3838       
     
    4141            <Property Name="UnifiedSize" Value="{{0.15,0},{0.05,0}}"/>
    4242            <Property Name="Text" Value="Client"/>
    43             <Event Name="Clicked" Function="mainmenu_2.button_client_clicked"/>
     43            <Event Name="Clicked" Function="MainMenu.button_client_clicked"/>
    4444        </Window>
    4545       
     
    4848            <Property Name="UnifiedSize" Value="{{0.15,0},{0.05,0}}"/>
    4949            <Property Name="Text" Value="Quit"/>
    50             <Event Name="Clicked" Function="mainmenu_2.button_quit_clicked"/>
     50            <Event Name="Clicked" Function="MainMenu.button_quit_clicked"/>
    5151        </Window>
    5252    </Window>
  • code/branches/resource2/data/gui/scripts/BasicGUI.lua

    r5653 r5661  
    33local P = {}
    44if _REQUIREDNAME == nil then
    5     gui = P
     5    BasicGUI = P
    66else
    77    _G[_REQUIREDNAME] = P
     
    4040end
    4141
    42 return gui or _G[_REQUIREDNAME]
     42return P
  • code/branches/resource2/data/gui/scripts/InitialiseGUI.lua

    r5653 r5661  
    1414
    1515loadedGUIs = {}
    16 
    17 -- datapath is set before executing the script and points to media-folder
    18 package.path = package.path .. ";" .. datapath .. "gui/scripts/?.lua"
    1916
    2017-- loads the GUI with the specified filename
  • code/branches/resource2/data/gui/scripts/MainMenu.lua

    r5653 r5661  
    1 -- mainmenu_2.lua
    2 gui = require("gui")
    3 local P = gui:new() --inherit everything from the gui package
     1-- MainMenu.lua
    42
    5 mainmenu_2 = P
     3BasicGUI = require("BasicGUI")
     4local P = BasicGUI:new() --inherit everything from the gui package
     5if _REQUIREDNAME == nil then
     6    MainMenu = P
     7else
     8    _G[_REQUIREDNAME] = P
     9end
    610
    7 P.filename = "mainmenu_2"
    8 P.layoutString = "MainMenu_2.layout"
     11P.filename = "MainMenu"
     12P.layoutString = "MainMenu.layout"
    913
    1014function P:init()
     
    8589end
    8690
    87 return mainmenu_2
     91return P
    8892
  • code/branches/resource2/data/gui/scripts/PickupInventory.lua

    r5587 r5661  
    1 gui = require("gui")
    2 local P = gui:new() --inherit everything from the gui package
     1-- PickupInventory.lua
    32
    4 PickupInventory = P
     3BasicGUI = require("BasicGUI")
     4local P = BasicGUI:new() --inherit everything from the gui package
     5if _REQUIREDNAME == nil then
     6    PickupInventory = P
     7else
     8    _G[_REQUIREDNAME] = P
     9end
    510
    611P.filename = "PickupInventory"
     
    6166end
    6267
    63 return PickupInventory
     68return P
  • code/branches/resource2/data/lua/LuaStateInit.lua

    r5654 r5661  
    11-- Note: luaState is a pointer to the LuaState instance that created this lua state
    22
    3 -- Redirect debug to print
     3-- Save original print function in debug
    44debug = print
    55
     
    2323  resourceGroup = resourceGroup or "NoResourceGroupProvided"
    2424  luaState:doFile(filename, resourceGroup, bSearchOtherPaths)
     25  -- Required because the C++ function cannot return whatever might be on the stack
     26  return LuaStateReturnValue
    2527end
     28original_dofile = dofile
    2629dofile = doFile
    2730
     
    3336  resourceGroup = resourceGroup or "NoResourceGroupProvided"
    3437  luaState:includeFile(filename, resourceGroup, bSearchOtherPaths)
     38  -- Required because the C++ function cannot return whatever might be on the stack
     39  return LuaStateReturnValue
    3540end
     41
     42-- Replace require function with almost similar behaviour
     43-- The difference is that you need to provide a resource group
     44-- Default value there is the current one (if present) or else "General"
     45-- But the loaded modules are then stored with only with the name (where name has no .lua extension)
     46-- CAUTION: That also means that you need to take care of conflicting filenames among groups
     47-- Furthermore the moduleName parameters is appended with the .lua extension when looking for the file
     48old_require = require
     49require = function(moduleName, resourceGroup)
     50  local bSearchOtherPaths = (resourceGroup == nil) or false
     51  resourceGroup = resourceGroup or "NoResourceGroupProvided"
     52  if not luaState:fileExists(moduleName .. ".lua", resourceGroup, bSearchOtherPaths) then
     53    return nil
     54  end
     55  if not _LOADED then
     56    _LOADED = {}
     57  end
     58  if not _LOADED[moduleName] then
     59    -- save old value
     60    _REQUIREDNAME_OLD = _REQUIREDNAME
     61    _REQUIREDNAME = moduleName
     62    luaState:doFile(moduleName .. ".lua", resourceGroup, bSearchOtherPaths)
     63    _LOADED[moduleName] = LuaStateReturnValue or true
     64    -- restore old value
     65    _REQUIREDNAME = _REQUIREDNAME_OLD
     66  end
     67  return _LOADED[moduleName]
     68end
  • code/branches/resource2/src/core/GUIManager.cc

    r5658 r5661  
    2727 *
    2828 */
    29 
    30 /**
    31 @file
    32 @brief
    33     Implementation of the GUIManager class.
    34 */
    3529
    3630#include "GUIManager.h"
     
    6054#include "Clock.h"
    6155#include "LuaState.h"
     56#include "Resource.h"
    6257
    6358namespace orxonox
     
    115110
    116111        // setup scripting
    117         scriptModule_.reset(new LuaScriptModule());
    118         luaState_ = scriptModule_->getLuaState();
     112        luaState_.reset(new LuaState());
     113        scriptModule_.reset(new LuaScriptModule(luaState_->getInternalLuaState()));
    119114
    120115        // Create our own logger to specify the filepath
     
    129124        guiSystem_.reset(new System(guiRenderer_.get(), resourceProvider_, 0, scriptModule_.get()));
    130125
    131         // do this after 'new CEGUI::Sytem' because that creates the lua state in the first place
    132         LuaState::openToluaInterfaces(this->luaState_);
    133 
    134         // initialise the basic lua code
    135         this->loadLuaCode();
    136     }
    137 
    138     /**
    139     @brief
    140         Destructor of the GUIManager
    141 
     126        // Initialise the basic lua code
     127        rootFileInfo_ = Resource::getInfo("InitialiseGUI.lua", "GUI");
     128        this->luaState_->doFile("InitialiseGUI.lua", "GUI", false);
     129    }
     130
     131    /**
     132    @brief
    142133        Basically shuts down CEGUI (member smart pointers) but first unloads our Tolua modules.
    143134    */
    144135    GUIManager::~GUIManager()
    145136    {
    146         // destroy our own tolua interfaces
    147         LuaState::closeToluaInterfaces(this->luaState_);
    148     }
    149 
    150     /**
    151     @brief
    152         Calls main Lua script
    153     @todo
    154         This function calls the main Lua script for our GUI.
    155 
    156         Additionally we set the datapath variable in Lua. This is needed so Lua can access the data used for the GUI.
    157     */
    158     void GUIManager::loadLuaCode()
    159     {
    160         // set datapath for GUI data
    161         lua_pushfstring(this->scriptModule_->getLuaState(), Core::getDataPathString().c_str());
    162         lua_setglobal(this->scriptModule_->getLuaState(), "datapath");
    163         // call main Lua script
    164         this->scriptModule_->executeScriptFile("loadGUI_3.lua", "GUI");
    165137    }
    166138
     
    209181    void GUIManager::executeCode(const std::string& str)
    210182    {
    211         try
    212         {
    213             this->scriptModule_->executeString(str);
    214         }
    215         catch (const CEGUI::Exception& ex)
    216         {
    217             COUT(2) << "CEGUI Error: \"" << ex.getMessage() << "\" while executing code \"" << str << "\"" << std::endl;
    218         }
    219         catch (...)
    220         {
    221             COUT(2) << "Couldn't execute GUI related Lua code due to unknown reasons." << std::endl;
    222         }
     183        this->luaState_->doString(str, rootFileInfo_);
    223184    }
    224185
     
    234195    void GUIManager::showGUI(const std::string& name)
    235196    {
    236         this->executeCode(std::string("showGUI(\"") + name + "\")");
     197        this->luaState_->doString("showGUI(\"" + name + "\")", rootFileInfo_);
    237198    }
    238199
  • code/branches/resource2/src/core/GUIManager.h

    r5651 r5661  
    2828 */
    2929
    30 /**
    31 @file
    32 @brief
    33     Declaration of the GUIManager class.
    34 */
    35 
    3630#ifndef _GUIManager_H__
    3731#define _GUIManager_H__
     
    4337#include <CEGUIForwardRefs.h>
    4438#include <boost/scoped_ptr.hpp>
     39#include <boost/shared_ptr.hpp>
    4540
    4641#include "util/OgreForwardRefs.h"
     
    8075        GUIManager(const GUIManager& instance); //!< private and undefined copy c'tor (this is a singleton class)
    8176
    82         void loadLuaCode();
    83 
    8477        // keyHandler functions
    8578        void keyPressed (const KeyEvent& evt);
     
    9386
    9487        scoped_ptr<CEGUI::OgreCEGUIRenderer> guiRenderer_;  //!< CEGUI's interface to the Ogre Engine
     88        scoped_ptr<LuaState>                 luaState_;     //!< LuaState, access point to the Lua engine
    9589        scoped_ptr<CEGUI::LuaScriptModule>   scriptModule_; //!< CEGUI's script module to use Lua
    9690        scoped_ptr<CEGUI::System>            guiSystem_;    //!< CEGUI's main system
     91        shared_ptr<ResourceInfo>             rootFileInfo_; //!< Resource information about the root script
    9792        Ogre::RenderWindow*      renderWindow_;     //!< Ogre's render window to give CEGUI access to it
    9893        CEGUI::ResourceProvider* resourceProvider_; //!< CEGUI's resource provider
    9994        CEGUI::Logger*           ceguiLogger_;      //!< CEGUI's logger to be able to log CEGUI errors in our log
    100         lua_State*               luaState_;         //!< Lua state, access point to the Lua engine
    10195
    10296        static GUIManager*       singletonPtr_s;    //!< Singleton reference to GUIManager
  • code/branches/resource2/src/core/LuaState.cc

    r5660 r5661  
    147147            sourceFileInfo_ = sourceFileInfo;
    148148
    149         //if (!bIsRunning_)
    150         //{
    151         //    bIsRunning_ = true;
    152 
    153149        int error = 0;
    154150#if LUA_VERSION_NUM != 501
     
    163159        // execute the chunk
    164160        if (error == 0)
    165             error = lua_pcall(luaState_, 0, 0, 0);
     161            error = lua_pcall(luaState_, 0, 1, 0);
    166162        if (error != 0)
    167163        {
     
    170166                origin = " originating from " + sourceFileInfo_->filename;
    171167            COUT(2) << "Error in Lua-script" << origin << ": " << lua_tostring(luaState_, -1) << std::endl;
    172         }
    173 
    174         //    bIsRunning_ = false;
    175         //}
    176         //else
    177         //{
    178         //    COUT(2) << "Warning: LuaState do function called while running!" << std::endl;
    179         //}
     168            // return value is nil
     169            lua_pushnil(luaState_);
     170        }
     171        // push return value because it will get lost since the return value of this function is void
     172        lua_setglobal(luaState_, "LuaStateReturnValue");
    180173
    181174        // Load the old info again
     
    191184    {
    192185        OutputHandler::getOutStream().setOutputLevel(level) << message << std::endl;
     186    }
     187
     188    bool LuaState::fileExists(const std::string& filename, const std::string& resourceGroup, bool bSearchOtherPaths)
     189    {
     190        shared_ptr<ResourceInfo> info =  this->getFileInfo(filename, resourceGroup, bSearchOtherPaths);
     191        if (info == NULL)
     192            return false;
     193        else
     194            return true;
    193195    }
    194196
  • code/branches/resource2/src/core/LuaState.h

    r5655 r5661  
    5959        void doString(const std::string& code, shared_ptr<ResourceInfo> sourceFileInfo = shared_ptr<ResourceInfo>());
    6060
    61         void includeFile(const std::string& filename, const std::string& resourceGroup = "Genreal", bool bSearchOtherPaths = true); // tolua_export
     61        void includeFile(const std::string& filename, const std::string& resourceGroup = "General", bool bSearchOtherPaths = true); // tolua_export
    6262        void includeString(const std::string& code, shared_ptr<ResourceInfo> sourceFileInfo = shared_ptr<ResourceInfo>());
    6363
    6464        void luaPrint(const std::string& str); // tolua_export
    6565        void luaLog(unsigned int level, const std::string& message); // tolua_export
     66        bool fileExists(const std::string& filename, const std::string& resourceGroup = "General", bool bSearchOtherPaths = true); // tolua_export
    6667
    6768        const std::stringstream& getOutput() const { return output_; }
  • code/branches/resource2/src/orxonox/gamestates/GSMainMenu.cc

    r3370 r5661  
    7070    {
    7171        // show main menu
    72         GUIManager::getInstance().showGUI("mainmenu_4");
     72        GUIManager::getInstance().showGUI("MainMenu");
    7373        GUIManager::getInstance().setCamera(this->camera_);
    7474        GraphicsManager::getInstance().setCamera(this->camera_);
Note: See TracChangeset for help on using the changeset viewer.