014 ÜBUNG CONNECTED:
Ziel dieser Übung ist es, dass sich Blöcke mit Hilfe der Befehle »connected« und »disconnected« automatisch nach festen Regeln zu einer Einheit verbinden. Dies ist eine sehr nützliche Funktion zum Beispiel bei Zäunen:
ÜBUNGSMATERIAL HERUNTERLADEN:
connected-Befehl verwenden:
Sieh Dir das nachfolgende Video an und programmiere eine entsprechende »Node«, die sich nach vorne (Z-) und hinten (Z+) verbindet. Lege hierfür eine neue .lua-Datei an:
Du benötigst dafür den Befehl »connected«. Die Datei »Ausschnitt Quellcode connected.txt« aus dem heruntergeladenen Material zeigt Dir, wie der Befehl verwendet werden muss. Hier ein Auszug:
drawtype = "nodebox", node_box = { type = "connected", fixed = { -- hier Standardnodebox(en) definieren }, connect_back = { -- hier Nodebox(en) für Verbindung nach hinten definieren }, connect_front = { -- hier Nodebox(en) für Verbindung nach vorne definieren } }
Unter »fixed« legst Du das Standardaussehen der »Node« fest, falls keine Verbindungsoption zutrifft. »connect_back« und »connect_front« definieren, wie sich die »Node« wandelt, falls eine geeignete Verknüpfung nach vorne (Z-) oder hinten (Z+) gefunden wird. Mit »connects_right«, »connects_left«, »connect_top« und »connect_bottom« lassen sich weitere Ausrichtungen bestimmen.
Man kann bei allen genannten Befehlen eine oder gleich mehrere Boxen definieren, um das gewünschte Aussehen zu erhalten. Nutze Node Box Editor oder Minetest Node Box Creator, um die benötigten Boxen zu generieren.
Denke daran, in der init.lua-Datei mit »dofile« einen Verweis auf die neue .lua-Datei anzulegen.
Man kann bei allen genannten Befehlen eine oder gleich mehrere Boxen definieren, um das gewünschte Aussehen zu erhalten. Nutze Node Box Editor oder Minetest Node Box Creator, um die benötigten Boxen zu generieren.
Denke daran, in der init.lua-Datei mit »dofile« einen Verweis auf die neue .lua-Datei anzulegen.
Nodes verbinden sich nicht?
Bisher hast Du mit dem Befehl »connected« nur das äußere Erscheinungsbild der »Node« definiert. Aber »Minetest« weiß noch gar nicht, welche »Items« es miteinander verbinden soll. Hier kommt der Befehl »connects_to« ins Spiel. Wie er genau verwendet wird, findest Du in der Datei »Ausschnitt Quellcode connected.txt« beschrieben. Hier ein Auszug:
connects_to = { "default:desert_stone" }
Mit dieser Codezeile würde sich Deine »Node« jetzt zwar mit dem Block »desert_stone« verbinden, aber untereinander würden sich Deine »Nodes« noch immer nicht zusammenschließen. Denn dafür müsste unter »connects_to« auch der Name Deines »items« auftauchen:
connects_to = { "default:desert_stone", "dein_modname:dein_node_name" }
Du kannst beliebig viele »items« aufführen, zu denen sich verbunden werden soll. Auch ganze Objekt-Gruppen dürfen auftauchen:
connects_to = { "group:stone" }
»group:stone« macht alle Steine in »Minetest« zu Kontaktpartnern Deiner »Node«. Mit Gruppenangaben kannst Du elegant den Weg abkürzen, um Deine »Node« sich mit sich selber verbinden zu lassen. Definiere dafür einfach unter »groups« für Deinen Block unter anderem die Eigenschaft »stone« (beispielhaft):
groups = { stone = 1 }
Übrigens: Die Gruppennamen sind (fast) frei wählbar. Will sagen: Du kannst Dir eigene Namen wie »my_wall« für Gruppen ausdenken und passend bei »connects_to« und »groups« einsetzen:
connects_to = { "group:my_wall" } groups = { my_wall = 1 }
Was macht »connected« eigentlich genau?
Im Video oben sieht es so aus, als würde man mit dem Befehl »connected« einfach die Standard-Nodebox, die man unter »fixed« definiert hat, komplett durch anders geformte Node-Boxes ersetzen. In Wirklichkeit besteht »fixed« aber nur aus einer dünnen Platte, die in der Mitte eines Würfels sitzt (im Beispiel rot eingefärbt). Diese wird bei Bedarf um weitere Boxen, die nach vorne (Z-) und hinten (Z+) in den Raum ragen, erweitert (vgl. schwarze Umrandung):
Da man bei der Verwendung von »connected« immer um diese Standard-Nodebox herum konstruiert, kann man den Befehl in der Regel nur sinnvoll einsetzen, wenn diese erste Box symmetrisch um die x-y-z-Achse des Objektes angelegt wurde. Dann lässt sie sich problemlos in die Optik der weiteren Boxes integrieren.
Teste einmal, was passiert, wenn Deine fixed-Box dem oben genannten Kriterium nicht entspricht, also nicht symmetrisch um die x-y-z-Achse angelegt wurde.
Teste einmal, was passiert, wenn Deine fixed-Box dem oben genannten Kriterium nicht entspricht, also nicht symmetrisch um die x-y-z-Achse angelegt wurde.
Eine Zaun-Node programmieren:
Sieh Dir das nachfolgende Video an und programmiere eine entsprechende Zaun-Node in der vorhin angelegten .lua-Datei. Die Programmierung entspricht im Wesentlichen dem Quellcode aus der obigen Aufgabe. Aber jetzt verbindet sich die Node nicht nur nach vorne und hinten, sondern auch nach rechte und links:
disconnected-Befehl verwenden:
Sieh Dir das nachfolgende Video an und programmiere eine entsprechende »Node« in der vorhin angelegten .lua-Datei. Du benötigst dafür den Befehl »disconnected«. Ziel ist es, dass das Kreuz in der »Mitte« des Würfels steht, falls keine passende Kontakt-Node gefunden wird. Gibt es aber eine Kontakt-Node, verschiebt sich das Kreuz zur Kontakt-Node. Die Datei »Ausschnitt Quellcode disconnected.txt« aus dem heruntergeladenen Material zeigt Dir, wie der Befehl »disconnected« zu verwenden ist und – ganz wichtig – welche Codezeile Du für diese Übung unbedingt weglassen musst:
Was passiert, wenn es »zu viele« Kontakt-Nodes gibt?
SCHON FERTIG?
Entwerfe passende Rezepte für Deine neuen »Nodes«. Überprüfe anschließend im FERTIGUNGSFÜHRER, ob sie funktionieren.
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.