ChaosConsole
Übersicht

![]() |
hamZtaAdministratorBetreff: ChaosConsole |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hey!
Hab die letzten zwei Tage was praktisches (hoffentlich) gebastelt: Eine Console, ähnlich denen aus Quake oder CS zum einfachen Einbinden und Debuggen zur Laufzeit. ~ Features ~
~ Konsolenbefehle ~
$obj.field als Argument gibt den Wert des Feldes field zurück. $obj.field[index] als Argument gibt den Wert des Arrays field an der Stelle index zurück Lässt man bei Arrays den Operator [index] weg so wird der Inhalt des Arrays als eine Liste der Form "[0, 1, 2, 3, ...]" zurückgegeben. ~ Beispiel ~ BlitzMax: [AUSKLAPPEN] SuperStrict Eingaben/Ausgaben der Konsole: Code: [AUSKLAPPEN] ~ ChaosConsole ~
Version: 0.1-rel_1 ----------------------------------------------------------- Registered object 'console' Registered object 'ball1' > list Registered objects: - ball1:TBall - console:TChaosConsole Registered functions: > dump ball1 Object ball1:TBall _colB:Byte = 146 _colG:Byte = 38 _colR:Byte = 177 _rad:Int = 50 _x:Int = 429 _y:Int = 163 > set ball1._rad 70 Set 'ball1._rad' to '70' > ball1.changeColor > ball1.changeColor > print $ball1._rad 70 > create TBall ball2 Created new object from type 'TBall' > set ball2._rad $ball1._rad Set 'ball2._rad' to '70' > list Registered objects: - ball1:TBall - ball2:TBall - console:TChaosConsole Registered functions: > print "Hallo! :)" Hallo! :) > save consolelog.txt Ich liste also erstmal auf, welche Objekte bei der Konsole registriert sind, in unserem Fall ball1 und console. Letzteres wird automatisch registriert und ist die Referenz auf die Konsole selbst. Ersteres ist unser Objekt ball1 welches wir ja im BlitzMax-Source erstellt haben. Dann lasse ich mir mittels "dump ball1" alle Felder des Objekts ausgeben. Mit "set ball1._rad 70" erhöhe ich den Radius des Kreises auf 70. Mit "print $ball1._rad" rufe ich unsere definierte Funktion "consolePrint" auf und zwar mit dem Wert des Feldes _rad der Instanz ball1 (um an den Wert des Feldes zu kommen brauchen wir das $-Zeichen). Dann erstelle ich eine neue Instanz des Types TBall und nenne sie "ball2". Mit "set ball2._rad $ball1._rad" setze ich den Radius des neuen Kreises ebenfalls auf 70. Ich lasse mir nochmal alle Objekte auflisten, jetzt taucht auch ball2 in der Liste auf. Dann grüße ich noch recht freundlich und speichere den Inhalt der Konsole in einer Datei ![]() ~ Tasten ~ Ich hab mir Mühe gegeben, das Arbeiten mit der Konsole so komfortabel wie möglich zu machen: Die Eingabe funktioniert ganz normal per Tastatur. Mit Links bzw. Rechts kann man den Cursor bewegen, mit Backspace oder Delete wie gewohnt löschen. Mit Home/Pos1 springt man an den Anfang der Zeile, mit End ans Ende. Per Page Up/Page Down kann man in der Konsole scrollen. Mit Rauf/Runter kann man in der Befehlshistory blättern, alle Befehle die man mit Enter abschickt, werden gespeichert und müssen so nicht doppelt getippt werden. ~ ToDo ~
~ Updates ~ Zitat: 0.2-rel_1
- New command: print <arg1> <arg2> ..., replaces "get" - New command: assert <value1> <value2> <msg>, compares two values and breaks on difference. - New command: run <filename>, executes a file - Support for one-dimensional arrays added (e.g. set obj.field[index] value) - ChaosConsole now automatically breaks long lines 0.1-rel_1 - Initial Release ~ Download ~ Modul, inkl. Dokumentation, Beispiel und Source: Hier! Vielen Dank für die Aufmerksamkeit, um Feedback wird gebeten ![]() lg, hamZta |
||
- Zuletzt bearbeitet von hamZta am Mo, Jul 27, 2009 19:56, insgesamt 2-mal bearbeitet
![]() |
MVB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Kann ich sehr gut gebrauchen und scheint sehr gut zu funktionieren, soweit ich das bisher testen konnte. Danke! | ||
aquamonit.de|BlitzMax|MaxGUI |
![]() |
hamZtaAdministrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Update 0.2-rel_1
Zusammengefasst die Änderungen:
|
||
Blog. |
![]() |
hamZtaAdministrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Update 0.3-rel_1
Gesamter Rewrite des Parserteils. Der Parser wurde ausgetauscht, die Console basiert nun auf der flexiblen und schnellen Sprache Lua die in vielen modernen Spielen zum Einsatz kommt. Alle Sachen die man in der Konsole eingibt werden von Lua ausgewertet und - wenn fehlerfrei - ausgeführt. Man kann z.B. direkt in der Console Funktionen definieren, Bedingungen auswerten, Schleifen durchlaufen und und und. Des weiteren natürlich externe Lua-Skripte ausführen und eigene Funktionen aufrufen. Natürlich hat man immer noch Zugriff auf die alten Features der Console (hauptsächlich Zugriff auf Objekte). Sollte jemand in seinem Projekt bereits Lua verwenden so bietet sich die Möglichkeit, die Console per einfachem Methodenaufruf an den eigenen Lua-State anzubinden. Alle nötigen internen Hilfsfunktionen und Einstellungen werden dann automatisch erstellt bzw. vorgenommen. Nutzt man diese Möglichkeit, so hat man damit Vollzugriff auf alle in den eigenen Lua-Skripten definierten Funktionen, Variablen und Tabellen. Dabei werden Ausgaben aus Lua heraus (Mit print oder io.write) direkt in die Console umgeleitet. Von der Verwendung her hat sich wenig geändert, ein Beispiel liegt wieder bei. Zusätzlich kann man jetzt noch eine eigene Schriftart verwenden, einfach mit myConsole.setFont(<TImageFont>) setzen. ChaosConsole hängt sich dabei nondestruktiv in den Zeichenprozess ein, alle Änderungen an Blendmodi, Farben, Schriften oder Skalierungen werden nach dem Zeichnen wieder rückgängig gemacht. ~ Befehle in Konsole und Luaskripten ~
~ Beispiele ~ ccObjToTable(instanz, tablename): Hat man eine Instanz des Types TTest: BlitzMax: [AUSKLAPPEN] Type TTest und ruft dann in der Konsole "ccObjToTable("myTest", "luaMyTest")" (inkl. Anführungsstriche um die Argumente!) dann erhält man eine Lua-Table mit den Werten aus der Instanz. In der Console "print("Name: " .. luaMyTest._name)" spuckt damit "Name: Testtype" aus. Achtung: Die erstellte Tabelle ist nur ein Abbild der Instanz, die beiden Objekte sind (noch) nicht miteinander verknüpft. Änderungen wirken sich also nicht auf beide aus. Auch Methoden können noch nicht aufgerufen werden. Beispiel aus dem Sample: Code: [AUSKLAPPEN] ~ ChaosConsole ~
Version: 0.3-rel_1 Lua: Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio ----------------------------------------------------------- Registered object 'console' Registered object 'ball1' > ccObjDump("ball1") Object ball1:TBall _colB:Byte = 146 _colG:Byte = 38 _colR:Byte = 177 _rad:Int = 50 _x:Int = 429 _y:Int = 163 > ccObjToTable("ball1", "luaBall") > print(luaBall) table: 002DFA38 > print(luaBall._x) 429 > if (tonumber(luaBall._x) > 400) then luaBall._x = 400 end > print(luaBall._x) 400 > if (tonumber(ccObjGet("ball1", "_x")) > 400) then ccObjSet("ball1", "_x", 400) end -- so ist's richtig ;) > ccObjDump("ball1") Object ball1:TBall _colB:Byte = 146 _colG:Byte = 38 _colR:Byte = 177 _rad:Int = 50 _x:Int = 429 _y:Int = 163 > ccObjSet("ball1", "_r", 100) Error setting field value: No such field '_r' > ccObjSet("ball1", "_rad", 100) > for i=1,5 do print("Schleife!") end Schleife! Schleife! Schleife! Schleife! Schleife! > print(5+(8*9.43)+math.sin(87.434)*10) 75.379539814151 > ccSave("output.txt") ~ Download ~ Download gibt's hier Kompiliert für Windows und MacOS (PPC und Intel), Linux folgt. |
||
Blog. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group