only refresh needed values

This commit is contained in:
e7d 2020-08-31 11:54:05 +02:00
parent 61e275ca45
commit d7cc861f2b
No known key found for this signature in database
GPG Key ID: F320BE007C0B8881
3 changed files with 64 additions and 57 deletions

View File

@ -1,26 +1,26 @@
body {
background: transparent;
overflow: hidden;
font-family: sans-serif;
height: 100vh;
overflow: hidden;
}
#debug {
position: absolute;
top: 0;
display: none;
width: 100vw;
font-size: 60px;
color: red;
display: none;
font-size: 60px;
line-height: 80px;
position: absolute;
text-align: center;
top: 0;
width: 100vw;
}
.no-gamepad {
width: 100vw;
.instructions {
height: 100vh;
text-align: center;
line-height: 2em;
text-align: center;
width: 100vw;
}
@keyframes press-button {
@ -28,7 +28,7 @@ body {
fill: #898989;
}
5% {
7% {
fill: #898989;
}
@ -36,7 +36,7 @@ body {
fill: #00e530;
}
15% {
17% {
fill: #00e530;
}
@ -44,7 +44,7 @@ body {
fill: #898989;
}
25% {
27% {
fill: #898989;
}
@ -52,7 +52,7 @@ body {
fill: #00e530;
}
35% {
37% {
fill: #00e530;
}
@ -65,36 +65,36 @@ body {
}
}
.no-gamepad svg {
.instructions svg {
height: 90%;
left: 50%;
max-width: 600px;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 90%;
max-width: 600px;
height: 90%;
}
.no-gamepad #a-button path {
.instructions #a-button path {
animation: press-button 5s linear infinite;
}
#gamepad {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
background-position: center;
background-repeat: no-repeat;
background-size: contain;
left: 50%;
position: absolute;
top: 50%;
transform: translate(-50%, -50%);
}
#help {
#help-popout {
background: whitesmoke;
color: black;
border: 1px solid rgba(0, 0, 0, 0.2);
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
box-sizing: border-box;
color: black;
display: none;
font-size: 0.9em;
left: 50%;
@ -106,43 +106,43 @@ body {
transform: translate(-50%, -50%);
}
#help.active {
#help-popout.active {
display: block;
}
#help h2 {
margin-top: 0;
#help-popout h2 {
margin-bottom: 1.5em;
margin-top: 0;
}
#help h3 {
#help-popout h3 {
margin-top: 1.5em;
}
#help p:last-child {
#help-popout p:last-child {
margin-bottom: 0;
}
#help table {
#help-popout table {
border-collapse: collapse;
border-spacing: 0;
max-width: 100%;
width: 100%;
}
#help th {
#help-popout th {
text-align: left;
}
#help th,
#help td {
#help-popout th,
#help-popout td {
border-top: 1px solid #ddd;
line-height: 1.42857143;
padding: 8px;
vertical-align: top;
}
#help table>thead>tr>th {
#help-popout table>thead>tr>th {
border-bottom: 2px solid #ddd;
border-top: 0;
vertical-align: bottom;
@ -176,23 +176,23 @@ kbd[title],
kbd,
kbd.dark {
background: rgb(80, 80, 80);
background: -moz-linear-gradient(top, rgb(60, 60, 60), rgb(80, 80, 80));
background: -webkit-gradient(linear, left top, left bottom, from(rgb(60, 60, 60)), to(rgb(80, 80, 80)));
color: rgb(250, 250, 250);
text-shadow: -1px -1px 0 rgb(70, 70, 70);
-moz-box-shadow: inset 0 0 1px rgb(150, 150, 150), inset 0 -.05em .4em rgb(80, 80, 80), 0 .1em 0 rgb(30, 30, 30), 0 .1em .1em rgba(0, 0, 0, .3);
-webkit-box-shadow: inset 0 0 1px rgb(150, 150, 150), inset 0 -.05em .4em rgb(80, 80, 80), 0 .1em 0 rgb(30, 30, 30), 0 .1em .1em rgba(0, 0, 0, .3);
background: -moz-linear-gradient(top, rgb(60, 60, 60), rgb(80, 80, 80));
background: -webkit-gradient(linear, left top, left bottom, from(rgb(60, 60, 60)), to(rgb(80, 80, 80)));
background: rgb(80, 80, 80);
box-shadow: inset 0 0 1px rgb(150, 150, 150), inset 0 -.05em .4em rgb(80, 80, 80), 0 .1em 0 rgb(30, 30, 30), 0 .1em .1em rgba(0, 0, 0, .3);
color: rgb(250, 250, 250);
text-shadow: -1px -1px 0 rgb(70, 70, 70);
}
kbd.light {
background: rgb(250, 250, 250);
background: -moz-linear-gradient(top, rgb(210, 210, 210), rgb(255, 255, 255));
background: -webkit-gradient(linear, left top, left bottom, from(rgb(210, 210, 210)), to(rgb(255, 255, 255)));
color: rgb(50, 50, 50);
text-shadow: 0 0 2px rgb(255, 255, 255);
-moz-box-shadow: inset 0 0 1px rgb(255, 255, 255), inset 0 0 .4em rgb(200, 200, 200), 0 .1em 0 rgb(130, 130, 130), 0 .11em 0 rgba(0, 0, 0, .4), 0 .1em .11em rgba(0, 0, 0, .9);
-webkit-box-shadow: inset 0 0 1px rgb(255, 255, 255), inset 0 0 .4em rgb(200, 200, 200), 0 .1em 0 rgb(130, 130, 130), 0 .11em 0 rgba(0, 0, 0, .4), 0 .1em .11em rgba(0, 0, 0, .9);
background: -moz-linear-gradient(top, rgb(210, 210, 210), rgb(255, 255, 255));
background: -webkit-gradient(linear, left top, left bottom, from(rgb(210, 210, 210)), to(rgb(255, 255, 255)));
background: rgb(250, 250, 250);
box-shadow: inset 0 0 1px rgb(255, 255, 255), inset 0 0 .4em rgb(200, 200, 200), 0 .1em 0 rgb(130, 130, 130), 0 .11em 0 rgba(0, 0, 0, .4), 0 .1em .11em rgba(0, 0, 0, .9);
color: rgb(50, 50, 50);
text-shadow: 0 0 2px rgb(255, 255, 255);
}

View File

@ -14,7 +14,7 @@
</head>
<body>
<div class="no-gamepad">
<div class="instructions">
<p>Press <kbd>H</kbd> to read instructions.</p>
<svg version="1.1" viewBox="0 0 549.3125 367.98749" xml:space="preserve"
xmlns="http://www.w3.org/2000/svg">
@ -80,7 +80,7 @@
</svg>
</div>
<div id="gamepad"></div>
<div id="help">
<div id="help-popout">
<h2>Help</h2>
<h3>Instructions</h3>

View File

@ -11,8 +11,8 @@ class Gamepad {
// cached DOM references
this.$body = $("body");
this.$gamepad = $("#gamepad");
this.$nogamepad = $(".no-gamepad");
this.$help = $("#help");
this.$instructions = $(".instructions");
this.$helpPopout = $("#help-popout");
this.$gamepadList = $("#gamepad-list");
this.backgroundColors = [
@ -167,7 +167,7 @@ class Gamepad {
// cancel the queued display of the instructions animation, if any
window.clearTimeout(this.helpTimeout);
// hide the instructions animation
this.$nogamepad.show();
this.$instructions.show();
// enqueue a delayed display of the instructions animation
this.hideInstructions();
@ -181,12 +181,12 @@ class Gamepad {
hideInstructions(hideNow = false) {
// hide the message right away if needed
if (hideNow) {
this.$nogamepad.hide();
this.$instructions.hide();
}
// hide instructions animation if no gamepad is active after X ms
this.helpTimeout = window.setTimeout(() => {
this.$nogamepad.fadeOut();
this.$instructions.fadeOut();
}, this.helpDelay);
}
@ -400,7 +400,7 @@ class Gamepad {
// hide the help messages
this.hideInstructions(true);
this.$help.removeClass("active");
this.$helpPopout.removeClass("active");
// update local references
this.index = index;
@ -476,9 +476,6 @@ class Gamepad {
this.$gamepad.empty();
}
// update navigation hash
this.updateSettings({ player: null });
// enqueue a display of the instructions animation
this.displayInstructions();
this.debug = false;
@ -547,6 +544,8 @@ class Gamepad {
this.updateButtons(activeGamepad);
this.updateAxes(activeGamepad);
this.activeGamepad = activeGamepad;
}
/**
@ -557,6 +556,10 @@ class Gamepad {
updateButtons(gamepad) {
// update the buttons
for (let index = 0; index < gamepad.buttons.length; index++) {
if (this.activeGamepad && this.activeGamepad.buttons[index].value == gamepad.buttons[index].value) {
return;
}
// find the DOM element
const $button = this.mapping.buttons[index];
if (!$button) {
@ -586,6 +589,10 @@ class Gamepad {
updateAxes(gamepad) {
// update the axes
for (let index = 0; index < gamepad.axes.length; index++) {
if (this.activeGamepad && this.activeGamepad.axes[index].value == gamepad.axes[index].value) {
return;
}
// find the DOM element
const $axis = this.mapping.axes[index];
if (!$axis) {
@ -803,7 +810,7 @@ class Gamepad {
* Toggles the on-screen help message
*/
toggleHelp() {
this.$help.toggleClass("active");
this.$helpPopout.toggleClass("active");
// save statistics
if (!!window.ga) {
@ -811,7 +818,7 @@ class Gamepad {
eventCategory: "Gamepad",
eventAction: "toggle-help",
eventLabel: "Toggle Help",
eventValue: this.$help.is("active"),
eventValue: this.$helpPopout.is("active"),
});
}
}