Textdraw-System (0.1e)
https://youtu.be/9fnw4BdCeoM
https://www.youtube.com/watch?v=EiAyf3hbyhU
Meine Präsentation des System ist schon etwas länger her (SAMP GUI Library).
Ich habe mich dazu entschieden, dieses System zu veröffentlichen, da es immer wieder Personen gibt, die ein eigenes GUI nutzen wollen, aber dazu keine Erweiterungen wie Clientside Plugins bzw. diese nicht selbst schreiben wollen.
Zudem ist es für mich nicht mehr sinnvoll, da es Textdraw Limits gibt und ich ein GUI System erschaffen will, das eine gute Performance und neue Grafiken hat. Dazu eigne ich mir Modifizieren und C++ an, damit ich selbst dieses System als GUI als clientside & serverside Plugin nutzen kann.
Dieses Plugin läuft serverside und ist für Shoebill in Java geschrieben.
In der Readme auf GitHUB ist ein Beispielcode. Wie ihr in den Videos seht, ist vieles möglich und man kann es auch einfach erweitern (da das Grundgerüst komplett fertig gebaut ist).
Es gibt Components ("Komponenten") und Attachments. Die Komponente kann man einfach zu jeder Seite hinzufügen. Die Attachments kann man an die Komponenten anheften. Das ist Beispielsweise praktisch, wenn man eine Bar ("Balken") hat und dort einen Text als Attachment anheftet.
So kann man einfach viele Seiten dynamisch erstellen, dynamisch Komponenten und Attachments hinzufügen oder entfernen, Daten über Text/String Identifizierung setzen und entgegennehmen.
Weitere Infos kommen morgen, wollte das erstmal hinter mich bringen mit dem Release, bevor ich das vergesse
[tabmenu]
[tab='Informationen']
- Programmiersprache: Java (für das Shoebill Plugin)
- Programmierdauer: Einige Wochen, je nachdem, wie man Lust und Zeit hatte
- Bugs vorhanden: Ja, kenne bisher nur 2, aber bin mir nicht sicher, ob die jemand finden wird
- Probleme: Man sollte das Plugin bis jetzt nur mit anderen Shoebill Plugins oder Gamemodes nutzen, da bis Shoebill 2.0 draußen ist, es keine Detection gibt, wann von PAWN aus TextDraws erstellen wurden -> Man kann Probleme mit den Limits bekommen und das Plugin kann abschmieren
- Bedienung: Sehr einfach, jedenfalls kann man sich mit IntelliJ IDEA sehr schön daran ausprobieren
Fragen / Probleme? Immer her damit
[tab='Aufbau (Struktur + Technisch)'][subtab='Struktur']
Um das System dynamisch gestalten zu können, habe ich es vom kleinsten Baustein bis zum größten Baustein aufgebaut.
Doch was heißt das genau:
Das kleinste Element sind die Attachments.
Diese kann man den Components hinzufügen, welche man wiederum einem Container oder Page hinzufügen kann. Und diese wird dann einem Panel hinzugefügt. Alle Elemente sind modifizierbar, so z.B. auch das Design sehr einfach durch hinzufügen und standardisieren.
[subtab='Technisch']
Beim Programmieren geht man jedoch entgegengesetzt vor:
Zuerst erstellt man oder lädt die Referenz zum Panel. Jeder Spieler besitzt nur ein Standardpanel. Weiter wurde (noch?) nicht programmiert. Das Panel ist die Verwaltungsebene. Es speichert alle anderen Referenzen wie Seiten, Container, Überschrift usw...
Danach erstellt man eine Seite oder einen Dialog, welcher zum Panel hinzugefügt werden muss.
Danach kann man auf die Komponenten eingehen. Durch events kann man alles dynamisch und zeitlich unabhängig abspielen lassen. An die Komponente kann man schließlich noch Attachments anfügen und am Ende, falls man einen Dialog erstellt hat, sollte man diesen noch anzeigen.
[subtab='Besonderheiten']
Wie man auch am Beispiel des ColorPickers sieht, kann man das System auch ohne Dialoge und Seiten benutzen. Dazu muss man einfach einen Container erstellen und ihn dem Panel hinzufügen, damit der Container verwaltet werden kann.
[tab='Beispielcode Colorpicker']Beispielcode wie man den beim Colorpicker den rechten Rand mit den Farbboxen einfach erstellen konnte + handling dieser:
Color[] color = { .... }; // Farben hinzufügen
for (int y = 0; y < color.length; y++) {
Button button = Button.create(this, startX, startY + paddingY * y, width, "_", "Bar_Button_" + y);
Color tmp = color[y];
button.getButtonTextdraw().setBoxColor(tmp);
button.setClickHandler(handler -> {
clearColorContent();
createColorContent(tmp);
showColorContent();
});
button.toggleActivationEffect(false);
this.addButton(button);
}
Alles anzeigen
[tab='Beispielcode Dialog+MsgBox']
Beispielcode für einen Dialog:
Example how to create a panel with a list, a panelDialog and a MessageBox:
Panel panel = TextdrawSystem.createPanel(player);
TextdrawSystem.setPanel(player, panel);
panel.setDialogLayout(DialogLayout.FORM); //standard layout
panel.getLeftButton().setText(localizedStringSet.get(player, "Dialogs.Back")); //set Text of left button to the localizedStringSet of "Dialogs.Back". That means that we use a language plugin to support multiple languages and translate the string of an .yml file to the language of the player
panel.getRightButton().setText(localizedStringSet.get(player, "Dialogs.Next"));
//example panelDialog
PanelDialog panelDialog = TextdrawSystem.createPanelDialog(player);
// add a list to the dialog
List list = panelDialog.addList("optionList");
//create a listItem
//create group (code example)
list.addListItem("createGroup")
.setClickHandler(handler -> createGroupDialog());
//delete group (ce)
list.addListItem("deleteGroup")
.setClickHandler(handler -> deleteGroupDialog());
//edit group (ce)
list.addListItem("EditGroup")
.setClickHandler(handler -> editGroupDialog());
//disable the okButton (leftButton)
panelDialog.toggleOkButton(false);
//set caption of dialog
panelDialog.setCaption("Caption");
//display the dialog
panelDialog.show();
//MsgBox
MsgBox msgBox = new MsgBox(player, "Caption", "Message", groupName));
msgBox.setCancelButton("No");
msgBox.setOkButton("Yes");
msgBox.setClickOkHandler(msgBoxHandler -> createGroupDialog());
msgBox.setClickCancelHandler(msgBoxHandler -> createOptions());
msgBox.show(); //also possible to use the panel with content !
Alles anzeigen
[/tabmenu]
Download:
[hide]https://github.com/Alf21/textdraw-system[/hide]
Bitte lasst doch ein Kommentar da!