JirkaDellOro / FUDGE_Story

A FUDGE module for the easy development of interactive stories, visual novels and simple adventure games
https://jirkadelloro.github.io/FUDGE_Story/
7 stars 9 forks source link

Sending file path to a function, Auto-break-system request #32

Closed Hanhan139 closed 2 years ago

Hanhan139 commented 2 years ago

Ich habe in der Vorlesung diese Funktion bekommen, um problemlos eine längere Gruppe an dialog auszugeben:

for (let diaSequence of Object.values(RPGdia_Camp.description01) ) {
        await ƒS.Speech.tell(RPGcharacters.text, diaSequence);
        }; 

Mein vordefinierter dialog code sieht so aus:

namespace VNamespace {
  //Dialogue Companions at Camp
  export let RPGdia_Camp = {
    default: {
      T_default: "Default text."
    },

    description01: {
      T_00000: "It might feel a little unsafe to camp on entirely open terrain.",
      T_00001: "You aren't exactly hard to spot.",
      T_00002: "...Not that that is of any concern to you.",
      T_00003: "After all, no enemies have been added to the code.",
      T_00004: "...",
      T_00005: "...yet.",
    },
 };
}

Das hat super funktioniert, die gesamte description wurde ausgegeben. Jetzt wollte ich es als modifizierbare Funktion exportieren, dass es nicht nur spezifische pfade kann, sondern jeden den ich einspeise:

export async function fun_PrintBlockSpeech(path = RPGdia_Camp.default): Promise<void> {
        for (let diaSequence of Object.values(path)) {
            await ƒS.Speech.tell(RPGcharacters.text, diaSequence);
        };

Ich habe default werte zur Sicherheit angegeben, und wenn ich die Funktion aufrufe await fun_PrintBlockSpeech(); wird wie es soll der Default text ausgegeben. Aber wie kann ich den pfad übergeben? await fun_PrintBlockSpeech(RPGdia_Camp.description01); Geht nicht wegen dem variable type. Wie kann ich das umsetzen?

Ein auto-break system wäre auch toll, gibt es sowas zufällig? (Dass bei overflow im Text/Ab einer selbst definierten länge von dem string ein neues await Speech angelegt wird automatisch)

Rina14 commented 2 years ago

...was Zweiteres bzw. die CSS-Formatierungsfrage angeht, weil du auch via Discord gefragt hast, sollte position: absolute; und ein Einrücken durch bspw. left: 10px; es tun.

JirkaDellOro commented 2 years ago

Ich wollte mir das näher anschauen und habe dein VisualNovel-Repo geklont. Aber den Code dieses Issues finde ich darin nicht. Übersehe ich etwas?

Hanhan139 commented 2 years ago

Das Problem war die automatische Typisierung in Fudge Story. Also welchem typ (string, Object, number etc.) die Funktion sich abgeleitet hat. export async function fun_PrintBlockSpeech(path = RPGdia_Camp.default): Promise<void> { Der default Wert der path zugewiesen wird ist nicht der tatsächliche Pfad, sondern das speziefische Objekt:

 default: {
      T_default: "Default text."
    },

Heißt, wenn ich die Funktion aufzurufen versuche mit einem anderen Pfad gibt er einen Fehler und sagt, das der Typ nicht stimmt.

Um das zu lösen wird in der Funktion "path" direkt als Objekt definiert: (Funktionierende Lösung)

export async function fun_PrintBlockSpeech(path: Object = rpgDiaCamp.default): Promise<void> {
        for (let diaSequence of Object.values(path)) {
            await ƒS.Speech.tell(rpgCharacters.text, diaSequence); //funktion wird unterbrochen und es macht weiter
        }
    }

Also alles, was in geschweiften klammern definiert ist, siehe meinen Dialog im Obigen Beispiel, zählt as Typ Objekt, nicht string oder any.