Maniac Mansion Mania Forum

MMM-Werkzeugkiste => Technik => Thema gestartet von: Cmdr am 03. Oktober 2016, 10:42:05

Titel: Speichern mit Enter-Taste bestätigen
Beitrag von: Cmdr am 03. Oktober 2016, 10:42:05
Kennt ihr vielleicht eine Möglichkeit, beim Anlegen eines neuen Savegames, nach dem Eingeben des Names, dass dieses mit der Enter-Taste bestätigt werden kann?
Natürlich geht auch ein Klick auf den Ok-Button, aber die erste Intuition ist in dem Fall nunmal die Enter-Taste und mMn nach nicht schön, wenn dieses nicht funktioniert.

Das Problem an der Sache ist, dass die Methode on_key_pressed() im GlobalScript nicht aufgerufen wird, während man beim Benennen des Savegames ist.
Dadurch kann auch die dortige Implementierung, dass beim Drücken von Enter die Speicher-Methode aufgerufen wird, nichts nützen.
Titel: Re: Speichern mit Enter-Taste bestätigen
Beitrag von: KhrisMUC am 10. Oktober 2016, 01:04:36
1. GUI "gSavetextbox" öffnen
2. Textbox auswählen
3. Im Eventpanel das Event wie üblich mit einer Funktion verknüpfen
4. In die Funktion gSaveSave_OnClick(gSaveSave, eMouseLeft); schreiben.

Bei der Gelegenheit fiel mir übrigens auf, dass man Spielstände mit leerem Namen abspeichern kann. Diese lassen sich auch wieder laden, sehen aber in der Auswahl wie leere slots aus.

Deswegen sollte in der gSaveSave_OnClick-Funktion überprüft werden, ob buffer die Länge 0 hat, bevor gespeichert wird.

Edit: Ich hab das gerade in einem alten Mansion-Pack ausprobiert, und dort war bereits eine entsprechende Funktion eingebaut, die aber a) nicht aktiv war und b) den Code kopiert hat, anstatt gSaveSave_OnClick aufzurufen.
Titel: Re: Speichern mit Enter-Taste bestätigen
Beitrag von: Cmdr am 10. Oktober 2016, 09:10:18
Danke für die Antwort.  :)
Die Funktion gSaveTextBox_OnActivate(GUIControl *control) existierte zwar bereits, war aber nicht mit dem GUI verknüpft.
Auch der Inhalt ist mit der gSaveSave_OnClick(gSaveSave, eMouseLeft); identisch, bloß ohne Index-Abfrage.
Da macht es tatsächlich aufgrund von Coderedundanz mehr Sinn, an der Stelle die andere Save-Funktion aufzurufen, wie du vorgeschlagen hast.