Automatisches Ink-Build on Engine build

This commit is contained in:
2026-06-13 02:46:56 +02:00
parent d30ab97f13
commit 802f2bd34b
4 changed files with 64 additions and 2 deletions
+1 -1
View File
@@ -28,7 +28,7 @@ VAR quest_mushroom_done = false
- else: - else:
# color whisper # color whisper
Hallo! Ich bräuchte 10 Pilze für ein Rezept. Hättest du Lust, welche zu sammeln? TEST1 Hallo! Ich bräuchte 10 Pilze für ein Rezept. Hättest du Lust, welche zu sammeln?
* [Klar, ich helfe.] * [Klar, ich helfe.]
~ quest_mushroom_active = true ~ quest_mushroom_active = true
# color whisper # color whisper
+1 -1
View File
@@ -1 +1 @@
{"inkVersion":21,"root":[[["ev",{"VAR?":"quest_mushroom_done"},"/ev",{"->":".^.b","c":true},{"b":["\n","#","^color whisper","/#","^Danke nochmal für die Pilze. Das Rezept ist fast fertig.","\n",{"->":"ende"},{"->":"0.4"},null]}],["ev",{"VAR?":"quest_mushroom_active"},{"VAR?":"mushrooms_collected"},10,">=","&&","/ev",{"->":".^.b","c":true},{"b":["\n","#","^color whisper","/#","^Du hast ","ev",{"VAR?":"mushrooms_collected"},"out","/ev","^ Pilze dabei — mehr als genug!","\n","ev","str","^Hier, nimm sie.","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^Lass mich noch ein paar behalten.","/str","/ev",{"*":".^.c-1","flg":20},{"->":"0.4"},{"c-0":["\n","ev",true,"/ev",{"VAR=":"quest_mushroom_done","re":true},"#","^color whisper","/#","^Wunderbar, vielen Dank! Das wird ein gutes Süppchen.","\n",{"->":"ende"},{"#f":5}],"c-1":["\n","#","^color whisper","/#","^Wie du willst. Komm wieder, wenn du sie loswerden möchtest.","\n",{"->":"ende"},{"#f":5}]}]}],["ev",{"VAR?":"quest_mushroom_active"},"/ev",{"->":".^.b","c":true},{"b":["\n","#","^color whisper","/#","^Du hast schon ","ev",{"VAR?":"mushrooms_collected"},"out","/ev","^ von 10 Pilzen. Mach ruhig weiter.","\n",{"->":"ende"},{"->":"0.4"},null]}],[{"->":".^.b"},{"b":["\n","#","^color whisper","/#","^Hallo! Ich bräuchte 10 Pilze für ein Rezept. Hättest du Lust, welche zu sammeln?","\n","ev","str","^Klar, ich helfe.","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^Vielleicht später.","/str","/ev",{"*":".^.c-1","flg":20},{"->":"0.4"},{"c-0":["\n","ev",true,"/ev",{"VAR=":"quest_mushroom_active","re":true},"#","^color whisper","/#","^Danke! Ich warte hier.","\n",{"->":"ende"},{"#f":5}],"c-1":["\n","#","^color whisper","/#","^Schade. Komm gerne nochmal vorbei.","\n",{"->":"ende"},{"#f":5}]}]}],"nop","\n",["done",{"#n":"g-0"}],null],"done",{"ende":[["ev","str","^Bis dann","/str","/ev",{"*":".^.c-0","flg":20},{"c-0":["\n","#","^person_farewell","/#","end",{"#f":5}]}],null],"global decl":["ev",0,{"VAR=":"mushrooms_collected"},false,{"VAR=":"quest_mushroom_active"},false,{"VAR=":"quest_mushroom_done"},"/ev","end",null]}],"listDefs":{}} {"inkVersion":21,"root":[[["ev",{"VAR?":"quest_mushroom_done"},"/ev",{"->":".^.b","c":true},{"b":["\n","#","^color whisper","/#","^Danke nochmal für die Pilze. Das Rezept ist fast fertig.","\n",{"->":"ende"},{"->":"0.4"},null]}],["ev",{"VAR?":"quest_mushroom_active"},{"VAR?":"mushrooms_collected"},10,">=","&&","/ev",{"->":".^.b","c":true},{"b":["\n","#","^color whisper","/#","^Du hast ","ev",{"VAR?":"mushrooms_collected"},"out","/ev","^ Pilze dabei — mehr als genug!","\n","ev","str","^Hier, nimm sie.","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^Lass mich noch ein paar behalten.","/str","/ev",{"*":".^.c-1","flg":20},{"->":"0.4"},{"c-0":["\n","ev",true,"/ev",{"VAR=":"quest_mushroom_done","re":true},"#","^color whisper","/#","^Wunderbar, vielen Dank! Das wird ein gutes Süppchen.","\n",{"->":"ende"},{"#f":5}],"c-1":["\n","#","^color whisper","/#","^Wie du willst. Komm wieder, wenn du sie loswerden möchtest.","\n",{"->":"ende"},{"#f":5}]}]}],["ev",{"VAR?":"quest_mushroom_active"},"/ev",{"->":".^.b","c":true},{"b":["\n","#","^color whisper","/#","^Du hast schon ","ev",{"VAR?":"mushrooms_collected"},"out","/ev","^ von 10 Pilzen. Mach ruhig weiter.","\n",{"->":"ende"},{"->":"0.4"},null]}],[{"->":".^.b"},{"b":["\n","#","^color whisper","/#","^TEST1 Hallo! Ich bräuchte 10 Pilze für ein Rezept. Hättest du Lust, welche zu sammeln?","\n","ev","str","^Klar, ich helfe.","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^Vielleicht später.","/str","/ev",{"*":".^.c-1","flg":20},{"->":"0.4"},{"c-0":["\n","ev",true,"/ev",{"VAR=":"quest_mushroom_active","re":true},"#","^color whisper","/#","^Danke! Ich warte hier.","\n",{"->":"ende"},{"#f":5}],"c-1":["\n","#","^color whisper","/#","^Schade. Komm gerne nochmal vorbei.","\n",{"->":"ende"},{"#f":5}]}]}],"nop","\n",["done",{"#n":"g-0"}],null],"done",{"ende":[["ev","str","^Bis dann","/str","/ev",{"*":".^.c-0","flg":20},{"c-0":["\n","#","^person_farewell","/#","end",{"#f":5}]}],null],"global decl":["ev",0,{"VAR=":"mushrooms_collected"},false,{"VAR=":"quest_mushroom_active"},false,{"VAR=":"quest_mushroom_done"},"/ev","end",null]}],"listDefs":{}}
+59
View File
@@ -0,0 +1,59 @@
//! Build-Hook: kompiliert geänderte Ink-Dialoge automatisch beim Cargo-Build.
//!
//! Reines „Wann"-Stück — das eigentliche Bauen macht `tools/build-dialogues.sh`
//! (und bleibt von Hand aufrufbar). Hier melden wir Cargo nur, wann es uns
//! erneut ausführen soll, und stoßen das Skript an.
//!
//! Cargo führt build.rs ausschließlich dann erneut aus, wenn eine der unten
//! via `rerun-if-changed` gemeldeten Dateien sich ändert. Unveränderte
//! Rebuilds kosten also nichts; nur nach einer `.ink`-Änderung läuft
//! inklecate (inkrementell nur für die betroffene Datei).
use std::path::Path;
use std::process::Command;
fn main() {
let root = env!("CARGO_MANIFEST_DIR");
let script = Path::new(root).join("tools/build-dialogues.sh");
let ink_dir = Path::new(root).join("assets/interactions");
// Wann soll Cargo build.rs erneut ausführen?
println!("cargo:rerun-if-changed=tools/build-dialogues.sh");
println!("cargo:rerun-if-changed=tools/inklecate");
// Verzeichnis-mtime fängt neu hinzugekommene/gelöschte .ink-Dateien.
println!("cargo:rerun-if-changed=assets/interactions");
// Inhaltsänderungen einzelner .ink-Dateien einzeln melden.
if let Ok(entries) = std::fs::read_dir(&ink_dir) {
for entry in entries.flatten() {
let p = entry.path();
if p.extension().and_then(|s| s.to_str()) == Some("ink") {
println!("cargo:rerun-if-changed={}", p.display());
}
}
}
// Skript ausführen. Ausgabe einsammeln, damit ein Dialog-Fehler sichtbar
// wird (Cargo blendet Build-Script-stdout sonst aus).
match Command::new("bash").arg(&script).output() {
Ok(out) if out.status.success() => { /* still bei Erfolg */ }
Ok(out) => {
let stdout = String::from_utf8_lossy(&out.stdout);
let stderr = String::from_utf8_lossy(&out.stderr);
for line in stdout.lines().chain(stderr.lines()) {
println!("cargo:warning={line}");
}
panic!(
"Dialog-Build fehlgeschlagen — siehe Warnungen oben. \
Einzeln debuggen: ./tools/build-dialogues.sh"
);
}
Err(e) => {
// bash/Skript nicht startbar (z.B. fremdes OS): den Build nicht
// blockieren, nur warnen — die committeten .ink.json reichen.
println!(
"cargo:warning=Dialog-Build übersprungen ({e}). \
Bei Bedarf von Hand: ./tools/build-dialogues.sh"
);
}
}
}
+3
View File
@@ -17,6 +17,9 @@ schreiben, Skript laufen lassen, fertig. Die `.ink.json` landen direkt
neben den `.ink` und werden mit ins Repo eingecheckt, damit ein frischer neben den `.ink` und werden mit ins Repo eingecheckt, damit ein frischer
Clone ohne Toolchain spielbar ist. Clone ohne Toolchain spielbar ist.
**Automatisch beim Build:** `cargo build`/`cargo run` ruft dieses Skript
über `build.rs` selbst auf, sobald sich eine `.ink` geändert hat.
### inklecate ### inklecate
Das Skript sucht den Ink-Compiler in dieser Reihenfolge: Das Skript sucht den Ink-Compiler in dieser Reihenfolge: