Automatisches Ink-Build on Engine build
This commit is contained in:
@@ -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 @@
|
|||||||
{"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":{}}
|
||||||
@@ -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"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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:
|
||||||
|
|||||||
Reference in New Issue
Block a user