From 5b2bd40087876d47cdfafe760781378ae2d311d0 Mon Sep 17 00:00:00 2001
From: Ethan O'Brien <77750390+ethanaobrien@users.noreply.github.com>
Date: Tue, 27 Jun 2023 11:54:35 -0500
Subject: [PATCH] base menu bar
---
src/GameManager.js | 6 +++-
src/css/main.css | 83 ++++++++++++++++++++++++++++++++++++++++++++++
src/emulator.js | 52 +++++++++++++++++++++++++++--
3 files changed, 137 insertions(+), 4 deletions(-)
diff --git a/src/GameManager.js b/src/GameManager.js
index 5ec2caf..35f1b48 100644
--- a/src/GameManager.js
+++ b/src/GameManager.js
@@ -9,7 +9,8 @@ class EJS_GameManager {
loadState: this.Module.cwrap('load_state', 'number', ['string', 'number']),
screenshot: this.Module.cwrap('cmd_take_screenshot', '', []),
simulateInput: this.Module.cwrap('simulate_input', 'null', ['number', 'number', 'number']),
- toggleMainLoop: this.Module.cwrap('toggleMainLoop', 'null', ['number'])
+ toggleMainLoop: this.Module.cwrap('toggleMainLoop', 'null', ['number']),
+ getCoreOptions: this.Module.cwrap('get_core_options', 'string', [])
}
}
restart() {
@@ -79,6 +80,9 @@ class EJS_GameManager {
toggleMainLoop(playing) {
this.functions.toggleMainLoop(playing);
}
+ getCoreOptions() {
+ return this.functions.getCoreOptions();
+ }
}
diff --git a/src/css/main.css b/src/css/main.css
index 31efdaf..65d0e8d 100644
--- a/src/css/main.css
+++ b/src/css/main.css
@@ -468,3 +468,86 @@
.ejs_dpad_down_pressed .ejs_dpad_vertical:after {
border-top-color:#fff
}
+
+.ejs_settings_parent {
+ background: rgba(16,16,16,0.9);
+ border-radius: 4px;
+ bottom: 100%;
+ box-shadow: 0 1px 2px rgba(0,0,0,0.15);
+ color: #4f5b5f;
+ font-size: 16px;
+ margin-bottom: 10px;
+ position: absolute;
+ right: -3px;
+ text-align: left;
+ white-space: nowrap;
+ z-index: 3;
+}
+.ejs_settings_parent::after {
+ border: 4px solid transparent;
+ border-top-color: rgba(16,16,16,0.9);
+ content: '';
+ height: 0;
+ position: absolute;
+ right: 15px;
+ top: 100%;
+ width: 0;
+}
+.ejs_settings_parent>div {
+ overflow: hidden;
+ transition: height .35s cubic-bezier(0.4,0,0.2,1),width .35s cubic-bezier(0.4,0,0.2,1);
+}
+.ejs_setting_home {
+ max-height: 385px;
+ overflow: auto;
+ padding: 7px;
+}
+.ejs_settings_main_bar {
+ align-items: center;
+ color: #999;
+ display: flex;
+ font-size: 13px;
+ padding: 4px 11px;
+ user-select: none;
+ width: 100%;
+ padding-right: 28px;
+ background: transparent;
+ border: 0;
+ border-radius: 3px;
+ flex-shrink: 0;
+ overflow: visible;
+ position: relative;
+ transition: all .3s ease;
+ box-sizing: border-box;
+}
+.ejs_settings_main_bar::after {
+ border: 4px solid transparent;
+ content: '';
+ position: absolute;
+ top: 50%;
+ transform: translateY(-50%);
+ border-left-color: rgba(79,91,95,0.8);
+ right: 5px;
+}
+.ejs_settings_main_bar>span {
+ align-items: inherit;
+ display: flex;
+ width: 100%;
+}
+.ejs_settings_main_bar:hover {
+ background: rgba(var(--ejs-primary-color),1);
+ color: #fff;
+ cursor: pointer;
+}
+.ejs_settings_main_bar:hover::after {
+ border-left-color: currentColor;
+}
+.ejs_settings_main_bar_selected {
+ align-items: center;
+ display: flex;
+ margin-left: auto;
+ margin-right: -5px;
+ overflow: hidden;
+ padding-left: 25px;
+ pointer-events: none;
+}
diff --git a/src/emulator.js b/src/emulator.js
index 2ed98fc..76990bc 100644
--- a/src/emulator.js
+++ b/src/emulator.js
@@ -453,6 +453,7 @@ class EmulatorJS {
this.virtualGamepad.style.display = "";
}
+ this.setupSettingsMenu();
this.handleResize();
}
bindListeners() {
@@ -622,7 +623,7 @@ class EmulatorJS {
this.elements.parent.appendChild(this.elements.menu);
//Now add buttons
- const addButton = (title, image, callback) => {
+ const addButton = (title, image, callback, element) => {
const button = this.createElement("button");
button.type = "button";
const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
@@ -636,7 +637,11 @@ class EmulatorJS {
button.classList.add("ejs_menu_button");
button.appendChild(svg);
button.appendChild(text);
- this.elements.menu.appendChild(button);
+ if (element) {
+ element.appendChild(button);
+ } else {
+ this.elements.menu.appendChild(button);
+ }
if (callback instanceof Function) {
this.addEventListener(button, 'click', callback);
}
@@ -692,6 +697,14 @@ class EmulatorJS {
spacer.style = "flex:1;";
this.elements.menu.appendChild(spacer);
+ this.settingParent = this.createElement("div");
+ addButton("Settings", '', () => {
+ console.log("settings");
+ }, this.settingParent);
+ this.elements.menu.appendChild(this.settingParent);
+
+
+
const enter = addButton("Enter Fullscreen", '', () => {
if (this.elements.parent.requestFullscreen) {
@@ -1410,10 +1423,43 @@ class EmulatorJS {
}
handleResize() {
+ if (!this.Module) return;
const dpr = window.devicePixelRatio || 1;
const positionInfo = this.game.getBoundingClientRect();
const width = positionInfo.width * dpr;
const height = (positionInfo.height * dpr);
- Module.setCanvasSize(width, height);
+ this.Module.setCanvasSize(width, height);
+ }
+ setupSettingsMenu() {
+ const main = this.createElement("div");
+ main.classList.add("ejs_settings_parent");
+
+ const home = this.createElement("div");
+ home.classList.add("ejs_setting_home");
+
+ const addToMenu = (title, options) => {
+ const menuOption = this.createElement("div");
+ menuOption.classList.add("ejs_settings_main_bar");
+ const span = this.createElement("span");
+ span.innerText = title;
+
+ const current = this.createElement("div");
+ current.innerText = "boogers";
+ current.classList.add("ejs_settings_main_bar_selected");
+ span.appendChild(current);
+
+ menuOption.appendChild(span);
+ home.appendChild(menuOption);
+ }
+
+ addToMenu("Test", [1, 2, 3]);
+ addToMenu("Test2");
+ addToMenu("Testertthgfd");
+
+ main.appendChild(home);
+
+
+ this.settingParent.appendChild(main);
+ this.settingParent.style.position = "relative";
}
}