Lua script Szécsi László

Slides:



Advertisements
Hasonló előadás
Osztály leszármaztatás
Advertisements

Krizsán Zoltán iit 1.1.  Aszinkron történésről értesítés egy vagy több objektum számára.  Delegátumok segítségével valósítja meg a C#.  event típus,
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Mesh betöltés, kirajzolás Szécsi László. dx11-ben nincs – játékfejlesztők írnak maguknak úgyis DXUT-ban van – CDXUTSDKMesh – csak sdkmesh formátumot tud.
Öröklődés 2..
JavaScript.
© Kozsik Tamás Beágyazott osztályok A blokkstrukturáltság támogatása –Eddig: egymásba ágyazható blokk utasítások Osztálydefiníciók is egymásba.
Csala Péter ANDN #4. 2 Tartalom  C# - ban előre definiált típusok  Változók  Változókkal műveletek  Elágazás  Ciklus.
Bevezetés a Java programozásba
6. előadás (2005. április 5.) Struktúrák Úniók Új adattípus definíálása Dinamikus memória foglalás 1.
Fájlkezelés, IO Kivételkezelés Belső osztályok
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 5. Gyakorlat Öröklődés, virtuális függvények,
Programozás II. 3. Gyakorlat C++ alapok.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 6. Gyakorlat const, static, dinamikus 2D.
A Java programozási nyelvSoós Sándor 1/17 Java programozási nyelv 4. rész – Osztályok II. Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai.
A C++ programozási nyelvSoós Sándor 1/15 C++ programozási nyelv Gyakorlat hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet.
A C++ programozási nyelvSoós Sándor 1/12 C++ programozási nyelv Gyakorlat - 8. hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet.
C# tagfüggvények.
JSP és JavaBean JavaServer Pages és Java Beans Fabók Zsolt Általános Informatikai Tanszék Miskolci Egyetem.
C# tagfüggvények.
Krizsán Zoltán iit 1.2.  Nem kell vizuális felületnek lennie.  Delegátumok segítségével valósíthatja meg a.NET. Krizsán Zoltán iit Delegátumok C#-ban2.
Krizsán Zoltán.  Ha az algoritmus sokáig dolgozik,  de el akarjuk kerülni a „fagyást”.  Kisebb a költsége, mint az új folyamatnak.  Programozás szempontjából.
Web-grafika (VRML) 10. gyakorlat Kereszty Gábor. Script típusok Elemi típusok: szám: egész vagy lebegőpontos – int / float – 1 / 1.1 string: ‘Hello World!’
Annotációk a Java 5 nyelvben Kozsik Tamás. Annotációk Módosítószavak bővítése A programszöveg elemeihez rendelhetők –Csomagokhoz, típusokhoz, metódusokhoz,
Kivételkezelés.
WEB Technológiák ISAPI ME Általános Informatikai Tsz. dr. Kovács László.
VFP Form programozás Form szerkesztő elemei vezérlő elemek
Ficsor Lajos Template-ek CPP8/ 1 Template-ek. Ficsor Lajos Template-ek CPP8/ 2 A template fogalma Kiindulási probléma: tetszőleges típusokon kellene ugyanolyan.
Kivételkezelés a C++ nyelvben Bevezetés
Multimédiás programok készítése Macromedia Director rendszerben 2. előadás Készítette: Kosztyán Zsolt
P ROGRAMOZÁS C# - BAN Kivételkezelés. P ÉLDA I. Nullával való osztás miatt kapjuk a hibaüzenetet.
Programozási Nyelvek (C++) Gyakorlat Gyak 02.
Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz tárgy honlap:
Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz tárgy honlap:
Alprogramok deklarációja, definíciója és meghívása Páll Boglárka.
Fájlkezelés Pascalban
A PHP 5 újdonságai Az OOP terén. Miről lesz szó? Osztályok kezelése – Új direktívák – Konstruktor – Destruktor Interfészek Kivételkezelés.
Objektum orientált programozás a gyakorlatban
Hernyák Zoltán Programozási Nyelvek II.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Hernyák Zoltán Programozási Nyelvek II.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Készítette: Lipp Marcell
Javascript Microsoft által készített kiegészítése Statikus típusosság Nagy projektek Windows 8 fejlesztésénél WinRT egy részét ebben írták Nyílt forráskódú,
Motor I. Scene graph XML Rendering Szécsi László.
Megjelenítő-motor, színtér- menedzsment Szécsi László.
Textúrázás Szécsi László. giraffe.jpg letöltése SolutionDir/Media folderbe.
Java programozási nyelv Adatbekérés konzolról
HF MINTA 2012/2013. ősz. HF Minta  Objektum-orientált program  „Adatvezérelt” alkalmazás írása  Fájl kezelés (olvasás, írás)  Menü készítése  5-6.
Objektum orientált programozás
A Visual Basic nyelvi elemei
HTML ÉS PHP (Nagyon) rövid áttekintés. ADATBÁZISRENDSZEREK MŰKÖDÉSI SÉMÁJA Felh. interakció DB Connector MySQL ? A gyakorlaton:
Illés Zoltán ELTE Informatikai Kar
Egyéb interpreterek Windows Script Host Internet Explorer Hypertext application.
Ficsor Lajos A C++ programozási nyelv I. CPP1/ 1 Osztály és objektum fogalma.
Excel programozás (makró)
TÁMOP /1-2F JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam Osztályok, objektumok definiálása és alkalmazása. Saját.
Krizsán Zoltán, iit C# osztályok 2 Adattagok  Osztály hatáskörben definiált változó.  Formája: [attribútum] [módosító] típus azonosító [=kezdő érték][,
Neumann János Informatikai Kar
Excel programozás (makró)
„Designer-barát” játéklogika
YUI február YUI szeptember YUI3
A CLIPS keretrendszer
gg004-Mesh project copy-paste-rename gg002-App folder
Sw2 PhysX.
JavaScript a böngészőben
Environment mapping Szécsi László
OOP és Python Vincellér Zoltán.
Függvénysablonok használata
Előadás másolata:

Lua script Szécsi László GraphGame gg014-Script Lua script Szécsi László

Egg/Script ScriptedApp LuaTable Scene::ManagedApp-ból származik Game-et ebből származtathatjuk scriptből hívható metódusokat tartalmaz egyelőre színtérépítéshez leszármaztatott osztályok ezekhez hozzátehetnek LuaTable Lua táblázat formájában adott paraméterek feldolgozásához EnumReflectionMap enum típusú paraméterekhez

Lua script www.lua.org teljes programnyelv nincs main – majd a C++ programból hívunk bele nem erősen típusos x = 3 x = "valami szöveg"

Lua táblázat tablazat = { [1]=2, ["kulcs"]=4, [5]="ertek" } {} között ,-vel elválasztott mezők, minden mező [kulcs]=ertek típusú, a kulcs és az érték is bármilyen típusú lehet ["valami"] helyett írható: valami így fogjuk haszálni (pl. anyag attirbútumai): {name='spotted', technique='textured', pass='textured'}

Lua táblázat tablazat = { [1]=2, ["kulcs"]=4, [5]="ertek" } elem elérése: mivanbenne = tablazat[5] mivanitt = tablazat["kulcs"] utóbbi így is írható: mivanitt = tablazat.kulcs

Lua függvény a függvény is egy típus valtozoaminekfggverteketadok = function(elsoparam, masodikparam) csinaldezt(elsoparam) megezt(masodikparam) end ezután a fggv meghívása valtozoaminekfggverteketadok(1, 2)

Lua és OO nincs objektum-orientáltság de szerephetnek tablázatban értékként függvények, a kulcsuk meg a nevük objektum = {metodus=function(self, masikparam) dosmthg() end } a metódus meghívása objektum.metodus(objektum, 2) de ugyanez rövidebben is írható: objektum:metodus(2)

LuaBind C++ objektum -> Lua táblázat Lua fggv meghívása -> C++ metódus hívódjon + C++-ból tudjunk Lua metódust hívni, Lua táblázatból elemeket kivenni

C++ metódusok regisztrálása a lua „virtuális gép” C++ class neve lua-ban module(luaState) [ class_<ScriptedApp>("ScriptedApp") .def("Material", &ScriptedApp::addMeshMaterial) ]; metódus neve lua-ban metódusra mutató pointer (pointer-to-member)

Ezután a meghívása Lua-ban ehhez a tojás alakú lua változóhoz már hozzá van kötve a ScriptedApp példány ennek a paraméternek itt még nincs funkciója (az _ az egy változó neve) metódus scriptbeli neve O:IndexedMesh(_, {name='giraffe', file='giraffe.obj'} ) attribútumok egy táblázatban

Hogyan csináljunk hierarchiát? legyen a paraméter egy függvény, ami _ nevű paraméterként kapja a szülőt O:Material( _, {name='spotted', technique='textured', pass='textured'}, function(_) O:setSrv(_, {effectVariable='kdTexture', file='giraffe.jpg'}) end ) addMeshMaterial meghívja ezt a függvényt, ami inicializálja a létrehozott Mesh::Material-t

Olvashatóbb verzió: _ mindig a szülő O:IndexedMesh(_, {name='giraffe', file='giraffe.obj'}) O:Material(_, {name='spotted', technique='textured', pass='textured'}, function(_) O:setSrv(_, {effectVariable='kdTexture', file='giraffe.jpg'}) end ) O:MultiMesh(_, {name='giraffe'}, function(_) O:FlipMesh(_, {}, function(_) O:ShadedMesh(_, {mien='basic', indexedMesh='giraffe', material='spotted'})

Hogy néz ki a C++ metódus? Lua táblázatot, Lua függvényt kap, mint paramétert luabind::object a – bármilyen Lua érték lehet luabind::type(a) – típus lekérése a() – lua függvény meghívása C++-ból LuaTable segédosztály: táblázatelemek elérése

Így néz ki a C++ metódus void Script::ScriptedApp::addFlipMeshToMultiMesh( Egg::Mesh::Multi::P multiMesh, //< szülő a hierarchiában, _ a scriptben luabind::object attributes, //< lua táblázat az attributumokkal luabind::object initializer //< ezt kell meghívni a feltöltéshez ) { LuaTable attributeTable(attributes, "FlipMesh"); // táblázatkezelő Egg::Mesh::Flip::P flipMesh = Egg::Mesh::Flip::create(); // új objektum initializer(flipMesh); // visszahívás a scriptbe multiMesh->add(flipMesh); // kész objektumot hozzáadjuk a szülőhöz }

C++ metódus hibakezeléssel void Script::ScriptedApp::addFlipMeshToMultiMesh( Egg::Mesh::Multi::P multiMesh, //< szülő a hierarchiában, _ a scriptben luabind::object attributes, //< lua táblázat az attributumokkal luabind::object initializer //< ezt kell meghívni a feltöltéshez ) { try{ LuaTable attributeTable(attributes, "FlipMesh"); // táblázatkezelő Egg::Mesh::Flip::P flipMesh = Egg::Mesh::Flip::create(); // új objektum initializer(flipMesh); // visszahívás a scriptbe multiMesh->add(flipMesh); // kész objektumot hozzáadjuk a szülőhöz } catch(Egg::HrException exception){ exitWithErrorMessage(exception); } }

ScriptedApp.h /// Lua scripting state. lua_State* luaState; /// Runs a Lua script from a file. /// @param luaFilename the Lua script file to be executed. void runScript(const std::string& luaFilename);

ScriptedApp::createResources using namespace luabind; luaState = lua_open(); open(luaState); luaL_openlibs(luaState); // ide jön a binding int s = luaL_dostring(luaState, "O = nil; _ = nil; function setEgg(egg) O = egg end"); if(s != 0){ std::string errs = lua_tostring(luaState, -1); MessageBoxA( NULL, errs.c_str(), "Lua error!", MB_OK); } call_function<Script::ScriptedApp*>(luaState, "setEgg", this);

Binding module(luaState) [ class_<Mesh::Indexed>("IndexedMesh"), class_<Mesh::Flip>("FlipMesh"), class_<Mesh::Multi>("MultiMesh"), class_<Mesh::Material>("Material"), class_<Script::ScriptedApp>("ScriptedApp") .def("IndexedMesh", &Script::ScriptedApp::addIndexedMesh) .def("Material", &Script::ScriptedApp::addMeshMaterial) .def("setSrv", &Script::ScriptedApp::addSrvToMaterial) .def("MultiMesh", &Script::ScriptedApp::addMultiMesh) .def("FlipMesh", &Script::ScriptedApp::addFlipMeshToMultiMesh) .def("ShadedMesh", &Script::ScriptedApp::addShadedMeshToFlipMesh) .def("MultiMeshFromFile", &Script::ScriptedApp::addMultiMeshFromFile) .def("StaticEntity", &Script::ScriptedApp::addStaticEntity) .def("FirstPersonCam", &Script::ScriptedApp::addFirstPersonCam) ];

Scriptből hívható metódusok legyártása addIndexedMesh addMeshMaterial addSrvToMaterial addMultiMesh addFlipMeshToMultiMesh addMultiMeshFromFile addStaticEntity addFirstPersonCam

Feladatok új project: gg014-Script ScriptedApp-ból származó Game createResources runScript("podScene.lua");

#9.0 podScene.lua O:IndexedMesh(_, {name='giraffe', file='giraffe.obj'}) O:Material(_, {name='spotted', technique='textured', pass='textured'}, function(_) O:setSrv(_, {effectVariable='kdTexture', file='giraffe.jpg'}) end ) O:MultiMesh(_, {name='giraffe'}, function(_) O:FlipMesh(_, {}, function(_) O:ShadedMesh(_, {mien='basic', indexedMesh='giraffe', material='spotted'})

#9.0 podScene.lua O:StaticEntity(_, {name='giraffe0', multiMesh='giraffe', position = { x=2, y=0, z=0} } ) O:FirstPersonCam(_, {name='default', position={x=20, y=20, z=20} } )

Feladatok csináljuk meg scriptből a hátteret full screen quad geometria a ‘quad.x’ betöltésével is legyártható geopod betöltés, példányok létrehozása geopod envmappelt ablakokkal 33 geopod lua ciklussal for var=kezdo,veg,lepes do something end neve: 'ship' .. iShip .. a string konkatenáció operátor