38 lines
1.2 KiB
JavaScript
38 lines
1.2 KiB
JavaScript
|
const createRuffleService = () => {
|
||
|
let ruffleInstance = null
|
||
|
|
||
|
const getRuffle = () => new Promise((resolve, reject) => {
|
||
|
if (ruffleInstance) resolve(ruffleInstance)
|
||
|
// Ruffle needs these to be set before it's loaded
|
||
|
// https://github.com/ruffle-rs/ruffle/issues/3952
|
||
|
window.RufflePlayer = {}
|
||
|
window.RufflePlayer.config = {
|
||
|
polyfills: false,
|
||
|
publicPath: '/static/ruffle'
|
||
|
}
|
||
|
|
||
|
// Currently it's seems like a better way of loading ruffle
|
||
|
// because it needs the wasm publically accessible, but it needs path to it
|
||
|
// and filename of wasm seems to be pseudo-randomly generated (is it a hash?)
|
||
|
const script = document.createElement('script')
|
||
|
// see webpack config, using CopyPlugin to copy it from node_modules
|
||
|
// provided via ruffle-mirror
|
||
|
script.src = '/static/ruffle/ruffle.js'
|
||
|
script.type = 'text/javascript'
|
||
|
script.onerror = (e) => { reject(e) }
|
||
|
script.onabort = (e) => { reject(e) }
|
||
|
script.oncancel = (e) => { reject(e) }
|
||
|
script.onload = () => {
|
||
|
ruffleInstance = window.RufflePlayer
|
||
|
resolve(ruffleInstance)
|
||
|
}
|
||
|
document.body.appendChild(script)
|
||
|
})
|
||
|
|
||
|
return { getRuffle }
|
||
|
}
|
||
|
|
||
|
const RuffleService = createRuffleService()
|
||
|
|
||
|
export default RuffleService
|