/*******************************************************************************
* Copyright 2011 See AUTHORS file.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
******************************************************************************/
package com.badlogic.gdx.tests.extensions;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.controllers.Controller;
import com.badlogic.gdx.controllers.ControllerListener;
import com.badlogic.gdx.controllers.Controllers;
import com.badlogic.gdx.controllers.PovDirection;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.math.Vector3;
import com.badlogic.gdx.scenes.scene2d.InputEvent;
import com.badlogic.gdx.scenes.scene2d.Stage;
import com.badlogic.gdx.scenes.scene2d.ui.List;
import com.badlogic.gdx.scenes.scene2d.ui.ScrollPane;
import com.badlogic.gdx.scenes.scene2d.ui.Skin;
import com.badlogic.gdx.scenes.scene2d.ui.Table;
import com.badlogic.gdx.scenes.scene2d.ui.TextButton;
import com.badlogic.gdx.scenes.scene2d.utils.ClickListener;
import com.badlogic.gdx.tests.utils.GdxTest;
/** Test for the gdx-controllers extension. */
public class ControllersTest extends GdxTest {
String descriptor;
Skin skin;
Table ui;
Stage stage;
ScrollPane scrollPane;
List<String> console;
@Override
public void create () {
setupUi();
}
void print (String message) {
String[] lines = console.getItems().toArray(String.class);
String[] newLines = new String[lines.length + 1];
System.arraycopy(lines, 0, newLines, 0, lines.length);
newLines[newLines.length - 1] = message;
console.setItems(newLines);
scrollPane.invalidate();
scrollPane.validate();
scrollPane.setScrollPercentY(1.0f);
}
void clear () {
console.setItems(new String[0]);
}
private void setupUi () {
// setup a tiny ui with a console and a clear button.
skin = new Skin(Gdx.files.internal("data/uiskin.json"));
stage = new Stage();
ui = new Table();
ui.setSize(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
console = new List(skin);
scrollPane = new ScrollPane(console);
scrollPane.setScrollbarsOnTop(true);
TextButton clear = new TextButton("Clear", skin);
ui.add(scrollPane).expand(true, true).fill();
ui.row();
ui.add(clear).expand(true, false).fill();
stage.addActor(ui);
clear.addListener(new ClickListener() {
@Override
public void clicked (InputEvent event, float x, float y) {
clear();
}
});
Gdx.input.setInputProcessor(stage);
}
@Override
public void resize (int width, int height) {
ui.setSize(width, height);
ui.invalidate();
stage.getViewport().update(width, height, true);
}
boolean initialized = false;
private void initialize () {
if (initialized) return;
// print the currently connected controllers to the console
print("Controllers: " + Controllers.getControllers().size);
int i = 0;
for (Controller controller : Controllers.getControllers()) {
print("#" + i++ + ": " + controller.getName());
}
if (Controllers.getControllers().size == 0) print("No controllers attached");
// setup the listener that prints events to the console
Controllers.addListener(new ControllerListener() {
public int indexOf (Controller controller) {
return Controllers.getControllers().indexOf(controller, true);
}
@Override
public void connected (Controller controller) {
print("connected " + controller.getName());
int i = 0;
for (Controller c : Controllers.getControllers()) {
print("#" + i++ + ": " + c.getName());
}
}
@Override
public void disconnected (Controller controller) {
print("disconnected " + controller.getName());
int i = 0;
for (Controller c : Controllers.getControllers()) {
print("#" + i++ + ": " + c.getName());
}
if (Controllers.getControllers().size == 0) print("No controllers attached");
}
@Override
public boolean buttonDown (Controller controller, int buttonIndex) {
print("#" + indexOf(controller) + ", button " + buttonIndex + " down");
return false;
}
@Override
public boolean buttonUp (Controller controller, int buttonIndex) {
print("#" + indexOf(controller) + ", button " + buttonIndex + " up");
return false;
}
@Override
public boolean axisMoved (Controller controller, int axisIndex, float value) {
print("#" + indexOf(controller) + ", axis " + axisIndex + ": " + value);
return false;
}
@Override
public boolean povMoved (Controller controller, int povIndex, PovDirection value) {
print("#" + indexOf(controller) + ", pov " + povIndex + ": " + value);
return false;
}
@Override
public boolean xSliderMoved (Controller controller, int sliderIndex, boolean value) {
print("#" + indexOf(controller) + ", x slider " + sliderIndex + ": " + value);
return false;
}
@Override
public boolean ySliderMoved (Controller controller, int sliderIndex, boolean value) {
print("#" + indexOf(controller) + ", y slider " + sliderIndex + ": " + value);
return false;
}
@Override
public boolean accelerometerMoved (Controller controller, int accelerometerIndex, Vector3 value) {
// not printing this as we get to many values
return false;
}
});
initialized = true;
}
@Override
public void render () {
initialize();
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
stage.act(Gdx.graphics.getDeltaTime());
stage.draw();
}
}