add dice sounds to all rollers

This commit is contained in:
RussellChamp committed 2021-08-18 22:37:42 -04:00
1 parent fe1074e863
commit d9a976c5f1
12 files changed
+66 -21

No files matched your search

+23 -13
View File
@@ -17,17 +17,27 @@
let rollThemBones = new Audio("https://soundbible.com/mp3/Shake And Roll Dice-SoundBible.com-591494296.mp3"); let rollThemBones = new Audio("https://soundbible.com/mp3/Shake And Roll Dice-SoundBible.com-591494296.mp3");
let playSounds = true; let playSounds = true;
let timeout: NodeJS.Timeout;
function setSoundOptions(event: any) { function setSoundOptions(event: any) {
playSounds = event.detail.soundEnabled; playSounds = event.detail.soundEnabled;
} }
function roll(event: any) { function handleRoll(event: any) {
// console.log("called roll with", details); clearTimeout(timeout);
rollThemBones.pause(); rollThemBones.pause();
rollThemBones.currentTime = 0; rollThemBones.currentTime = 0;
if (playSounds) { if (playSounds) {
rollThemBones.volume = 0.6 + 0.4 * Math.random(); // vary the volume
rollThemBones.playbackRate = 0.6 + 0.8 * Math.random(); // vary the playback rate
rollThemBones.play(); rollThemBones.play();
let playTime = rollThemBones.duration * 1000 * (0.3 + 0.7 * Math.random()); // vary the playback duration
console.log(`rolling die at volume ${rollThemBones.volume}, playbackRate ${rollThemBones.playbackRate}, play duration ${playTime}`);
timeout = setTimeout(() => {
rollThemBones.pause();
}, playTime);
} }
} }
</script> </script>
@@ -40,37 +50,37 @@
<hr /> <hr />
<Accordion> <Accordion>
<AccordionItem active header="Creatures"> <AccordionItem active header="Creatures">
<CreatureRoller on:makeSomeNoise={roll} /> <CreatureRoller on:roll={handleRoll} />
</AccordionItem> </AccordionItem>
<AccordionItem header="Dangers"> <AccordionItem header="Dangers">
<DangerRoller /> <DangerRoller on:roll={handleRoll} />
</AccordionItem> </AccordionItem>
<AccordionItem header="Details"> <AccordionItem header="Details">
<DetailsRoller /> <DetailsRoller on:roll={handleRoll} />
</AccordionItem> </AccordionItem>
<AccordionItem header="Discoveries"> <AccordionItem header="Discoveries">
<DiscoveryRoller /> <DiscoveryRoller on:roll={handleRoll} />
</AccordionItem> </AccordionItem>
<AccordionItem header="Dungeons"> <AccordionItem header="Dungeons">
<DungeonRoller /> <DungeonRoller on:roll={handleRoll} />
</AccordionItem> </AccordionItem>
<AccordionItem header="Followers"> <AccordionItem header="Followers">
<FollowerRoller /> <FollowerRoller on:roll={handleRoll} />
</AccordionItem> </AccordionItem>
<AccordionItem header="Kingdoms"> <AccordionItem header="Kingdoms">
<KingdomRoller /> <KingdomRoller on:roll={handleRoll} />
</AccordionItem> </AccordionItem>
<AccordionItem header="NPCs"> <AccordionItem header="NPCs">
<NpcRoller /> <NpcRoller on:roll={handleRoll} />
</AccordionItem> </AccordionItem>
<AccordionItem header="Places"> <AccordionItem header="Places">
<PlaceRoller /> <PlaceRoller on:roll={handleRoll} />
</AccordionItem> </AccordionItem>
<AccordionItem header="Regions"> <AccordionItem header="Regions">
<RegionRoller /> <RegionRoller on:roll={handleRoll} />
</AccordionItem> </AccordionItem>
<AccordionItem header="Steadings"> <AccordionItem header="Steadings">
<SteadingRoller /> <SteadingRoller on:roll={handleRoll} />
</AccordionItem> </AccordionItem>
</Accordion> </Accordion>
<Footer /> <Footer />
+1 -1
View File
@@ -11,7 +11,7 @@
function roll(event: Event) { function roll(event: Event) {
let creature = rollCreature(); let creature = rollCreature();
rollResults = [{ creature, timestamp: formatDate(new Date(), "P kk:mm:ss") }, ...rollResults]; rollResults = [{ creature, timestamp: formatDate(new Date(), "P kk:mm:ss") }, ...rollResults];
dispatch("makeSomeNoise", { component: "CreatureRoller" }); dispatch("roll");
} }
</script> </script>
+4
View File
@@ -1,8 +1,11 @@
<script lang="ts"> <script lang="ts">
import { format as formatDate } from "date-fns"; import { format as formatDate } from "date-fns";
import { createEventDispatcher } from "svelte";
import { Button, Icon } from "sveltestrap"; import { Button, Icon } from "sveltestrap";
import { Danger, rollDanger } from "../rollers/dangers"; import { Danger, rollDanger } from "../rollers/dangers";
const dispatch = createEventDispatcher();
export let rollResults: { danger: Danger; icon: string; timestamp: string }[] = []; export let rollResults: { danger: Danger; icon: string; timestamp: string }[] = [];
function roll(event: Event) { function roll(event: Event) {
@@ -16,6 +19,7 @@
? "emoji-neutral" ? "emoji-neutral"
: ""; : "";
rollResults = [{ danger, icon, timestamp: formatDate(new Date(), "P kk:mm:ss") }, ...rollResults]; rollResults = [{ danger, icon, timestamp: formatDate(new Date(), "P kk:mm:ss") }, ...rollResults];
dispatch("roll");
} }
</script> </script>
+4
View File
@@ -1,5 +1,6 @@
<script lang="ts"> <script lang="ts">
import { format as formatDate } from "date-fns"; import { format as formatDate } from "date-fns";
import { createEventDispatcher } from "svelte";
import { Button, Icon } from "sveltestrap"; import { Button, Icon } from "sveltestrap";
import { import {
rollAbility, rollAbility,
@@ -25,6 +26,8 @@
import DieIcon from "./DieIcon.svelte"; import DieIcon from "./DieIcon.svelte";
const dispatch = createEventDispatcher();
let rollResults: { type: string; roll: number; value: string; timestamp: string }[] = []; let rollResults: { type: string; roll: number; value: string; timestamp: string }[] = [];
function roll(item: { type: string; description: string; roll: number }) { function roll(item: { type: string; description: string; roll: number }) {
@@ -32,6 +35,7 @@
{ type: item.type, roll: item.roll, value: item.description, timestamp: formatDate(new Date(), "P kk:mm:ss") }, { type: item.type, roll: item.roll, value: item.description, timestamp: formatDate(new Date(), "P kk:mm:ss") },
...rollResults, ...rollResults,
]; ];
dispatch("roll");
} }
</script> </script>
+6 -3
View File
@@ -1,17 +1,20 @@
<script lang="ts"> <script lang="ts">
import { Button, Card, CardHeader, CardTitle, CardBody, CardSubtitle, CardText, CardFooter, Container, Row, Icon } from "sveltestrap"; import { Button } from "sveltestrap";
import { capitalize } from "lodash";
import { format as formatDate } from "date-fns"; import { format as formatDate } from "date-fns";
import { createEventDispatcher } from "svelte";
import DiscoveryCard from "./DiscoveryCard.svelte"; import DiscoveryCard from "./DiscoveryCard.svelte";
import { Discovery, rollDiscovery } from "../rollers/discoveries"; import { Discovery, rollDiscovery } from "../rollers/discoveries";
const dispatch = createEventDispatcher();
export let rollResults: { discovery: Discovery; timestamp: string }[] = []; export let rollResults: { discovery: Discovery; timestamp: string }[] = [];
function roll(event: Event) { function roll(event: Event) {
let discovery = rollDiscovery(); let discovery = rollDiscovery();
rollResults = [{ discovery, timestamp: formatDate(new Date(), "P kk:mm:ss") }, ...rollResults]; rollResults = [{ discovery, timestamp: formatDate(new Date(), "P kk:mm:ss") }, ...rollResults];
dispatch("roll");
} }
function getIcon(t: string, c: string): string { function getIcon(t: string, c: string): string {
return ""; return "";
} }
+4 -1
View File
@@ -1,16 +1,19 @@
<script lang="ts"> <script lang="ts">
import { Button } from "sveltestrap"; import { Button } from "sveltestrap";
import { format as formatDate } from "date-fns"; import { format as formatDate } from "date-fns";
import { createEventDispatcher } from "svelte";
import DungeonCard from "./DungeonCard.svelte"; import DungeonCard from "./DungeonCard.svelte";
import { Dungeon, rollDungeon } from "../rollers/dungeons"; import { Dungeon, rollDungeon } from "../rollers/dungeons";
const dispatch = createEventDispatcher();
export let rollResults: { dungeon: Dungeon; timestamp: string }[] = []; export let rollResults: { dungeon: Dungeon; timestamp: string }[] = [];
function roll(event: Event) { function roll(event: Event) {
let dungeon = rollDungeon(); let dungeon = rollDungeon();
rollResults = [{ dungeon, timestamp: formatDate(new Date(), "P kk:mm:ss") }, ...rollResults]; rollResults = [{ dungeon, timestamp: formatDate(new Date(), "P kk:mm:ss") }, ...rollResults];
dispatch("roll");
} }
</script> </script>
+4 -1
View File
@@ -1,16 +1,19 @@
<script lang="ts"> <script lang="ts">
import { Button } from "sveltestrap"; import { Button } from "sveltestrap";
import { format as formatDate } from "date-fns"; import { format as formatDate } from "date-fns";
import { createEventDispatcher } from "svelte";
import FollowerCard from "./FollowerCard.svelte"; import FollowerCard from "./FollowerCard.svelte";
import { rollFollower, Follower } from "../rollers/followers"; import { rollFollower, Follower } from "../rollers/followers";
const dispatch = createEventDispatcher();
export let rollResults: { follower: Follower; timestamp: string }[] = []; export let rollResults: { follower: Follower; timestamp: string }[] = [];
function roll(event: Event) { function roll(event: Event) {
let follower = rollFollower(); let follower = rollFollower();
rollResults = [{ follower, timestamp: formatDate(new Date(), "P kk:mm:ss") }, ...rollResults]; rollResults = [{ follower, timestamp: formatDate(new Date(), "P kk:mm:ss") }, ...rollResults];
dispatch("roll");
} }
</script> </script>
+4 -1
View File
@@ -1,19 +1,22 @@
<script lang="ts"> <script lang="ts">
import { capitalize } from "lodash"; import { capitalize } from "lodash";
import { format as formatDate } from "date-fns"; import { format as formatDate } from "date-fns";
import { createEventDispatcher } from "svelte";
import { Button, Icon } from "sveltestrap"; import { Button, Icon } from "sveltestrap";
import { kingdoms, rollCategory } from "../rollers/kingdoms"; import { kingdoms, rollCategory } from "../rollers/kingdoms";
const dispatch = createEventDispatcher();
let rollResults: { value: string; icon: string; timestamp: string }[] = []; let rollResults: { value: string; icon: string; timestamp: string }[] = [];
let kingdom = "arpad"; let kingdom = "arpad";
let categories: string[]; let categories: string[];
function roll(category: string) { function roll(category: string) {
let value = rollCategory(kingdom, category); let value = rollCategory(kingdom, category);
let icon = { male: "person-fill", female: "person", steading: "house-door-fill", mount: "bicycle" }[category] || ""; let icon = { male: "person-fill", female: "person", steading: "house-door-fill", mount: "bicycle" }[category] || "";
rollResults = [{ value, icon, timestamp: formatDate(new Date(), "P kk:mm:ss") }, ...rollResults]; rollResults = [{ value, icon, timestamp: formatDate(new Date(), "P kk:mm:ss") }, ...rollResults];
dispatch("roll");
} }
$: categories = kingdoms[kingdom].categories; $: categories = kingdoms[kingdom].categories;
+4 -1
View File
@@ -1,16 +1,19 @@
<script lang="ts"> <script lang="ts">
import { Button } from "sveltestrap"; import { Button } from "sveltestrap";
import { format as formatDate } from "date-fns"; import { format as formatDate } from "date-fns";
import { createEventDispatcher } from "svelte";
import NpcCard from "./NpcCard.svelte"; import NpcCard from "./NpcCard.svelte";
import { Npc, rollNpc } from "../rollers/npcs"; import { Npc, rollNpc } from "../rollers/npcs";
const dispatch = createEventDispatcher();
export let rollResults: { npc: Npc; timestamp: string }[] = []; export let rollResults: { npc: Npc; timestamp: string }[] = [];
function roll(event: Event) { function roll(event: Event) {
let npc = rollNpc(); let npc = rollNpc();
rollResults = [{ npc, timestamp: formatDate(new Date(), "P kk:mm:ss") }, ...rollResults]; rollResults = [{ npc, timestamp: formatDate(new Date(), "P kk:mm:ss") }, ...rollResults];
dispatch("roll");
} }
</script> </script>
+4
View File
@@ -1,13 +1,17 @@
<script lang="ts"> <script lang="ts">
import { format as formatDate } from "date-fns"; import { format as formatDate } from "date-fns";
import { createEventDispatcher } from "svelte";
import { Button } from "sveltestrap"; import { Button } from "sveltestrap";
import { rollPlace } from "../rollers/places"; import { rollPlace } from "../rollers/places";
const dispatch = createEventDispatcher();
export let rollResults: { place: string; timestamp: string }[] = []; export let rollResults: { place: string; timestamp: string }[] = [];
function roll(event: Event) { function roll(event: Event) {
let place = rollPlace(); let place = rollPlace();
rollResults = [{ place, timestamp: formatDate(new Date(), "P kk:mm:ss") }, ...rollResults]; rollResults = [{ place, timestamp: formatDate(new Date(), "P kk:mm:ss") }, ...rollResults];
dispatch("roll");
} }
</script> </script>
+4
View File
@@ -1,13 +1,17 @@
<script lang="ts"> <script lang="ts">
import { format as formatDate } from "date-fns"; import { format as formatDate } from "date-fns";
import { createEventDispatcher } from "svelte";
import { Button } from "sveltestrap"; import { Button } from "sveltestrap";
import { rollRegion } from "../rollers/regions"; import { rollRegion } from "../rollers/regions";
const dispatch = createEventDispatcher();
export let rollResults: { region: string; timestamp: string }[] = []; export let rollResults: { region: string; timestamp: string }[] = [];
function roll(event: Event) { function roll(event: Event) {
let region = rollRegion(); let region = rollRegion();
rollResults = [{ region, timestamp: formatDate(new Date(), "P kk:mm:ss") }, ...rollResults]; rollResults = [{ region, timestamp: formatDate(new Date(), "P kk:mm:ss") }, ...rollResults];
dispatch("roll");
} }
</script> </script>
+4
View File
@@ -1,14 +1,18 @@
<script lang="ts"> <script lang="ts">
import { format as formatDate } from "date-fns"; import { format as formatDate } from "date-fns";
import { createEventDispatcher } from "svelte";
import { Button } from "sveltestrap"; import { Button } from "sveltestrap";
import SteadingCard from "./SteadingCard.svelte"; import SteadingCard from "./SteadingCard.svelte";
import { rollSteading, Steading } from "../rollers/steadings"; import { rollSteading, Steading } from "../rollers/steadings";
const dispatch = createEventDispatcher();
export let rollResults: { steading: Steading; timestamp: string }[] = []; export let rollResults: { steading: Steading; timestamp: string }[] = [];
function roll(event: Event) { function roll(event: Event) {
let steading = rollSteading(); let steading = rollSteading();
rollResults = [{ steading, timestamp: formatDate(new Date(), "P kk:mm:ss") }, ...rollResults]; rollResults = [{ steading, timestamp: formatDate(new Date(), "P kk:mm:ss") }, ...rollResults];
dispatch("roll");
} }
</script> </script>