Newer
Older
import { gameFactsStore, addGameFactToFactArray } from "./gameFacts";
import Typewriter from "svelte-typewriter";
const dispatch = createEventDispatcher();
export let imageUrl: string;
export let title: string | undefined;
export let text: string;
$: usableOptions = options.filter((option) =>
isDialogOptionAllowedByGameFacts(option, $gameFactsStore)
);
const gameFactsAfterAddedFacts = addFacts.reduce(
(accFacts, factToAdd) => addGameFactToFactArray(factToAdd, accFacts),
$gameFactsStore
);
const gameFactsAfterRemovedFacts = removeFacts.reduce(
(accFacts, factToRemove) => accFacts.filter((f) => f !== factToRemove),
$gameFactsStore
);
$gameFactsStore = gameFactsAfterRemovedFacts;
}
}
function isDialogOptionAllowedByGameFacts(
option: DialogOption,
gameFacts: String[]
): boolean {
// Check if all required facts are given
if (Array.isArray(option.requiredFacts)) {
const isOk = option.requiredFacts.every((requiredFact) =>
gameFacts.includes(requiredFact)
);
if (!isOk) {
return false;
}
}
// Check if no forbidden facts are given
if (Array.isArray(option.forbiddenFacts)) {
const isOk = option.forbiddenFacts.every(
(forbiddenFact) => !gameFacts.includes(forbiddenFact)
);
if (!isOk) {
return false;
}
}
return true;
}
function handleDialogOptionClick(option: DialogOption): void {
{/if}
<img src={imageUrl} alt="Portrait" />
<div>
{#each usableOptions as option}
<button on:click={() => handleDialogOptionClick(option)}>
{option.text}
</button>