xxxxxxxxxx
106
let colour
let controllers = []
function setup() {
colour=color('green')
createCanvas(450, 512)
background(120,0,0)
noStroke()
window.addEventListener("gamepadconnected", function(e) {
gamepadHandler(e, true);
console.log("Gamepad connected at index %d: %s. %d buttons, %d axes.",
e.gamepad.index, e.gamepad.id,
e.gamepad.buttons.length, e.gamepad.axes.length);
});
window.addEventListener("gamepaddisconnected", function(e) {
console.log("Gamepad disconnected from index %d: %s",
e.gamepad.index, e.gamepad.id);
colour=color(120,0,0)
gamepadHandler(e, false);
});
}
function draw() {
background(colour)
drawGamepad()
status()
}
function status()
{
color('cyan')
ellipse(10,300,10,10)
}
function gamepadHandler(event, connecting) {
let gamepad = event.gamepad;
if (connecting) {
print("Connecting to controller "+gamepad.index)
controllers[gamepad.index] = gamepad
} else {
delete controllers[gamepad.index]
}
}
function drawGamepad()
{
let dx=20
let dy=100
let dj=40
var gamepads = navigator.getGamepads()
for (let i in controllers)
{
translate(0,dy,0)
push()
let controller=gamepads[i]//controllers[i]
if (controller.buttons)
{
for (let btn=0;btn<controller.buttons.length;btn++)
{
let val=controller.buttons[btn]
strokeWeight(2)
stroke('white')
if (buttonPressed(val))
{
fill('green')
stroke('white')
}
else
{
fill('red')
stroke('grey')
}
ellipse(btn*dx+dx,i*dx+dx,dx*0.8)
}
}
if (controller.axes)
{
let axes=controller.axes
for (let axis=0;axis<axes.length;axis++)
{
let val=controller.axes[axis]
translate(dj,0)
fill('grey')
stroke('white')
rect(0,dx*2,dx,dx*4)
noStroke()
fill('yellow')
rect(0,(val*dx*2)+1+dx*4, dx,dx/4)
fill('white')
text(nf(val,0,2),0,dx*8)
}
}
pop()
}
}
function buttonPressed(b) {
if (typeof(b) == "object") {
return b.pressed; // binary
}
return b > 0.9; // analog value
}