Add sound to actions
This commit is contained in:
parent
4af0802e5b
commit
1afa2529e5
6 changed files with 46 additions and 0 deletions
|
@ -9,6 +9,7 @@ import {
|
||||||
randInt,
|
randInt,
|
||||||
uid,
|
uid,
|
||||||
getItemElement,
|
getItemElement,
|
||||||
|
playAudio,
|
||||||
} from "../utils";
|
} from "../utils";
|
||||||
|
|
||||||
import RotateActionForm from "./forms/RotateActionForm";
|
import RotateActionForm from "./forms/RotateActionForm";
|
||||||
|
@ -28,6 +29,10 @@ import shuffleIcon from "../media/images/shuffle.svg";
|
||||||
import tapIcon from "../media/images/tap.svg";
|
import tapIcon from "../media/images/tap.svg";
|
||||||
import rollIcon from "../media/images/rolling-dices.svg";
|
import rollIcon from "../media/images/rolling-dices.svg";
|
||||||
|
|
||||||
|
import flipAudio from "../media/audio/flip.wav?url";
|
||||||
|
import rollAudio from "../media/audio/roll.wav?url";
|
||||||
|
import shuffleAudio from "../media/audio/shuffle.wav?url";
|
||||||
|
|
||||||
import useLocalStorage from "../hooks/useLocalStorage";
|
import useLocalStorage from "../hooks/useLocalStorage";
|
||||||
|
|
||||||
export const useGameItemActions = () => {
|
export const useGameItemActions = () => {
|
||||||
|
@ -264,6 +269,8 @@ export const useGameItemActions = () => {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
simulateRoll(100);
|
simulateRoll(100);
|
||||||
|
|
||||||
|
playAudio(rollAudio, 0.4);
|
||||||
},
|
},
|
||||||
[batchUpdateItems, getItemListOrSelected]
|
[batchUpdateItems, getItemListOrSelected]
|
||||||
);
|
);
|
||||||
|
@ -278,6 +285,8 @@ export const useGameItemActions = () => {
|
||||||
});
|
});
|
||||||
const shuffledItems = shuffleArray([...ids]);
|
const shuffledItems = shuffleArray([...ids]);
|
||||||
swapItems(ids, shuffledItems);
|
swapItems(ids, shuffledItems);
|
||||||
|
|
||||||
|
playAudio(shuffleAudio, 0.5);
|
||||||
},
|
},
|
||||||
[getItemListOrSelected, swapItems]
|
[getItemListOrSelected, swapItems]
|
||||||
);
|
);
|
||||||
|
@ -354,6 +363,7 @@ export const useGameItemActions = () => {
|
||||||
if (reverseOrder) {
|
if (reverseOrder) {
|
||||||
reverseItemsOrder(itemIds);
|
reverseItemsOrder(itemIds);
|
||||||
}
|
}
|
||||||
|
playAudio(flipAudio, 0.2);
|
||||||
},
|
},
|
||||||
[batchUpdateItems, reverseItemsOrder]
|
[batchUpdateItems, reverseItemsOrder]
|
||||||
);
|
);
|
||||||
|
|
BIN
src/media/audio/flip.wav
Normal file
BIN
src/media/audio/flip.wav
Normal file
Binary file not shown.
BIN
src/media/audio/roll.wav
Normal file
BIN
src/media/audio/roll.wav
Normal file
Binary file not shown.
BIN
src/media/audio/shuffle.wav
Normal file
BIN
src/media/audio/shuffle.wav
Normal file
Binary file not shown.
|
@ -86,3 +86,32 @@ export const objectDiff = (o1, o2) => {
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const retry = (fn, condition, delay) => {
|
||||||
|
if (condition()) {
|
||||||
|
setTimeout(() => retry(fn, condition, delay), delay);
|
||||||
|
} else {
|
||||||
|
fn();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const audioFiles = {};
|
||||||
|
|
||||||
|
export const preloadAudio = (urls) => {
|
||||||
|
urls.forEach((url) => {
|
||||||
|
if (!audioFiles[url]) {
|
||||||
|
audioFiles[url] = new Audio(url);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export const playAudio = (url, volume = 1) => {
|
||||||
|
if (!audioFiles[url]) {
|
||||||
|
audioFiles[url] = new Audio(url);
|
||||||
|
}
|
||||||
|
|
||||||
|
audioFiles[url].pause();
|
||||||
|
audioFiles[url].currentTime = 0;
|
||||||
|
audioFiles[url].volume = volume;
|
||||||
|
audioFiles[url].play();
|
||||||
|
};
|
||||||
|
|
|
@ -16,6 +16,11 @@ import { MediaLibraryProvider, ImageDropNPaste } from "../../mediaLibrary";
|
||||||
import HintOnLockedItem from "./HintOnLockedItem";
|
import HintOnLockedItem from "./HintOnLockedItem";
|
||||||
import useGlobalConf from "../../hooks/useGlobalConf";
|
import useGlobalConf from "../../hooks/useGlobalConf";
|
||||||
|
|
||||||
|
import flipAudio from "../../media/audio/flip.wav?url";
|
||||||
|
import rollAudio from "../../media/audio/roll.wav?url";
|
||||||
|
import shuffleAudio from "../../media/audio/shuffle.wav?url";
|
||||||
|
import { preloadAudio } from "../../utils";
|
||||||
|
|
||||||
export const BoardView = ({
|
export const BoardView = ({
|
||||||
mediaLibraries,
|
mediaLibraries,
|
||||||
edit: editMode,
|
edit: editMode,
|
||||||
|
@ -39,6 +44,8 @@ export const BoardView = ({
|
||||||
return currentBackground.getStyle(boardConfig.bgConf);
|
return currentBackground.getStyle(boardConfig.bgConf);
|
||||||
}, [boardConfig.bgConf, boardConfig.bgType]);
|
}, [boardConfig.bgConf, boardConfig.bgType]);
|
||||||
|
|
||||||
|
React.useEffect(() => preloadAudio([flipAudio, shuffleAudio, rollAudio]), []);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<MediaLibraryProvider libraries={mediaLibraries}>
|
<MediaLibraryProvider libraries={mediaLibraries}>
|
||||||
<ImageDropNPaste>
|
<ImageDropNPaste>
|
||||||
|
|
Loading…
Reference in a new issue