mirror of
https://github.com/EmulatorJS/EmulatorJS.git
synced 2024-09-20 02:46:23 +00:00
Ability to drag and drop states. Fixes #643
This commit is contained in:
parent
ba0f314acc
commit
04b2768167
1 changed files with 48 additions and 0 deletions
|
@ -1106,6 +1106,54 @@ class EmulatorJS {
|
||||||
})
|
})
|
||||||
this.addEventListener(window, "resize", this.handleResize.bind(this));
|
this.addEventListener(window, "resize", this.handleResize.bind(this));
|
||||||
//this.addEventListener(window, "blur", e => console.log(e), true); //TODO - add "click to make keyboard keys work" message?
|
//this.addEventListener(window, "blur", e => console.log(e), true); //TODO - add "click to make keyboard keys work" message?
|
||||||
|
|
||||||
|
let counter = 0;
|
||||||
|
this.elements.statePopupPanel = this.createPopup("", {}, true);
|
||||||
|
this.elements.statePopupPanel.innerText = "Drop save state here to load";
|
||||||
|
this.elements.statePopupPanel.style["text-align"] = "center";
|
||||||
|
this.elements.statePopupPanel.style["font-size"] = "28px";
|
||||||
|
this.addEventListener(this.elements.parent, "dragenter", (e) => {
|
||||||
|
e.preventDefault();
|
||||||
|
if (!this.started) return;
|
||||||
|
counter++;
|
||||||
|
this.elements.statePopupPanel.parentElement.style.display = "block";
|
||||||
|
});
|
||||||
|
this.addEventListener(this.elements.parent, "dragover", (e) => {
|
||||||
|
e.preventDefault();
|
||||||
|
});
|
||||||
|
this.addEventListener(this.elements.parent, "dragleave", (e) => {
|
||||||
|
e.preventDefault();
|
||||||
|
if (!this.started) return;
|
||||||
|
counter--;
|
||||||
|
if (counter === 0) {
|
||||||
|
this.elements.statePopupPanel.parentElement.style.display = "none";
|
||||||
|
}
|
||||||
|
});
|
||||||
|
this.addEventListener(this.elements.parent, "dragend", (e) => {
|
||||||
|
e.preventDefault();
|
||||||
|
if (!this.started) return;
|
||||||
|
counter = 0;
|
||||||
|
this.elements.statePopupPanel.parentElement.style.display = "none";
|
||||||
|
});
|
||||||
|
this.addEventListener(this.elements.parent, "drop", (e) => {
|
||||||
|
e.preventDefault();
|
||||||
|
if (!this.started) return;
|
||||||
|
this.elements.statePopupPanel.parentElement.style.display = "none";
|
||||||
|
counter = 0;
|
||||||
|
const items = e.dataTransfer.items;
|
||||||
|
let file;
|
||||||
|
for (let i=0; i<items.length; i++) {
|
||||||
|
if (items[i].kind !== 'file') continue;
|
||||||
|
file = items[i];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (!file) return;
|
||||||
|
const fileHandle = file.getAsFile();
|
||||||
|
fileHandle.arrayBuffer().then(data => {
|
||||||
|
this.gameManager.loadState(new Uint8Array(data));
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
||||||
this.gamepad = new GamepadHandler(); //https://github.com/ethanaobrien/Gamepad
|
this.gamepad = new GamepadHandler(); //https://github.com/ethanaobrien/Gamepad
|
||||||
this.gamepad.on('connected', (e) => {
|
this.gamepad.on('connected', (e) => {
|
||||||
if (!this.gamepadLabels) return;
|
if (!this.gamepadLabels) return;
|
||||||
|
|
Loading…
Reference in a new issue