mirror of
https://github.com/d07RiV/diabloweb.git
synced 2026-07-03 20:01:34 +00:00
shareware fixes
This commit is contained in:
19
src/App.js
19
src/App.js
@@ -162,6 +162,11 @@ class App extends React.Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
start(file) {
|
start(file) {
|
||||||
|
if (file && file.name.match(/\.sv$/i)) {
|
||||||
|
this.fs.then(fs => fs.upload(file)).then(console.log(`Updated ${file.name}`));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
document.removeEventListener("drop", this.onDrop, true);
|
document.removeEventListener("drop", this.onDrop, true);
|
||||||
document.removeEventListener("dragover", this.onDragOver, true);
|
document.removeEventListener("dragover", this.onDragOver, true);
|
||||||
document.removeEventListener("dragenter", this.onDragEnter, true);
|
document.removeEventListener("dragenter", this.onDragEnter, true);
|
||||||
@@ -266,11 +271,15 @@ class App extends React.Component {
|
|||||||
onKeyDown = e => {
|
onKeyDown = e => {
|
||||||
if (!this.canvas) return;
|
if (!this.canvas) return;
|
||||||
this.game("DApi_Key", 0, this.eventMods(e), e.keyCode);
|
this.game("DApi_Key", 0, this.eventMods(e), e.keyCode);
|
||||||
// if (e.keyCode >= 32 && e.key.length === 1) {
|
if (e.keyCode >= 32 && e.key.length === 1 && !this.showKeyboard) {
|
||||||
// this.game("DApi_Char", e.key.charCodeAt(0));
|
this.game("DApi_Char", e.key.charCodeAt(0));
|
||||||
// }
|
}
|
||||||
this.clearKeySel();
|
this.clearKeySel();
|
||||||
e.preventDefault();
|
if (!this.showKeyboard) {
|
||||||
|
if (e.keyCode === 8 || (e.keyCode >= 112 && e.keyCode <= 119)) {
|
||||||
|
e.preventDefault();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
onMenu = e => {
|
onMenu = e => {
|
||||||
@@ -492,7 +501,7 @@ class App extends React.Component {
|
|||||||
)}
|
)}
|
||||||
{!!loading && !started && !error && (
|
{!!loading && !started && !error && (
|
||||||
<div className="loading">
|
<div className="loading">
|
||||||
{progress && progress.text || 'Loading...'}
|
{(progress && progress.text) || 'Loading...'}
|
||||||
{progress != null && !!progress.total && (
|
{progress != null && !!progress.total && (
|
||||||
<span className="progressBar"><span><span style={{width: `${Math.round(100 * progress.loaded / progress.total)}%`}}/></span></span>
|
<span className="progressBar"><span><span style={{width: `${Math.round(100 * progress.loaded / progress.total)}%`}}/></span></span>
|
||||||
)}
|
)}
|
||||||
|
|||||||
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
@@ -36,14 +36,14 @@ function onRender(api, ctx, {bitmap, images, text, clip, belt}) {
|
|||||||
|
|
||||||
function testOffscreen() {
|
function testOffscreen() {
|
||||||
return false;
|
return false;
|
||||||
try {
|
/*try {
|
||||||
const canvas = document.createElement("canvas");
|
const canvas = document.createElement("canvas");
|
||||||
const offscreen = canvas.transferControlToOffscreen();
|
const offscreen = canvas.transferControlToOffscreen();
|
||||||
const context = offscreen.getContext("2d");
|
const context = offscreen.getContext("2d");
|
||||||
return context != null;
|
return context != null;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}*/
|
||||||
}
|
}
|
||||||
|
|
||||||
async function do_load_game(api, audio, mpq) {
|
async function do_load_game(api, audio, mpq) {
|
||||||
@@ -106,7 +106,7 @@ async function do_load_game(api, audio, mpq) {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
const transfer= [];
|
const transfer= [];
|
||||||
for (let [name, file] of fs.files) {
|
for (let [, file] of fs.files) {
|
||||||
transfer.push(file.buffer);
|
transfer.push(file.buffer);
|
||||||
}
|
}
|
||||||
worker.postMessage({action: "init", files: fs.files, mpq, spawn, offscreen}, transfer);
|
worker.postMessage({action: "init", files: fs.files, mpq, spawn, offscreen}, transfer);
|
||||||
|
|||||||
34
src/fs.js
34
src/fs.js
@@ -30,6 +30,36 @@ const importStorage = () => new Promise((resolve, reject) => {
|
|||||||
}, 10000);
|
}, 10000);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
async function downloadFile(store, name) {
|
||||||
|
const file = await store.get(name.toLowerCase());
|
||||||
|
if (file) {
|
||||||
|
const blob = new Blob([file], {type: 'binary/octet-stream'});
|
||||||
|
const url = URL.createObjectURL(blob);
|
||||||
|
const lnk = document.createElement('a');
|
||||||
|
lnk.setAttribute('href', url);
|
||||||
|
lnk.setAttribute('download', name);
|
||||||
|
document.body.appendChild(lnk);
|
||||||
|
lnk.click();
|
||||||
|
document.body.removeChild(lnk);
|
||||||
|
URL.revokeObjectURL(url);
|
||||||
|
} else {
|
||||||
|
console.error(`File ${name} does not exist`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const readFile = file => new Promise((resolve, reject) => {
|
||||||
|
const reader = new FileReader();
|
||||||
|
reader.onload = () => resolve(reader.result);
|
||||||
|
reader.onerror = () => reject(reader.error);
|
||||||
|
reader.onabort = () => reject();
|
||||||
|
reader.readAsArrayBuffer(file);
|
||||||
|
});
|
||||||
|
async function uploadFile(store, files, file) {
|
||||||
|
const data = new Uint8Array(await readFile(file));
|
||||||
|
files.set(file.name.toLowerCase(), data);
|
||||||
|
return store.set(file.name.toLowerCase(), data);
|
||||||
|
}
|
||||||
|
|
||||||
export default async function create_fs(load) {
|
export default async function create_fs(load) {
|
||||||
try {
|
try {
|
||||||
const store = new IdbKvStore('diablo_fs');
|
const store = new IdbKvStore('diablo_fs');
|
||||||
@@ -46,18 +76,22 @@ export default async function create_fs(load) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
window.DownloadFile = name => downloadFile(store, name);
|
||||||
return {
|
return {
|
||||||
files,
|
files,
|
||||||
update: (name, data) => store.set(name, data),
|
update: (name, data) => store.set(name, data),
|
||||||
delete: name => store.remove(name),
|
delete: name => store.remove(name),
|
||||||
clear: () => store.clear(),
|
clear: () => store.clear(),
|
||||||
|
upload: file => uploadFile(store, files, file),
|
||||||
};
|
};
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
window.DownloadFile = () => console.error('IndexedDB is not supported');
|
||||||
return {
|
return {
|
||||||
files: new Map(),
|
files: new Map(),
|
||||||
update: () => Promise.resolve(),
|
update: () => Promise.resolve(),
|
||||||
delete: () => Promise.resolve(),
|
delete: () => Promise.resolve(),
|
||||||
clear: () => Promise.resolve(),
|
clear: () => Promise.resolve(),
|
||||||
|
upload: () => Promise.resolve(),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user