Mal wieder ein paar Dinge, an denen ich grade so arbeite:
Zum einen ist da YaME: Yet another Minecraft Engine. Hier ein kleines Video:
Ich wollte mal etwas in 3D mit XNA machen, und habe aus Spaß dieses Projekt angefangen. Momentan gibt es schon endlose Landschaften (zumindest bis der Speicher voll ist ;)), und die Framerate ist noch akzeptabel. Ich werde wohl zumindest noch bessere Grafiken und etwas Physik einbauen, zusammen mit einem besseren Renderer (Octrees und Occlusion Culling wäre super)
Dann bin ich grade dabei das LuaInterface um die Fähigkeiten der DLR zu erweitern. Microsoft hat mit .NET 4 eine bessere Interoperabilität mit Scriptsprachen eingebaut: Mit dem Schlüsselwort „dynamic“ kann man Objekte definieren, die z.B deren genaues „Aussehen“ erst zu Laufzeit festgelegt wird. Außerdem ist es damit möglich viele expliziete Konvertierungen wegzulassen. Das passt natürlich wunderbar zu Lua, und dem LuaInterface, mit dem man schon jetzt sehr elegant aus .NET auf Lua zugreifen kann. Kleines Code-Beispiel gefällig?
dynamic lua = new DynamicLua(); lua("function test() return 'hello from lua' end"); lua.test2 = new Action(() => return "hello from c#"); Console.WriteLine(lua.test()); Console.WriteLine(lua.test2());
Aus lua.DoString(„bla“) wird ein einfaches lua(„bla“), Variablen lassen sich einfach als Eigenschaften von lua verwenden, und die Zuweisung sowie der Aufruf von C#-Methoden ist einfach möglich. Obwohl jeder Aufruf einer Lua Method immer ein object-Array zurückgibt, ist eine einfache Verwendung in WriteLine() möglich, es wird automatisch in einen String umgewandelt.
Der größte Teil der „Magie“ wird dabei vom LuaInterface übernommen, ich habe dem ganzen nur ein modernes Gewand in Form eines „dynamischen“ Objektes übergestülpt. Momentan arbeite ich noch daran ein paar Fehler auszumerzen. Ich habe das LuaInterface überings auch mit dem .Net Framework 4 kompatibel gemacht. Je nachdem wie hartnäckig die Fehler noch sind, dürfte das Projekt bald fertig sein.
Als drittes überlege ich grade, so etwas wie key-mon für Windows zu schreiben. Die Linux Version ist sicher für Screencast ziemlich praktisch… Mit dem nKF und dem KeyboardButton Selektor sollte sich da was machen lassen… Ich bin echt schockiert, das es sowas für Windows nicht gibt?!
Ich habe mir irgendwie zu viel vorgenommen 🙁 Naja, bald sind ja Ferien, da habe ich dann genug Zeit mich darum mal zu kümmern.
Kann
lua.test2 = new Action(() => return "hello from c#");
Überhaupt funktionieren? Action Objekte können doch gar keine Rückgabewerte übergeben.Ist es möglich C# Funktionen zu erstellen die bei lua Aufruf Rückgabewerte bereitstellen?
Aufjedenfall cooles Projekt.
Gruß,
Christian
Stimmt, dass muss ein
Func
sein, eineAction
hat ja ebene gerade keinen Rückgabewert… Mit einemFunc
ist es aber überhaupt kein Problem, Rückgabewerte abzuliefern, kreuz und quer zwischen Lua und C#.Inzwischen ist das ganze übrigens relativ fertig und ist auf GitHub zu finden: https://github.com/nrother/dynamiclua
Mit
Func
geht alles wunderbar. Danke dir.Gruß,
Christian