LNXSDK/Kha/Tests/Gamepads/src/DigitalPadDisplay.hx
2025-01-22 16:18:30 +01:00

110 lines
2.5 KiB
Haxe

package;
using kha.graphics2.GraphicsExtension;
class DigitalPadDisplay {
var id : Int;
var x : Float;
var y : Float;
var available = false;
var axis = [for (i in 0...6) 0.0];
var buttons = [for (i in 0...16) false];
var dz = 0.2;
public function new( id : Int, x : Float, y : Float ) {
this.id = id;
this.x = x;
this.y = y;
if (kha.input.Gamepad.get(id) != null) {
available = true;
kha.input.Gamepad.get(id).notify(gamepad_axisHandler, gamepad_buttonHandler);
}
}
function gamepad_axisHandler( axisId : Int, value : Float ) {
axis[axisId] = value;
trace('gamepad_axisHandler ${axisId} - ${value}');
}
function gamepad_buttonHandler( buttonId : Int, value : Float ) {
buttons[buttonId] = value > dz || value < -dz;
trace('gamepad_buttonHandler ${buttonId} - ${value}');
}
public function render( g : kha.graphics2.Graphics ) {
var lg = kha.Color.fromBytes(200, 200, 200);
var bl = kha.Color.Black;
var gr = kha.Color.Green;
var dz = 0.2;
// rect
g.color = lg;
g.fillRect(x + 64, y + 16, 192, 80);
g.color = bl;
g.drawRect(x + 64, y + 16, 192, 80, 4);
// big left
g.color = lg;
g.fillCircle(x + 64, y + 64, 64);
g.color = bl;
g.drawCircle(x + 64, y + 64, 64, 4);
// dpad left
g.color = axis[0] > -dz ? lg : gr;
g.fillRect(x + 16, y + 48, 24, 24);
g.color = bl;
g.drawRect(x + 16, y + 48, 24, 24, 2);
// dpad right
g.color = axis[0] < dz ? lg : gr;
g.fillRect(x + 88, y + 48, 24, 24);
g.color = bl;
g.drawRect(x + 88, y + 48, 24, 24, 2);
// dpad top
g.color = axis[1] > -dz ? lg : gr;
g.fillRect(x + 52, y + 16, 24, 24);
g.color = bl;
g.drawRect(x + 52, y + 16, 24, 24, 2);
// dpad bottom
g.color = axis[1] < dz ? lg : gr;
g.fillRect(x + 52, y + 80, 24, 24);
g.color = bl;
g.drawRect(x + 52, y + 80, 24, 24, 2);
// big right
g.color = lg;
g.fillCircle(x + 256, y + 64, 64);
g.color = bl;
g.drawCircle(x + 256, y + 64, 64, 4);
// button left
g.color = !buttons[0] ? lg : gr;
g.fillCircle(x + 224, y + 64, 16);
g.color = bl;
g.drawCircle(x + 224, y + 64, 16, 2);
// button top
g.color = !buttons[1] ? lg : gr;
g.fillCircle(x + 256, y + 32, 16);
g.color = bl;
g.drawCircle(x + 256, y + 32, 16, 2);
// button right
g.color = !buttons[2] ? lg : gr;
g.fillCircle(x + 288, y + 64, 16);
g.color = bl;
g.drawCircle(x + 288, y + 64, 16, 2);
// button bottom
g.color = !buttons[3] ? lg : gr;
g.fillCircle(x + 256, y + 96, 16);
g.color = bl;
g.drawCircle(x + 256, y + 96, 16, 2);
}
}