1
Technik / Re: GUI-Interface wird eingeblendet, obwohl dies nicht erfolgen soll
« am: 04. Dezember 2024, 00:26:27 »Zitat
Am ehesten könnte ich mir vorstellen, dass das GUI an anderer Stelle wieder eingeschaltet wird.Dies.
Genauer wird es in der repeatedly_execute() im CustomDialogGui.asc wieder eingeschaltet:
Code: [Auswählen]
function repeatedly_execute()
{
if (CDG_options.reset_scrollstate) {
if (CDG_options.dialog_options_upwards) CDG_options.scroll_from =0;
else CDG_options.scroll_from = 1;
}
if (in_speech == true) {
in_speech = false;
if (CDG_options.hide_gui_while_dialog == true && gMain.Visible == false && gAction.Visible == false) {
gMain.Visible = true;
gAction.Visible = true;
}
}
}
Ohne trifftigen Grund bitte nicht an dem Script rumfummeln!Das Template bietet bereits die Option, das automatische ein- und ausschalten des GUIs bei den Dialogen abzustellen. In TemplateSettings.asc die Zeile
Code: [Auswählen]
CustomDialogGui.DialogGuiOptions[eDialogGui_hide_gui_while_dialog] = true;
suchen und auf false ändern. Daraus folgt natürlich, das man nun als Entwickler selbst dafür sorgen muss, das Interface für die Dialoge abzustellen.Was den Mauszeiger angeht: Der wird auch irgendwo wieder zurückgesetzt. Wo genau habe ich nicht rausfinden können. Eine schmutzigen Workaround habe ich dafür: Deklarier eine Globale Variable vom Typ bool im GlobalScript oder vorzugsweise in einem eigenen Script (welches in der Rangfolge über dem GlobalScript stehen muss):
Code: [Auswählen]
bool DialogCherylFinished;
export DialogCherylFinished;
Im Script Header dann:Code: [Auswählen]
import bool DialogCherylFinished;
damit die Variable überall sichtbar ist. Im Dialogscript setzt du die Variable dann auf true sobald der Dialog beendet werden soll. Im Raum selbst prüfst du dann in der Repeated_Execute-Funktion auf diese Variable, setzt deinen Code in den Block und setzt anschließend die Variable wieder auf false:Code: [Auswählen]
function room_RepExec()
{
if (DialogCherylFinished)
{
mouse.UseModeGraphic(eModePC);
mouse.ChangeModeHotspot(eModeWalkto, 0, 0);
DialogCherylFinished = false;
}
}
Dieser Codeblock wird dann erst nach dem Abschalten des Dialogs ausgeführt. Heißt: Der Dialog setzt erst den Mouse Cursor zurück und anschließend setzt du den Cursor wieder auf deine Grafik. Das kann den Effekt haben, dass für einen Moment der Cursor die Standardgrafik hat ehe er wieder deine Customgrafik hat. Von daher ist das auch nicht die Ideallösung.