amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > Programmierung > LUA [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

27.09.2007, 17:41 Uhr

bruZard
Posts: 307
Nutzer
Für ein aktuelles Projekt benötige ich LUA ... für den Amiga gibt es ja im Aminet einen Port, dieser ist jedoch auf eine Lösung als eigenständige Programmiersprache ausgelegt.
Nun benötige ich aber eine Implementierung als Library um LUA als Script-Sprache für ein AmiBlitz Programm verwenden zu können.

Ich bemerke gerade dass ich nichtmal die Frage richtig formulieren kann :D Deshalb versuche ich es mal mit dem Vergleich zum Original Projekt auf'm PeeZee:

In BMax kann ich ein LUA Modul einbinden und es dann als Objekt initialiseren. Danach stehen mir Funktionen zur Verfügung die es mir erlauben Funktionen des Projektes für LUA "sichtbar" zu machen.

Beispiel:
Die Funktion OpenScreen() öffnet den Spielebildschirm. Diese Funkttion kann ich per lua.AddFunction(lua_OpenScreen, "OpenScreen") als "OpenScreen()" bekannt machen und dann in LUA aufrufen.
Das geschieht natürlich nicht von allein, ich muss schon das Script per lua.RunScriptFile("mein_schoenes_luascript.lua") ausführen.

Nun die Frage:
Wie kann ich amilua dazu übereden mir dieselbe Funktionalität für AmiBlitz zur Verfügung zu stellen?

--
Wer glaubt dass Volksvertreter das Volk vertreten, der glaubt auch dass Zitronenfalter Zitronen falten

[ - Antworten - Zitieren - Direktlink - ]

27.09.2007, 18:04 Uhr

Der_Wanderer
Posts: 1229
Nutzer
Dazu müsste man sich mal das LUA Interface genau anschauen.
Das wird in Amiblitz auf dem selben Wege funktionieren wie in C.
Wenn hier also jemand weiss wie es in C geht, kann man es leicht
auf Amiblitz übertragen.

Frage: Muss es LUA sein ? (ich vermute mal - ja!)

Ansonsten käme AREXX oder MonkeyScript in Frage (dann hätte ich wenigstens mal einen Grund, MonkeyScript wieder auszumotten und releastauglich aufzupolieren).

--
Thilo Köhler, Author von:
HD-Rec, Sweeper, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ScreenCam, PerlinFX, MapEdit, TK AB3 Includes und viele mehr...
Homepage: http://www.hd-rec.de


[ - Antworten - Zitieren - Direktlink - ]

27.09.2007, 18:31 Uhr

bruZard
Posts: 307
Nutzer
Ja, es muss LUA sein unter Win/Mac/Linux die Level-Descriptions in LUA gehalten werden. Das Problem ist nicht dass es keine Lösung gibt, sondern dass die bestehende Lösung zu einseitig implementiert wurde.

Ich benötige keinen LUA Interpreter wie ihn AmiLua darstellt, sondern eine Library welche fähig ist einem bestehenden Programm Scripting-Fähigkeiten zu verleihen (eigentlich so wie es sonst auf jedem System der Fall ist).
--
Wer glaubt dass Volksvertreter das Volk vertreten, der glaubt auch dass Zitronenfalter Zitronen falten

[ - Antworten - Zitieren - Direktlink - ]

27.09.2007, 20:22 Uhr

Mazze
Posts: 263
Nutzer
@bruZard:

Da ich Amilua verbrochen habe, kann ich natürlich etwas dazu sagen. Das Ganze ist aber schon eine Weile her, so dass ich die Details nicht mehr 100% weiß.

Lua ist eine Library. Der eigenständige Interpreter wertet nur die Kommandozeilenzeilenargumente aus und ruft dann den Interpreter, der sich in der Library befindet, aus.

Du müsstest also im Sourcecode von Lua nach den Files suchen, die zur Library gehören, und damit dann die Library bauen. Diese Library kannst Du dann an eigene Programme verlinken.

Du kannst Lua um eigene Funktionen erweitern. Ein Beispiel findest Du im Amilua-Source. lsiamigalib.c enthält hauptsächlich ein paar einfache Grafikbefehle für den Amiga.

Die Methode, die ich für siamiga verwendet habe, ist hier beschrieben.

Hier ist ein Beispiel, wie man den Interpreter von einem eigenen C-Programm aufrufen kann.
--
AROS - Because every rose has its dorns.
Meine Homepage

[ - Antworten - Zitieren - Direktlink - ]

27.09.2007, 22:25 Uhr

Mazze
Posts: 263
Nutzer
Kann es sein, dass du LUA als shared library brauchst? In Amilua ist alles statisch. Irgend wo habe ich gelesen, dass LUA reentrant ist. Damit sollte es eigentlich möglich sein, LUA als shared library zu implementieren. Aber bisher ist LUA auf keiner Amiga-like Plattform als shared lib verfügbar.
--
AROS - Make code, not war. :-) (-:
Meine Homepage

[ - Antworten - Zitieren - Direktlink - ]

28.09.2007, 09:05 Uhr

bruZard
Posts: 307
Nutzer
Da ich LUA für AmiBlitz benötige sollte es schon als shared Library vorliegen. Nun gut, ich schaue mir mal den Source an.

Vielen Dank für Kommentare!
--
Wer glaubt dass Volksvertreter das Volk vertreten, der glaubt auch dass Zitronenfalter Zitronen falten

[ - Antworten - Zitieren - Direktlink - ]

28.09.2007, 16:42 Uhr

Der_Wanderer
Posts: 1229
Nutzer
Ich hatte mich schonmal mit Bernd darüber unterhalten, ob man nicht C-libs in Amiblitz einbinden könnte. Theoretisch geht das, man muss aber die ganzen Namen und Offsets manuell aus dem ELF Format auslesen. Eine integrierte Funktion dafür in Amiblitz wäre natürlich schöner, also z.B. ähnlich zu den Inlucdes:

CInclude "lua.lib"

oder so.
Bisher hatte aber niemand die Zeit und Notwendigkeit das zu tun.
Das wäre ein möglicher Weg. Ansonsten müsste man eine Shared Library drumherum packen, die die Funktionen nach ausen legt. Dann würde ich das mit Hilfe von FD2Inlcude oder FDConvert in Amiblitz einbauen.
Shared Libraries unterliegen aber ziemlich strengen restriktionen, deshalb ist es viel schwerer eine Amiga Shared Lib aus einem OpenSource Project zu portieren als eine Exectuable oder C Lib.


--
Thilo Köhler, Author von:
HD-Rec, Sweeper, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ScreenCam, PerlinFX, MapEdit, TK AB3 Includes und viele mehr...
Homepage: http://www.hd-rec.de


[ - Antworten - Zitieren - Direktlink - ]

28.09.2007, 17:09 Uhr

bruZard
Posts: 307
Nutzer
Eine weitere Möglichkeit wäre vielleicht LUA komplett nach AB zu portieren ... aber wie Homer Simpson sagen würde: "Was für ein Aufwand!!". ;)

--
Wer glaubt dass Volksvertreter das Volk vertreten, der glaubt auch dass Zitronenfalter Zitronen falten

[ - Antworten - Zitieren - Direktlink - ]

28.09.2007, 17:37 Uhr

Der_Wanderer
Posts: 1229
Nutzer
...oder MonkeyScript LUA kompatibel zu machen.
Wird viel LUA funktionalität benötigt ?
Kannst du mal ein kurzes Codebeispiel posten ?


--
Thilo Köhler, Author von:
HD-Rec, Sweeper, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ScreenCam, PerlinFX, MapEdit, TK AB3 Includes und viele mehr...
Homepage: http://www.hd-rec.de


[ - Antworten - Zitieren - Direktlink - ]

10.10.2007, 10:29 Uhr

bruZard
Posts: 307
Nutzer
Sorry dass ich mich solange nicht gemeldet habe. Zu Deiner Frage: Ja, es gibt wahnsinnig viel LUA Code, da das Game im Prinzip nur eine Engine zur Verfügung stellt welche per LUA gesteuert wird. Selbst das öffnen des Screens wird durch LUA initiiert.

Beispiel:

BlitzMax Code
code:
lua.AddFunction(lua_Screen, "Screen")


Function lua_Screen:Int(ls:Byte Ptr)
  Local result:Byte = False

  Local width:Int = LUA.CheckNumber(1)
  Local height:Int = LUA.CheckNumber(2)
  Local depth:Int = LUA.ChjeckNumber(3)
  
  grp:TGraphics = Graphics(width, height, depth)

  If grp <> Null Then result = True
  LUA.ReturnBooleanToLua(result)

  Return 1
End Function


LUA
code:
if(Screen(1024, 768, 0)) then
  MainMenu()
else
 -- Fehler ausgeben
end

--
Wer glaubt dass Volksvertreter das Volk vertreten, der glaubt auch dass Zitronenfalter Zitronen falten

[ - Antworten - Zitieren - Direktlink - ]

10.10.2007, 13:50 Uhr

Der_Wanderer
Posts: 1229
Nutzer
Aha, interessant.

Ich bin gerade am überlegen, wie ich MonkeyScript generalisieren und abkapseln kann, sodass man es als universale Scripting Sprache benutzen kann.

Wie editieret man LUA Scripte ? In einem simplen Texteditor ?
Was passiert, wenn ein Fehler in einem LUA script ist ?
Wird das komplette Porgamm angehalten, kommt ein Requester etc. ?

Das würde mich alles interessieren. Kannst du da nochwas drüber schreiben ?


--
Thilo Köhler, Author von:
HD-Rec, Sweeper, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ScreenCam, PerlinFX, MapEdit, TK AB3 Includes und viele mehr...
Homepage: http://www.hd-rec.de


[ - Antworten - Zitieren - Direktlink - ]

10.10.2007, 14:52 Uhr

bruZard
Posts: 307
Nutzer
Zum Verständnis: Ich kann hier nur über die LUA Module (lua.mod und luascript.mod) für BlitzMax schreiben!

In BlitzMax importiere ich zunächst das entsprechende Modul und erzeuge mir dann ein Objekt vom Typ TLuaScriptEngine.
code:
Global lua:TLuaScriptEngine = New TLuaScriptEngine

Danach kann ich auf die Methoden des Objekts "lua" zurückgreifen.
In BlitzMax selbst erstelle ich Funktionen welche ich mittels der entsprechenden Methode für den Lua Interpreter bekannt mache.
code:
lua.AddFunction(<Name_der_BlitzMax_Funktion>, <Wie_die_Funktion in LUA heissen_soll>)

Desweiteren kann man natürlich auch Funktionen in Lua aufrufen, Werte übergeben, oder Lua als Konfigurationsscript für das eigene Programm verwenden etc.
Das Lua extrem flexibel und erfolgreich ist zeigt vielleicht auch die Tatsache dass ein Blockbuster wie World of Warcraft die Sprache für Modding-Geschichten verwendet. Praktisch die gesamte UI und Steuerungsgeschichten des Games werden über LUA gesteuert.

Zu Deinen Fragen:

Lua-Scripte sind einfach nur Textdateien, diese lade ich entweder zur Laufzeit mittels der Methode lua.RunScriptFile(scriptfile:String) oder aber ich generiere zur Laufzeit Lua-Source und führe diesen mittels lua.RunScript(script_text:String) aus.

Fehler werden von Lua auf einen Stack gelegt, es ist Aufgabe des Programms welches Lua nutzt diesen Stack abzufragen und entsprechend auf die Fehler zu reagieren. In keinem Fall wird das Programm angehalten.

Ich kann Dir nur die Dokumentation auf http://www.lua.org empfehlen.
--
Wer glaubt dass Volksvertreter das Volk vertreten, der glaubt auch dass Zitronenfalter Zitronen falten

[ - Antworten - Zitieren - Direktlink - ]

12.10.2007, 11:04 Uhr

Der_Wanderer
Posts: 1229
Nutzer
Sehr interessant, danke Bruzard.

Dann gibts wohl bald eine integrierte Scriping Sprache für AB3!

--
Thilo Köhler, Author von:
HD-Rec, Sweeper, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ScreenCam, PerlinFX, MapEdit, TK AB3 Includes und viele mehr...
Homepage: http://www.hd-rec.de


[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > LUA [ - Suche - Neue Beiträge - Registrieren - Login - ]


.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten.
.