013 ÜBUNG NODEBOX II:
In der vorherigen Übung haben wir bereits »Nodes« entworfen, die nicht der Standard-Kantenlänge 1x1x1 entsprechen. Jetzt wollen wir sehen, was noch alles möglich ist, wenn man mehrere Boxen innerhalb einer »Node« miteinander kombiniert:
ÜBUNGSMATERIAL HERUNTERLADEN:
Lade das benötigte Material »013 Übung Material« herunter und entpacke es. Der Ordner enthält neben ein paar Texturen auch Quellcode-Auszüge für die nachfolgenden Übungen.
Aufbau einer komplexen Node:
Komplexe »Nodes« sind im Grund nichts anderes als ineinander verschachtelte Node-Boxen. Im Beispiel unten setzt sich das fertige »item« aus 22 einzelnen Boxen verschiedener Größen zusammen:
Ein formaler Quellcode einer solchen »Node« sähe so aus (Auszug):
drawtype = "nodebox", node_box = { type = "fixed", fixed = { {x1, y1, z1, x2, y2, z2}, {x1, y1, z1, x2, y2, z2}, ... weitere Boxen bei Bedarf ... } }
Man reiht also einfach innerhalb des Befehls »node_box« so viele Boxen aneinander bis die gewünschte Form erscheint. Mit viel Geduld und etwas Überlegung kann man so sehr komplexe »Nodes« programmieren.
Software zum Generieren von Node-Boxen:
Weil die oben beschriebene händische Herangehensweise sehr aufwändig und fehleranfällig ist, gibt es zwei Werkzeuge, die Dich dabei unterstützen, verschachtelte Node-Boxen zu generieren:
Leider gibt es den »Node Box Editor« nur für Windows (wenn Du mit dem Kompilieren von Quelltexten vertraut bist, auch für Linux). Für MacOs nimm bitte den browserbasierten Dienst »Minetest Node Box Creator«.
VIDEOANLEITUNG ZUM »NODE BOX EDITOR«:
Hinweis: Falls Du beim Starten von »Node Box Editor« eine Meldung über eine fehlende .dll-Datei bekommst, musst Du noch »Microsoft Visual C++ Redistributable« installieren.
Komplexe Nodes programmieren:
Lege eine neue .lua-Datei an und programmiere die oben abgebildeten »Nodes«. Verwende die graue Steintextur. Die Figur ganz rechts besitzt dreidimensional wirkende »Stuckelemente« und einen oben umlaufenden Fries per »overlay«. Das Kreuz mit der goldenen Textur soll nicht direkt auf dem Boden stehen, sondern leicht darüber schweben.
Generiere die benötigten node_box-Anweisungen mit »Node Box Editor« oder »Minetest Node Box Creator« und füge sie per Copy & Paste in Deinen Quellcode ein.
Denke daran, in der init.lua-Datei mit dofile einen Verweis auf die neue .lua-Datei anzulegen.
Generiere die benötigten node_box-Anweisungen mit »Node Box Editor« oder »Minetest Node Box Creator« und füge sie per Copy & Paste in Deinen Quellcode ein.
Denke daran, in der init.lua-Datei mit dofile einen Verweis auf die neue .lua-Datei anzulegen.
Seltsame Schatteneffekte: paramtype
Wenn Du mit Deinen neuen »Nodes« in »Minetest« baust, gibt es seltsame Schatteneffekte?
»Nodes«, die nicht die Kantenlänge 1x1x1 haben, führen in »Minetest« oft dazu, dass der Lichteinfall fehlerhaft berechnet wird. Du kannst das verhindern, indem Du folgende Zeile einfügst:
»Nodes«, die nicht die Kantenlänge 1x1x1 haben, führen in »Minetest« oft dazu, dass der Lichteinfall fehlerhaft berechnet wird. Du kannst das verhindern, indem Du folgende Zeile einfügst:
paramtype = "light"
Nachteil: Dein Block wird insgesamt lichtdurchlässig.
Eine selection_box programmieren:
Wenn Du in »Minetest« eine »Node« mit dem Mauszeiger berührst, werden alle in der »Node« verwendeten Boxen mit einem kleinen schwarzen Rand angezeigt. Das sieht in unseren Beispielen für das Kreuz und die Bogen-Node mit dem Fries nicht sehr elegant aus:
Mit dem Befehl »selection_box« kann man abweichend vom Standardverhalten definieren, wie der schwarze Rand angezeigt wird.
Suche in der lokalen »lua_api.txt« mit STRG+F nach dem Begriff »selection_box«. Baue die Codezeilen so in Deine .lua-Datei ein, dass beim Anklicken des Kreuzes nur noch ein in Höhe, Breite und Tiefe passender dünner schwarzer Gesamtrahmen der »Node« angezeigt wird. Wie sähe die »selection_box« für die »Node« mit dem Fries aus?
Sieh Dir auch im heruntergeladenen Material die Datei »Ausschnitt Quellcode 2 - selection_box.txt« an. Sie zeigt Dir einen Ausschnitt des benötigten Quellcodes und soll Dir bei der Bewältigung der Aufgabe helfen.
Suche in der lokalen »lua_api.txt« mit STRG+F nach dem Begriff »selection_box«. Baue die Codezeilen so in Deine .lua-Datei ein, dass beim Anklicken des Kreuzes nur noch ein in Höhe, Breite und Tiefe passender dünner schwarzer Gesamtrahmen der »Node« angezeigt wird. Wie sähe die »selection_box« für die »Node« mit dem Fries aus?
Sieh Dir auch im heruntergeladenen Material die Datei »Ausschnitt Quellcode 2 - selection_box.txt« an. Sie zeigt Dir einen Ausschnitt des benötigten Quellcodes und soll Dir bei der Bewältigung der Aufgabe helfen.
Eine collision_box programmieren:
Eine »normale« Standard-Node mit Kantenlänge 1x1x1 stellt in »Minetest« für ein:e Spieler:in ein Hindernis dar; es ist in der Regel nicht möglich, einfach hindurch oder darüber zugehen. Hat man allerdings mit »node_box« die Größe der Box verändert, kann man oftmals über eine solche »Node« spazieren wie bei einer Treppenstufe (je nach Art der »node_box« natürlich).
Ist dieses Verhalten unerwünscht, muss man eine zusätzliche »collision_box« definieren. Suche in der lokalen »lua_api.txt« mit STRG+F nach dem Begriff »collision_box«. Baue die Codezeilen so in Deine .lua-Datei ein, dass man nicht mehr über die flache liegende »Node« aus der vorherigen Übungen gehen kann, aber problemlos das Kreuz durchschreitet.
Sieh Dir auch im heruntergeladenen Material die Datei »Ausschnitt Quellcode 3 - collision_box.txt« an. Sie zeigt Dir einen Ausschnitt des benötigten Quellcodes und soll Dir bei der Bewältigung der Aufgabe helfen.
Ist dieses Verhalten unerwünscht, muss man eine zusätzliche »collision_box« definieren. Suche in der lokalen »lua_api.txt« mit STRG+F nach dem Begriff »collision_box«. Baue die Codezeilen so in Deine .lua-Datei ein, dass man nicht mehr über die flache liegende »Node« aus der vorherigen Übungen gehen kann, aber problemlos das Kreuz durchschreitet.
Sieh Dir auch im heruntergeladenen Material die Datei »Ausschnitt Quellcode 3 - collision_box.txt« an. Sie zeigt Dir einen Ausschnitt des benötigten Quellcodes und soll Dir bei der Bewältigung der Aufgabe helfen.
Ein leuchtendes Kreuz programmieren:
Willst Du, dass Dein Kreuz im Dunkeln leuchtet? Dann füge diese Programmzeile für Deine »Node« ein:
light_source = 8
Erlaubt sind die Werte 0 – 14. Jetzt musst Du noch das Licht in Deiner Welt ausschalten. Öffne den SPIELCHAT (Buchstaben T auf der Tastatur) und setze folgenden Befehl ab:
/time 23:00
Geht nicht? Du erhältst die Rückmeldung You don't have permission to run this command (missing privilege: settime)? Dann gib Dir einfach das fehlende privilege im SPIELCHAT mit:
/grantme settime
Das Du Dir so einfach Rechte geben kannst, klappt natürlich nur, weil Du gerade in Deiner Welt im singleplayer-Modus unterwegs bist. In einer Server-Welt müsstest Du schon Administrator:in sein, um solche Aktionen durchführen zu dürfen.
Schon fertig?
Entwerfe passende Rezepte für Deine neuen »Nodes«. Überprüfe anschließend im FERTIGUNGSFÜHRER, ob sie funktionieren.
SCHON FERTIG?
Welcher Sound könnte für das Kreuz passen? Kannst Du einen eigenen Ton für das »Item« aufnehmen und einfügen?
SCHON FERTIG?
Du hast weitere »Items« für Deinen »Mod« programmiert. Also solltest Du auch den Screenshot aktualisieren, damit man sofort erkennt, was Dein »Mod« jetzt alles an Neuigkeiten zu bieten hat.
SCHON FERTIG?
Wie sieht es mit den Dateien »mod.conf« und »README.md« aus? Sind hier vielleicht Ergänzungen nötig?
MUSTERLÖSUNG: SO KÖNNTE ES AUSSEHEN
Versuche zunächst, eine eigene Lösung für die gestellten Aufgaben zu finden. Falls Du aber alleine nicht weiterkommst, kannst Du Dir unsere Musterlösung herunterladen.
Beachte: Da es sich um eine Musterlösung handelt, kann Dein Quellcode am Ende ganz anders aussehen. Das fängt schon bei den Ordner- und Dateinamen an, die Du für Deinen »Mod« gewählt hast. Solange Dein »Mod« aber funktioniert, ist eine Lösung so gut wie die andere ...
Beachte: Da es sich um eine Musterlösung handelt, kann Dein Quellcode am Ende ganz anders aussehen. Das fängt schon bei den Ordner- und Dateinamen an, die Du für Deinen »Mod« gewählt hast. Solange Dein »Mod« aber funktioniert, ist eine Lösung so gut wie die andere ...
Verwendung dieser Inhalte - auch in Auszügen - im Schulunterricht, der Jugendarbeit und im Bildungsbereich mit dem Vermerk »© multimediamobil – Region Süd« erlaubt.