Adding LuaScriptModule to Sample FirstWindow

From CEGUI Wiki - Crazy Eddie's GUI System (Open Source)
Revision as of 14:58, 26 February 2011 by Capek (Talk | contribs) (Robot: Cosmetic changes)

Jump to: navigation, search

Written for CEGUI 0.3


Works with versions 0.3.x (obsolete)

This applies to the CEGUI 0.3.0 Release.

Enable logging

Lua scripts get a lot of bugs. Without logging, you will never know why your application simply quits without stepping through every line of code.

In CEGuiSample.cpp

bool CEGuiSample::initialise()
{
     . . .
     default:
         // TODO: Throw exception or something!
+        return false;
-        break;
     }
+    CEGUI::Logger *logger = &CEGUI::Logger::getSingleton();
+    logger->setLoggingLevel( CEGUI::Informative );
+#if defined( __WIN32__ ) || defined( _WIN32 )
+    logger->setLogFilename( "C:\\Sample_FirstWindow.log", true );
+#elif defined(linux)
+    logger->setLogFilename( "~/Sample_FirstWindow.log", true );
+#else
+    logger->setLogFilename( "Sample_FirstWindow.log", true );
+#endif
     // execute the base application (which sets up the demo via 'this' and runs it.
    if (d_sampleApp->execute(this))

Create a Lua State

In Sample_FirstWindow.cpp

  #include "CEGUI.h"
+ #include "../ScriptingModules/CEGUILua/LuaScriptModule/include/LuaScriptModule.h"


In Sample_FirstWindow.cpp

bool FirstWindowSample::initialiseSample()
{
    using namespace CEGUI;
    
+   // create a lua_state by using Lindquist's awesome LuaScriptModule
+   LuaScriptModule* lua = new LuaScriptModule();
+   // create the CEGUI namespace in the Lua environment
+   lua->createBindings();
    . . .
    // DefaultWindow which we will be using as the root of the displayed gui.
    root->addChildWindow(wnd);     
+   // call a script from our the datafiles
+   lua->executeScriptFile("../datafiles/scripts/sample.lua", "test");

Create a Lua Script

In the Samples\datafiles directory Create a scripts directory

Create sample.lua

-- get the GUI sheet
local sheet = CEGUI.WindowManager:getSingleton():getWindow("Root");

-- create a FrameWindow
local fw = CEGUI.WindowManager:getSingleton():createWindow ("TaharezLook/FrameWindow","framewnd");
-- add it to the sheet
sheet:addChildWindow(fw)

-- set its size and position
local sz = CEGUI.Size:new_local(0.5,0.5)
local pos = CEGUI.Point:new_local(0.2,0.1)
fw:setSize(sz)
fw:setPosition(pos)
fw:setText("Lua says Hello World!")
-- disable user sizing
fw:setProperty("SizingEnabled","False")

Running

Now just compile and run.