easyvn
Version:
Modular visual novel engine for the web
36 lines (35 loc) • 1.29 kB
JavaScript
import { runNextRouteIfAny } from "./router";
let choiceResolver = null;
export function showChoice(choices) {
return new Promise((resolve) => {
const container = document.getElementById("choices");
const speaker = document.getElementById("speaker");
const dialogue = document.getElementById("dialogue");
if (!container)
return resolve();
if (speaker)
speaker.textContent = "Choice:";
if (dialogue)
dialogue.textContent = "";
container.innerHTML = "";
choiceResolver = resolve;
choices.forEach(([text, callback]) => {
const btn = document.createElement("button");
btn.textContent = text;
btn.className = "choice-btn";
btn.onclick = async () => {
container.innerHTML = "";
const result = callback();
if (result instanceof Promise)
await result;
await runNextRouteIfAny();
if (choiceResolver) {
const done = choiceResolver;
choiceResolver = null;
done(); // resume scene flow
}
};
container.appendChild(btn);
});
});
}