FURWARE text/Snippets/de

Diese Seite beinhaltet verschiedene nützliche Code-Schnipsel (Funktionen, Konstanten), die die Arbeit mit FURWARE_text wesentlich angenehmer machen.
== Grundlegende Funktionen ==
Die Funktionen in diesem Abschnitt sind Wrapper um die einzelnen FURWARE_text-Befehle. Sie wurden so entworfen, dass sie den folgenden Anforderungen genügen:
* Die Funktionen sollen in sich abgeschlossen sein. Das heißt, dass du auch nur diejenigen Funktionen kopieren kannst, die du wirklich benötigst und sie werden funktionieren.
* Die Funktionen (und deren Parameter) sollen selbsterklärend sein. Das heißt, dass sie auch direkt als eine Kurzreferenz für den Befehl dienen sollen, den sie ausführen.
Dass die Funktionen in sich abgeschlossen sind bedeutet auch, dass jede der Funktionen einen llMessageLinked(...)-Aufruf enthält. Das Ziel dieser Aufrufe ist hier auf LINK_SET (also das gesamte Linkset) gesetzt. Falls nötig, ändere dieses Ziel bitte in deinen Skripten.
fwSetText(string text) {
 llMessageLinked(LINK_SET, 0, text, "fw_data");
}
fwSetBoxText(string box, string text) {
 llMessageLinked(LINK_SET, 0, text, "fw_data:" + box);
}
fwSetStyle(string style) {
 llMessageLinked(LINK_SET, 0, style, "fw_conf");
}
fwSetBoxStyle(string box, string style) {
 llMessageLinked(LINK_SET, 0, style, "fw_conf:" + box);
}
fwSetDefaultStyle(string target, string style) {
 // "target" darf leer, "root" oder "nonroot" sein.
 llMessageLinked(LINK_SET, 0, style, "fw_defaultconf:" + target);
}
fwSetVariable(string name, string value) {
 llMessageLinked(LINK_SET, 0, value, "fw_var:" + name);
}
fwAddBox(string name, string parent, integer x, integer y, integer w, integer h, string text, string style) {
 llMessageLinked(LINK_SET, 0, text, "fw_addbox: " +name + ":" + parent + ":"+
 (string)x + "," + (string)y + "," + (string)w + "," + (string)h + ":" + style);
}
fwDelBox(string name) {
 llMessageLinked(LINK_SET, 0, "", "fw_delbox:" + name);
}
fwTouchQuery(integer linkNumber, integer faceNumber, string userData) {
 llMessageLinked(LINK_SET, 0, userData, "fw_touchquery:" + (string)linkNumber + ":" + (string)faceNumber);
}
list fwTouchReply(string replyString) {
 list tokens = llParseStringKeepNulls(replyString, [":"], []);
 return [
 llList2String(tokens, 0), llList2Integer(tokens, 1), llList2Integer(tokens, 2),
 llList2String(tokens, 3), llList2Integer(tokens, 4), llList2Integer(tokens, 5),
 llDumpList2String(llDeleteSubList(tokens, 0, 5), ":")
 ];
}
fwSetNotify(integer enabled) {
 string s = "off"; if (enabled) s = "on";
 llMessageLinked(LINK_SET, 0, s, "fw_notify");
}
fwMemory() {
 llMessageLinked(LINK_SET, 0, "", "fw_memory");
}
fwReset() {
 llMessageLinked(LINK_SET, 0, "", "fw_reset");
}
=== Beispiele ===
Die oben aufgeführen Funktionen erlauben dir zwar die meisten Befehle einfacher zu verwenden, aber einige Details müssen dennoch von Hand erledigt werden, beispielsweise das Angeben von Textstil-Konfigurationen. Die folgenden Zeilen geben dir ein paar Beispiele für die Verwendung der Funktionen.
// Setzt den Text aller Boxen in allen Sets.
fwSetText("Hello world!");
// Setzt den Text der Box "SomeBox".
fwSetBoxText("SomeBox", "This is some box!");
// Setzt den Standard-Stil aller Boxen auf color=red, align=center (der nächste Abschnitt zeigt, wie man dies schöner erledigen kann).
fwSetDefaultStyle("", "c=red;a=center");
// Füge eine Box "NewBox" mit "ExistingBox" als Parent hinzu.
fwAddBox("NewBox", "ExistingBox", 2, 2, 10, 5, "Some initial text", "");
// Lösche eine Box.
fwDelBox("NewBox");
// Sende eine Touch Query aus dem touch_start(...)-Event heraus.
touch_start(integer num) {
 fwTouchQuery(llDetectedLinkNumber(0), llDetectedTouchFace(0), "Arbitrary user data goes here");
}
// Verarbeite eine "Touch Reply"-Antwort im link_message(...)-Event.
link_message(integer sender, integer num, string str, key id) {
 if (id == "fw_touchreply") {
 list result = fwTouchReply(str);
 // Die Liste "result" enthält jetzt die Antwort als [boxName, boxRelativeX, boxRelativeY, rootName, absoluteX, absoluteY, userData].
 // "boxName" ist leer, wenn die Touch Query ungültig war.
 }
}
== Noch angenehmere Verwendung ==
Die Funktionen im letzten Abschnitt sind lediglich Wrapper um die FURWARE_text-Befehle, allerdings muss du weiterhin Dinge wie Stileinstellungen selber schreiben und dir die verschiedenen Optionen und deren Werte merken. Die folgenden Konstanten und Funktionen nehmen dir einen Teil dieser Arbeit ab (auch hier gilt, dass du nur die Teile kopieren musst, die du tatsächlich benötigst – auch um Speicher zu sparen!).
// === Farben (colors) ===
string COLOR_DEFAULT = "c=def;";
// Graustufen.
string COLOR_WHITE = "c=white;";
string COLOR_SILVER = "c=silver;";
string COLOR_GRAY = "c=gray;";
string COLOR_BLACK = "c=black;";
// Standardfarben.
string COLOR_RED = "c=red;";
string COLOR_GREEN = "c=green;";
string COLOR_BLUE = "c=blue;";
string COLOR_CYAN = "c=cyan;";
string COLOR_MAGENTA = "c=magenta;";
string COLOR_YELLOW = "c=yellow;";
// Dunkle Farben.
string COLOR_DARKRED = "c=darkred;";
string COLOR_DARKGREEN = "c=darkgreen;";
string COLOR_DARKBLUE = "c=darkblue;";
string COLOR_DARKCYAN = "c=darkcyan;";
string COLOR_DARKMAGENTA = "c=darkmagenta;";
string COLOR_DARKYELLOW = "c=darkyellow;";
// Beliebige RGB- (Rot, Grün, Blau) Farben.
string fwColorRGB(float red, float green, float blue) {
 return "c=" + (string)red + "," + (string)green + "," + (string)blue + ",1" + ";";
}
// Beliebige RGBA- (Rot, Grün, Blau, Alpha/Deckkraft) Farben.
string fwColorRGBA(float red, float green, float blue, float alpha) {
 return "c=" + (string)red + "," + (string)green + "," + (string)blue + "," + (string)alpha + ";";
}
// === Ausrichtung (alignment) ===
string ALIGN_DEFAULT = "a=def;";
string ALIGN_LEFT = "a=left;";
string ALIGN_CENTER = "a=center;";
string ALIGN_RIGHT = "a=right;";
// === Umbruch (wrapping) ===
string WRAP_DEFAULT = "w=def;";
string WRAP_WORD = "w=word;";
string WRAP_CHAR = "w=char;";
string WRAP_NONE = "w=none;";
// === Abschneiden von Leerzeichen am Anfang/Ende (trimming) ===
string TRIM_DEFAULT = "t=def;";
string TRIM_ON = "t=on;";
string TRIM_OFF = "t=off;";
// === Schriftarten (fonts) ===
string FONT_DEFAULT = "f=def;";
string FONT_ANDALE = "f=e31ce6e8-4117-7073-6aac-e6503034b4c5;";
string FONT_ANONYMOUS_PRO = "f=24c4ead5-04cd-1831-5fd9-ec48882e00b1;";
string FONT_ANONYMOUS_PRO_BOLD = "f=82c4fcac-3990-223c-286d-5bc92a258fbc;";
string FONT_DEJAVU = "f=f974fdfc-8fbd-2f29-2b38-3c34411c1fcc;";
string FONT_DEJAVU_BOLD = "f=5054fec3-1465-af8f-2fe5-e9507795c82a;";
string FONT_ENVYCODER = "f=a2ec2cf0-b207-db51-d4a1-f3f8d6684c07;";
string FONT_FREEFONT = "f=05f6f69e-8bdf-a824-a2cf-d91c9e371c23;";
string FONT_INCONSOLATA = "f=867288f9-940e-a7cf-ac7d-5596ea7fb2c5;";
string FONT_LIBERATION = "f=c992dfc4-0aca-02c8-bc01-8330e6db6f87;";
string FONT_LIBERATION_BOLD = "f=1494337d-5296-3c43-8f7c-45617448ec9a;";
string FONT_LUXI = "f=2d8f52d7-2220-2d7a-15b5-e685a9449e5c;";
string FONT_LUXI_BOLD = "f=03812794-535b-f546-6171-6bec5bf399be;";
string FONT_MONOFUR = "f=8fc63e35-a18f-e335-3936-e2ca196a944d;";
string FONT_NOVA = "f=2df8e09d-e1bd-d17f-6bec-b8d713790380;";
string FONT_PROFONT = "f=45a8e6f6-90e4-299d-d3bc-0bf4dbf170db;";
// === Rahmen (borders) ===
string BORDER_DEFAULT = "border=def;";
// Einige Beispiele für oft benutzte Rahmenstile.
string BORDER_ALL_SIDES = "border=tblr;";
string BORDER_ALL_SIDES_THICK = "border=tblr1;";
string BORDER_ALL_SIDES_DOUBLE = "border=tblr2;";
string BORDER_BOTTOM = "border=b;";
string BORDER_LEFT_RIGHT = "border=lr;";
// Eine allgemeinere Hilfsfunktion für Rahmen. Die Seiten-Parameter sind von oben beginnend im Uhrzeigersinn angeordnet.
string fwBorder(integer top, integer right, integer bottom, integer left, integer style) {
 string result = "border=";
 if (top) result += "t"; if (right) result += "r";
 if (bottom) result += "b"; if (left) result += "l";
 if (style) result += (string)style;
 return result + ";";
}
// === Stil-Variablen ===
// Lädt einen in einer fw_var(iable) gespeicherten Stil.
string fwStyle(string styleVariableName) {
 return "style=" + styleVariableName + ";";
}
=== Beispiele ===
Jeder Wert der Konstanten endet mit einem ";". Das erlaubt dir, die Konstanten einfach mit "+" zu verbinden und trotzdem gültige Strings für Stileinstellungen zu erhalten. Damit kannst du so etwas schreiben wie:
// Setzt die Farbe (color), den Umbruch (wrapping) und die Schriftart (font) für alle Boxen.
fwSetStyle(COLOR_YELLOW + WRAP_NONE + FONT_MONOFUR);
// Setzt die Standard-Stileinstellung für alle Boxen.
fwSetDefaultStyle("", COLOR_RED + ALIGN_CENTER);
// Füge eine Box mit einer Stileinstellung hinzu. Wir benutzen hier eine selbstspezifizierte RGB-Farbe.
fwAddBox("SomeBox", "ParentBox", 2, 2, 10, 5, "Some initial text", FONT_LUXI + fwColorRGB(0.5, 0.75, 0.0) + BORDER_ALL_SIDES);
// Speichere einen Stil-String in einer Variablen und benutze diesen.
fwSetVariable("MyStyle", FONT_MONOFUR + ALIGN_CENTER + BORDER_ALL_SIDES);
fwSetBoxStyle("BoxA", fwStyle("MyStyle"));
fwSetBoxStyle("BoxB", fwStyle("MyStyle"));