Code:
// ==UserScript==
// @name Input Display - Free Rider HD
// @version 1
// @author Calculamatrise
// @match *://frhd.kanoapps.com/*
// @match *://www.freeriderhd.com/*
// @icon https://www.google.com/s2/favicons?sz=64&domain=freeriderhd.com
// ==/UserScript==
GameManager.on("stateChange", function(state) {
if (this.game !== null && !this.game.altered) {
this.game.currentScene.altered = true;
const update = this.game.currentScene.update;
this.game.currentScene.update = function() {
update.apply(this, arguments);
drawInputDisplay.call(this, this.game.canvas);
}
console.log("test", this.game);
}
});
function drawInputDisplay(canvas = document.createElement("canvas")) {
const gamepad = this.playerManager._players[this.camera.focusIndex]._gamepad.downButtons;
const ctx = canvas.getContext("2d");
let size = 8;
let offset = {
x: size,
y: canvas.height - size * 10
}
ctx.lineJoin = "round";
ctx.lineCap = "round";
ctx.lineWidth = size / 2;
ctx.strokeStyle = "#000";
ctx.fillStyle = "#000";
ctx.strokeRect(offset.x, offset.y, size * 4, size * 4);
gamepad.z && ctx.fillRect(offset.x, offset.y, size * 4, size * 4);
ctx.strokeRect(offset.x + 5 * size, offset.y, size * 4, size * 4);
gamepad.up && ctx.fillRect(offset.x + 5 * size, offset.y, size * 4, size * 4);
ctx.strokeRect(offset.x, offset.y + 5 * size, size * 4, size * 4);
gamepad.left && ctx.fillRect(offset.x, offset.y + 5 * size, size * 4, size * 4);
ctx.strokeRect(offset.x + 5 * size, offset.y + 5 * size, size * 4, size * 4);
gamepad.down && ctx.fillRect(offset.x + 5 * size, offset.y + 5 * size, size * 4, size * 4);
ctx.strokeRect(offset.x + 10 * size, offset.y + 5 * size, size * 4, size * 4);
gamepad.right && ctx.fillRect(offset.x + 10 * size, offset.y + 5 * size, size * 4, size * 4);
let activeStroke = "#fff";
let inactiveStroke = "#000";
ctx.lineWidth = size / 3;
ctx.strokeStyle = gamepad.z ? activeStroke : inactiveStroke;
ctx.beginPath();
ctx.moveTo(offset.x + 2.7 * size, offset.y + 3 * size);
ctx.lineTo(offset.x + 1.2 * size, offset.y + 3 * size);
ctx.lineTo(offset.x + 2.7 * size, offset.y + 1 * size);
ctx.lineTo(offset.x + 1.2 * size, offset.y + 1 * size);
ctx.stroke();
ctx.strokeStyle = gamepad.up ? activeStroke : inactiveStroke;
ctx.beginPath();
ctx.moveTo(offset.x + 6.2 * size, offset.y + 2.7 * size);
ctx.lineTo(offset.x + 7 * size, offset.y + 1.2 * size);
ctx.lineTo(offset.x + 7.8 * size, offset.y + 2.7 * size);
ctx.stroke();
ctx.strokeStyle = gamepad.left ? activeStroke : inactiveStroke;
ctx.beginPath();
ctx.moveTo(offset.x + 2.5 * size, offset.y + 7.8 * size);
ctx.lineTo(offset.x + 1.2 * size, offset.y + 7 * size);
ctx.lineTo(offset.x + 2.5 * size, offset.y + 6.2 * size);
ctx.stroke();
ctx.strokeStyle = gamepad.down ? activeStroke : inactiveStroke;
ctx.beginPath();
ctx.moveTo(offset.x + 6.2 * size, offset.y + 6.2 * size);
ctx.lineTo(offset.x + 7 * size, offset.y + 7.8 * size);
ctx.lineTo(offset.x + 7.8 * size, offset.y + 6.2 * size);
ctx.stroke();
ctx.strokeStyle = gamepad.right ? activeStroke : inactiveStroke;
ctx.beginPath();
ctx.moveTo(offset.x + 11.5 * size, offset.y + 7.8 * size);
ctx.lineTo(offset.x + 12.8 * size, offset.y + 7 * size);
ctx.lineTo(offset.x + 11.5 * size, offset.y + 6.2 * size);
ctx.stroke();
}