Gamepad input
A sample showing how to listen to gamepad input. In this example, buttons (gamepadDown, gamepadUp) are handled via events and axis values (gamepadAxisValue()) via polling in update loop, just to show how the two ways of getting gamepad input work.
import ceramic.GamepadButton;
import ceramic.Scene;
import ceramic.Text;
import ceramic.Utils;
class MainScene extends Scene {
/**
* A text object to display info about gamepad input
*/
var text:Text;
/**
* The list of currently pressed buttons
*/
var pressedButtons:Map<Int,Array<GamepadButton>> = new Map();
override function create() {
// Use a text object to display info about keyboard input
text = new Text();
text.pointSize = 16;
text.anchor(0.5, 0.5);
text.pos(width * 0.5, height * 0.5);
text.align = CENTER;
add(text);
// Bind gamepad button events
input.onGamepadDown(this, gamepadDown);
input.onGamepadUp(this, gamepadUp);
updateText();
}
override function update(delta:Float) {
updateText();
}
function gamepadDown(gamepadId:Int, button:GamepadButton) {
var pressedButtonsForGamepad = pressedButtons.get(gamepadId);
if (pressedButtonsForGamepad == null) {
pressedButtonsForGamepad = [];
pressedButtons.set(gamepadId, pressedButtonsForGamepad);
}
if (!pressedButtonsForGamepad.contains(button)) {
pressedButtonsForGamepad.push(button);
}
}
function gamepadUp(gamepadId:Int, button:GamepadButton) {
var pressedButtonsForGamepad = pressedButtons.get(gamepadId);
if (pressedButtonsForGamepad != null) {
pressedButtonsForGamepad.remove(button);
}
}
function updateText() {
// Update text depending on the currently pressed buttons
var hasButtonsPressed = false;
var content = [];
for (gamepadId => pressedButtonsForGamepad in pressedButtons) {
if (pressedButtonsForGamepad.length > 0) {
hasButtonsPressed = true;
content.push('[[ GAMEPAD #$gamepadId ]]');
content.push('');
for (i in 0...pressedButtonsForGamepad.length) {
var button = pressedButtonsForGamepad[i];
content.push(
'$button'
);
}
// Also add some axis values
content.push('LEFT AXIS: ' + Utils.round(input.gamepadAxisValue(gamepadId, LEFT_X), 2) + ', ' + Utils.round(input.gamepadAxisValue(gamepadId, LEFT_Y), 2));
content.push('RIGHT AXIS: ' + Utils.round(input.gamepadAxisValue(gamepadId, RIGHT_X), 2) + ', ' + Utils.round(input.gamepadAxisValue(gamepadId, RIGHT_Y), 2));
content.push('');
}
}
if (!hasButtonsPressed) {
text.content = 'press any button (gamepad)';
}
else {
text.content = content.join('\n');
}
}
}
Next example ➔ Drawing lines