mirror of
https://github.com/He4eT/elseifplayer.git
synced 2026-05-05 01:17:22 +00:00
Update the player to work with new versions of the Emglken and the cheap-glkote
This commit is contained in:
parent
c817d72827
commit
b08d9725d4
4 changed files with 33 additions and 13 deletions
|
|
@ -38,6 +38,6 @@
|
|||
},
|
||||
"staticFiles": {
|
||||
"staticPath": "node_modules/emglken/build",
|
||||
"staticOutPath": "node_modules/emglken/build"
|
||||
"staticOutPath": "emglken"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,18 +18,23 @@ const INITIAL_STATUS = {
|
|||
details: ['Preparing'],
|
||||
}
|
||||
|
||||
const runMachine = ({ engine: Engine, file, handlers }) => {
|
||||
const runMachine = ({ engine: Engine, wasmBinary, storyfile, handlers }) => {
|
||||
const { Dialog, GlkOte, send } = CheapGlkOte(handlers)
|
||||
const vm = new Engine()
|
||||
const { glkInterface, sendFn } = CheapGlkOte(handlers)
|
||||
|
||||
vm.prepare(file, glkInterface)
|
||||
vm.init(storyfile, {
|
||||
Dialog,
|
||||
GlkOte,
|
||||
Glk: {},
|
||||
wasmBinary,
|
||||
})
|
||||
vm.start()
|
||||
|
||||
return { sendFn, instance: vm }
|
||||
return { send, instance: vm }
|
||||
}
|
||||
|
||||
export default function Player ({
|
||||
vmParts: { file, engine }, singleWindow,
|
||||
vmParts: { storyfile, engine, wasmBinary }, singleWindow,
|
||||
}) {
|
||||
const [status, setStatus] = useState(INITIAL_STATUS)
|
||||
|
||||
|
|
@ -44,7 +49,8 @@ export default function Player ({
|
|||
useEffect(() => {
|
||||
const vm = runMachine({
|
||||
engine,
|
||||
file,
|
||||
wasmBinary,
|
||||
storyfile,
|
||||
handlers: Handlers({
|
||||
setStatus,
|
||||
setWindows,
|
||||
|
|
@ -55,11 +61,11 @@ export default function Player ({
|
|||
})
|
||||
|
||||
setVm(vm)
|
||||
}, [file, engine])
|
||||
}, [storyfile, engine, wasmBinary])
|
||||
|
||||
useEffect(() => {
|
||||
setSendMessage(() => vm
|
||||
? vm.sendFn
|
||||
? vm.send
|
||||
: null)
|
||||
}, [vm])
|
||||
|
||||
|
|
|
|||
|
|
@ -22,6 +22,10 @@ const prepareVM = ({ url, setStatus, setParts }) => {
|
|||
? url.replace(/#(.*)$/g, '')
|
||||
: url
|
||||
|
||||
const fetchWasm = (wasmBinaryName) =>
|
||||
fetch(wasmBinaryName)
|
||||
.then((response) => response.arrayBuffer())
|
||||
|
||||
return Promise.resolve(url)
|
||||
.then(st('loading', 'Downloading file'))
|
||||
.then(cleanUrl)
|
||||
|
|
@ -30,9 +34,15 @@ const prepareVM = ({ url, setStatus, setParts }) => {
|
|||
.then((response) => response.arrayBuffer())
|
||||
.then((arrayBuffer) => new Uint8Array(arrayBuffer))
|
||||
.then(st('loading', 'Downloading engine'))
|
||||
.then((file) => setParts({
|
||||
file,
|
||||
engine: engineByFilename(url),
|
||||
.then((storyfile) => {
|
||||
let parts = engineByFilename(url)
|
||||
return [storyfile, parts.engine, parts.wasmBinaryName]
|
||||
})
|
||||
.then(([storyfile, engine, wasmBinaryName]) => Promise.all([
|
||||
storyfile, engine, fetchWasm(wasmBinaryName),
|
||||
]))
|
||||
.then(([storyfile, engine, wasmBinary]) => setParts({
|
||||
storyfile, engine, wasmBinary,
|
||||
}))
|
||||
.then(st('loading', 'Running'))
|
||||
.catch((e) => {
|
||||
|
|
|
|||
|
|
@ -31,7 +31,11 @@ export const engineByFilename = (filename) => {
|
|||
x.extensions.test(filename))
|
||||
|
||||
if (format) {
|
||||
return format.engine
|
||||
return {
|
||||
...format,
|
||||
/* @see staticFiles in package.json */
|
||||
wasmBinaryName: `emglken/${format.id}-core.wasm`,
|
||||
}
|
||||
}
|
||||
throw new Error('Unsupported file type')
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue