NetPlay Dialog started

This commit is contained in:
ppeccin 2018-01-04 22:01:56 -02:00
parent e1edf389ab
commit 643f7c7020
8 changed files with 136 additions and 4 deletions

View file

@ -65,14 +65,14 @@ module.exports = function (grunt) {
"src/main/room/controls/GamepadConsoleControls.js",
"src/main/room/controls/DOMTouchControls.js",
"src/main/room/controls/DOMConsoleControls.js",
"src/main/room/screen/ScreenGUI.es6.js",
"src/main/room/screen/ScreenGUI.es5.js",
"src/main/room/screen/Monitor.js",
"src/main/room/screen/ConsolePanel.js",
"src/main/room/screen/CanvasDisplay.js",
"src/main/room/screen/dialogs/RecentROMsDialog.js",
"src/main/room/screen/dialogs/SaveStateDialog.js",
"src/main/room/screen/dialogs/QuickOptionsDialog.js",
"src/main/room/screen/settings/SettingsGUI.es6.js",
"src/main/room/screen/settings/SettingsGUI.es5.js",
"src/main/room/screen/settings/Settings.js",
"src/main/room/speaker/WebAudioSpeaker.js",
"src/main/room/savestate/LocalStorageSaveStateMedia.js",

View file

@ -125,6 +125,9 @@ jt.DOMPeripheralControls = function(room) {
case controls.SCREEN_CONSOLE_PANEL_TOGGLE:
screen.toggleConsolePanel();
break;
case controls.SCREEN_OPEN_NETPLAY:
screen.openQuickOptionsDialog();
break;
case controls.P1_CONTROLS_TOGGLE:
consoleControls.toggleP1ControlsMode(); break;
case controls.JOYSTICKS_TOGGLE_MODE:

View file

@ -30,6 +30,8 @@ jt.PeripheralControls = {
CARTRIDGE_LOAD_RECENT: 40,
CARTRIDGE_LOAD_FILE: 41, CARTRIDGE_LOAD_URL: 42, CARTRIDGE_REMOVE: 43, CARTRIDGE_LOAD_DATA_FILE: 44, CARTRIDGE_SAVE_DATA_FILE: 45,
AUTO_LOAD_FILE: 46, AUTO_LOAD_URL: 47
AUTO_LOAD_FILE: 46, AUTO_LOAD_URL: 47,
SCREEN_OPEN_NETPLAY: 500
};

View file

@ -136,6 +136,12 @@ jt.CanvasDisplay = function(mainElement) {
quickOtionsDialog.show();
};
this.openNetPlayDialog = function() {
closeAllOverlays();
if (!netPlayDialog) netPlayDialog = new jt.NetPlayDialog(fsElementCenter, consoleControlsSocket, peripheralControls);
netPlayDialog.show();
};
this.openLoadFileDialog = function(altPower, secPort) {
fileLoader.openFileChooserDialog(jt.FileLoader.OPEN_TYPE.AUTO, altPower, secPort, false);
};
@ -638,6 +644,8 @@ jt.CanvasDisplay = function(mainElement) {
{ label: "Power", clickModif: 0, control: jt.PeripheralControls.MACHINE_POWER_TOGGLE },
{ label: "Fry Console", control: jt.PeripheralControls.MACHINE_POWER_FRY },
{ label: "", divider: true },
{ label: "Net Play!", control: jt.PeripheralControls.SCREEN_OPEN_NETPLAY },
{ label: "", divider: true },
{ label: "Select Cartridge", control: jt.PeripheralControls.CARTRIDGE_LOAD_RECENT },
{ label: "", divider: true },
{ label: "Open File", clickModif: KEY_CTRL_MASK, control: jt.PeripheralControls.AUTO_LOAD_FILE, needsUIG: true },
@ -1147,6 +1155,7 @@ jt.CanvasDisplay = function(mainElement) {
hideBarMenu();
if (saveStateDialog) saveStateDialog.hide();
if (quickOtionsDialog) quickOtionsDialog.hide();
if (netPlayDialog) netPlayDialog.hide();
if (settingsDialog) settingsDialog.hide();
if (recentROMsDialog) recentROMsDialog.hide();
}
@ -1333,6 +1342,7 @@ jt.CanvasDisplay = function(mainElement) {
var saveStateDialog;
var recentROMsDialog;
var quickOtionsDialog;
var netPlayDialog;
var fsElement, fsElementCenter;
@ -1396,7 +1406,7 @@ jt.CanvasDisplay = function(mainElement) {
var FULLSCREEN_MODE = Javatari.SCREEN_FULLSCREEN_MODE;
var BAR_AUTO_HIDE = Javatari.SCREEN_CONTROL_BAR === 0;
var BAR_MENU_MAX_ITEMS = 10;
var BAR_MENU_MAX_ITEMS = 12;
var NARROW_WIDTH = 336;

View file

@ -0,0 +1,116 @@
// Copyright 2015 by Paulo Augusto Peccin. See license.txt distributed with this file.
jt.NetPlayDialog = function(mainElement, consoleControls, peripheralControls) {
"use strict";
var self = this;
this.show = function () {
if (!dialog) {
create();
return setTimeout(self.show, 0);
}
refresh();
visible = true;
dialog.classList.add("jt-show");
dialog.focus();
var availHeight = mainElement.clientHeight - jt.ScreenGUI.BAR_HEIGHT - 20; // bar - tolerance
var height = dialog.clientHeight;
var scale = height < availHeight ? 1 : availHeight / height;
dialog.style.transform = "translateY(-" + ((jt.ScreenGUI.BAR_HEIGHT / 2) | 0) + "px) scale(" + scale.toFixed(4) + ")";
};
this.hide = function() {
if (!visible) return;
Javatari.userPreferences.save();
dialog.classList.remove("jt-show");
visible = false;
Javatari.room.screen.focus();
};
function refresh() {
for (var i = 0; i < items.length; ++i) {
var item = items[i];
var report = item.peripheral ? peripheralControls.getControlReport(item.control) : consoleControls.getControlReport(item.control);
item.value = report.label;
item.selected = report.active;
controlsItems[i].innerHTML = item.value;
controlsItems[i].classList.toggle("jt-selected", !!item.selected);
}
}
function create() {
dialog = document.createElement("div");
dialog.id = "jt-quick-options";
dialog.tabIndex = -1;
var cc = jt.ConsoleControls;
var pc = jt.PeripheralControls;
items = [
{ label: "Paddles Mode", control: pc.PADDLES_TOGGLE_MODE, peripheral: true },
{ label: "No Collisions", control: cc.NO_COLLISIONS },
{ label: "&#128190;&nbsp; V-Synch", control: cc.VSYNCH },
{ label: "&#128190;&nbsp; CRT Filter", control: pc.SCREEN_CRT_FILTER, peripheral: true },
{ label: "&#128190;&nbsp; Audio Buffer", control: pc.SPEAKER_BUFFER_TOGGLE, peripheral: true },
{ label: "&#128190;&nbsp; Big Directionals", control: pc.TOUCH_TOGGLE_DIR_BIG, peripheral: true },
{ label: "&#128190;&nbsp; TurboFire Speed", control: pc.TURBO_FIRE_TOGGLE, peripheral: true },
{ label: "&#128190;&nbsp; Haptic Feedback", control: pc.HAPTIC_FEEDBACK_TOGGLE_MODE, peripheral: true }
];
// Define list
var list = document.createElement('ul');
list.classList.add("jt-quick-options-list");
for (var i = 0; i < items.length; ++i) {
var li = document.createElement("li");
var label = document.createElement("div");
label.innerHTML = items[i].label;
li.appendChild(label);
var control = document.createElement("div");
control.classList.add("jt-control");
control.jtControlItem = items[i];
li.appendChild(control);
list.appendChild(li);
controlsItems.push(control);
}
dialog.appendChild(list);
setupEvents();
mainElement.appendChild(dialog);
}
function setupEvents() {
// Do not close with taps or clicks inside, select with tap or mousedown
jt.Util.onTapOrMouseDownWithBlock(dialog, function(e) {
if (e.target.jtControlItem) {
jt.DOMConsoleControls.hapticFeedbackOnTouch(e);
var item = e.target.jtControlItem;
if (item.peripheral) peripheralControls.controlActivated(item.control, false, false);
else consoleControls.controlStateChanged(item.control, true);
refresh();
} else
dialog.focus();
});
// Trap keys, respond to some
dialog.addEventListener("keydown", function(e) {
// Exit
if (EXIT_KEYS.indexOf(e.keyCode) >= 0) self.hide();
return jt.Util.blockEvent(e);
});
}
var visible = false;
var dialog, list;
var items, controlsItems = [];
var k = jt.DOMKeys;
var EXIT_KEYS = [ k.VK_ESCAPE.c, k.VK_ENTER.c, k.VK_SPACE.c ];
};

View file

@ -105,6 +105,7 @@
<script src="../src/main/room/screen/dialogs/RecentROMsDialog.js"></script>
<script src="../src/main/room/screen/dialogs/SaveStateDialog.js"></script>
<script src="../src/main/room/screen/dialogs/QuickOptionsDialog.js"></script>
<script src="../src/main/room/screen/dialogs/NetPlayDialog.js"></script>
<script src="../src/main/room/screen/settings/SettingsGUI.js"></script>
<script src="../src/main/room/screen/settings/Settings.js"></script>
<script src="../src/main/room/speaker/WebAudioSpeaker.js"></script>