Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 11.04.2003, 14:36 Titel: Lua 5 |
|
|
Heute wurde der Lua 5 Release built veröffentlicht. :D _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 24.04.2003, 12:54 Titel: |
|
|
Hallo,
hast du dich mal so richtig damit beschäftigt? Kannst du Lua aus einem C/C++ Programm nutzen? Ich weiss, dass man den Header einbinden kann, aber dann... Interessant wird es ja erst, wenn ich Methoden von C++ Objekten aus Lua aufrufen kann...
Christian |
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 24.04.2003, 13:32 Titel: |
|
|
Jepp ich hab schon eine funktionierende Lua Konsole in C++ geschrieben mit der man von Lua aus auch Funktionen aufrufen kann. Wenn meine Engine soweit fertig ist(hab im Moment kaum Zeit zum programmieren. :() werd ich's auch dort einbauen. In dem Spiel werde ich Lua 4 verwenden und nur mit Funktionen arbeiten. Im Editor wird man dann Ereignissen Funktionen zuordnen können(z.B. Door1OnOpen()). Außerdem wird die Konsole auch auf Lua basieren.
Du kannst deine Klassen mit "toLua" nach Lua exportieren und die Methoden dann so aufrufen:
Code: |
Foo:Bar(arg1, args2)
|
Ob das aber schon zu Lua 5 portiert wurde weiß ich nicht... _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 24.04.2003, 13:48 Titel: |
|
|
main.cpp
Code: |
#include <stdio.h>
#include <iostream.h>
#include <string.h>
#include <io.h>
#include <time.h>
extern "C"
{
#include <lua.h>
#include <lualib.h>
}
// Die folgenden Funktionen werden in Lua registriert
// Wird bei Syntaxfehlern aufgerufen
static int _ERRORMESSAGE(lua_State * L)
{
char * error;
cout << "Wie bitte!?!\n";
return 1;
}
// Diese Funktion soll durch Stackmanipulation
// aufgerufen werden
static int callme(lua_State * L)
{
cout << "Es hat geklappt!\n";
return 0;
}
static int c_getline(lua_State * L)
{
char buf[128];
cin.getline(buf, 128);
lua_pushstring(L, buf);
return 1;
}
// Gibt die übergebenen Argumente aus und liefert
// 10 Integers zurück(0 - 9).
static int myfunc(lua_State * L)
{
int i;
cout << lua_gettop(L) << " Parameters:" << endl;
for(i = 1; i <= lua_gettop(L); i++)
{
int type = lua_type(L, i);
cout << " ";
if(type == LUA_TNUMBER)
cout << lua_tonumber(L, i);
else if(type == LUA_TSTRING)
cout << lua_tostring(L, i);
cout << endl;
}
for(i = 0; i < 10; i++)
lua_pushnumber(L, i);
return 10;
}
// Listet alle Dateien/Verzeichnisse im aktuellen Ordner auf
// (aus der MSDN kopiert)
static int dir(lua_State * L)
{
std::string specs(lua_tostring(L, 1));
long search;
_finddata_t file_data;
search = _findfirst(specs.c_str(), &file_data);
printf( "\nRDO HID SYS ARC FILE DATE %25c SIZE\n", ' ' );
printf( "\nRDO HID SYS ARC FILE DATE %25c SIZE\n", ' ' );
printf( "--- --- --- --- ---- ---- %25c ----\n", ' ' );
printf( ( file_data.attrib & _A_RDONLY ) ? " Y " : " N " );
printf( ( file_data.attrib & _A_SYSTEM ) ? " Y " : " N " );
printf( ( file_data.attrib & _A_HIDDEN ) ? " Y " : " N " );
printf( ( file_data.attrib & _A_ARCH ) ? " Y " : " N " );
printf( " %-12s %.24s %9ld\n", file_data.name, ctime( &( file_data.time_write ) ), file_data.size );
while(_findnext(search, &file_data) == 0)
{
printf( ( file_data.attrib & _A_RDONLY ) ? " Y " : " N " );
printf( ( file_data.attrib & _A_SYSTEM ) ? " Y " : " N " );
printf( ( file_data.attrib & _A_HIDDEN ) ? " Y " : " N " );
printf( ( file_data.attrib & _A_ARCH ) ? " Y " : " N " );
printf( " %-12s %.24s %9ld\n", file_data.name, ctime( &( file_data.time_write ) ), file_data.size );
}
_findclose(search);
return 0;
}
void main()
{
lua_State * L = lua_open(100); // <-- Stackgröße
lua_baselibopen(L);
lua_iolibopen(L);
lua_strlibopen(L);
lua_mathlibopen(L);
lua_dblibopen(L);
lua_register(L, "dir", dir);
lua_register(L, "c_getline", c_getline);
lua_register(L, "myfunc", myfunc);
lua_register(L, "_ERRORMESSAGE", _ERRORMESSAGE);
lua_register(L, "callme", callme);
lua_dofile(L, "parsetable.lua");
char buf[128];
cout << "Lua Testconsole" << endl
<< "~~~~~~~~~~~~~~~" << endl
<< "Type 'exit' to quit" << endl;
for(;;)
{
cout << "> ";
cin.getline(buf, 128);
if(strcmp(buf, "exit"))
lua_dostring(L, buf);
else
break;
}
lua_close(L);
}
|
parsetable.lua
Code: |
function parsetable(tbl)
if not(type(tbl) == "table") then
print("[ERROR]Argument is not a table")
return
elseif type(tbl) == "nil" then
print("[ERROR]Argument is nil")
return
end
local length = getn(tbl)
for i = 1, length do
t = type(tbl[i])
if t == "table" then
print("\n~~~~~~~~~~~~");
print("NESTED TABLE");
parsetable(tbl[i])
print("~~~~~~~~~~~~\n");
elseif t == "function" then
tbl[i]()
else
print(tbl[i])
end
end
end
|
_________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 24.04.2003, 14:04 Titel: |
|
|
Sehr schön, vielen Dank ! |
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 24.04.2003, 14:07 Titel: |
|
|
War mir eine Ehre dem Großmeister zu helfen. _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 26.04.2003, 14:30 Titel: |
|
|
Hmm, mich würde jetzt mal interessieren was du mit Lua machst oder bist du nur am Experimentieren? _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 26.04.2003, 16:50 Titel: |
|
|
Erstmal nur ein paar Versuche, ich will aber auf längere Sicht ein paar Objekte gescripted bewegen... |
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 13.08.2003, 11:15 Titel: |
|
|
Mittlerweile gibt es eine Alpha von toLua - sehr interessant.... |
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 23.08.2003, 12:47 Titel: |
|
|
Hast du dich mal mit Coroutinen und Threads beschäftigt? Ich krieg es nicht hin eine Coroutine von meinem C++ Programm aus zu resumen. =/ _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 23.08.2003, 13:56 Titel: |
|
|
Nein, bisher leider nicht. Ich habe aber schon eingeplant, in nächster Zeit was zu machen, wäre gut, wenn du es schon weisst. |
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 23.08.2003, 14:05 Titel: |
|
|
Ich bin fleißig am arbeiten aber wieso funzt das nicht? =/
C++
Code: |
#pragma comment(lib, "lua.lib")
#pragma comment(lib, "lualib.lib")
extern "C"
{
#include <lua.h>
#include <lualib.h>
#include <lauxlib.h>
}
#include <iostream>
#include <string>
using namespace std;
static int _wait(lua_State * L)
{
return lua_yield(L, 0);
}
void main()
{
bool running = true;
lua_State * L = lua_open();
lua_baselibopen(L);
lua_register(L, "wait", _wait);
lua_State * Thread = lua_newthread(L);
lua_dofile(Thread, "test.txt");
do
{
string input;
cin >> input;
lua_resume(Thread, 0);
if(input == "exit")
running = false;
}while(running);
lua_close(L);
}
|
Lua
Code: |
while true do
print("Hallo")
wait()
end
|
[edit]
Ich erhalte den Fehler: "attempt to yield accross metamethod/C-call boundary" _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 23.08.2003, 15:29 Titel: |
|
|
Nagut ich mach es jetzt doch mit Coroutinen, da funktioniert es... weiß jemand wie ich mit yield Parameter an das Hauptprogramm übergebe und wie ich diese vom Stack lese? _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 23.08.2003, 18:39 Titel: |
|
|
Hat sich erledigt. Ich arbeite momentan an einem kleinen ASCII-Dungeon-Spiel. ;) Wenn ich fertig bin stelle ich das gesamte Projekt zur Verfügung. :) _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
|