package net.fourbytes.shadow;
import com.badlogic.gdx.controllers.Controller;
import com.badlogic.gdx.utils.Array;
import net.fourbytes.shadow.Input.Key;
public class SetupControllerLevel extends MenuLevel {
public static Controller controller;
public SetupControllerLevel() {
this(null);
}
public SetupControllerLevel(final MenuLevel parent) {
super(parent);
showtitle = false;
//Input.keylisteners.add(this);
if (controller == null) {
controller = Shadow.controllerHelper.numerator.getNextController(0);
}
if (controller == null) {
addMenuItemsFailed();
} else {
addMenuItemsMapping();
}
ready = true;
}
protected void addMenuItemsFailed() {
removeMenuItems();
final MenuItem item = new MenuItem(this, "No compatible controller found",
new Runnable() {
@Override
public void run() {
}
});
items.add(item);
items.add(new MenuItem(this, "Back", new Runnable(){public void run(){
Shadow.level = parent;
}}));
}
protected void addMenuItemsMapping() {
removeMenuItems();
items.add(getMenuItemForCurrentController());
items.add(getMenuItemFor(Input.up));
items.add(getMenuItemFor(Input.down));
items.add(getMenuItemFor(Input.left));
items.add(getMenuItemFor(Input.right));
items.add(getMenuItemFor(Input.jump));
items.add(getMenuItemFor(Input.pause));
items.add(getMenuItemFor(Input.enter));
items.add(getMenuItemFor(Input.androidBack));
items.add(new MenuItem(this, "Back", new Runnable(){public void run(){
Shadow.level = parent;
}}));
}
protected void addMenuItemsControllers() {
removeMenuItems();
for (Controller controller : Shadow.controllerHelper.controllers) {
items.add(getMenuItemFor(controller));
}
}
protected void removeMenuItems() {
if (Shadow.controllerHelper.assignKey != null) {
Shadow.controllerHelper.assignKey = null;
Shadow.controllerHelper.assignKeyHelper = null;
Shadow.controllerHelper.assignKeyController = null;
}
items.clear();
}
protected MenuItem getMenuItemFor(final Key key) {
final MenuItem item = new MenuItem(this, key.name+" ("+
Shadow.controllerHelper.getInputLabelForKey(key, controller)+")", null);
item.action = new Runnable(){public void run(){
Shadow.controllerHelper.assignKey = key;
Shadow.controllerHelper.assignKeyHelper = item;
Shadow.controllerHelper.assignKeyController = controller;
}};
return item;
}
protected MenuItem getMenuItemFor(final Controller controller) {
final MenuItem item = new MenuItem(this, controller.getName()+" (#"+
(Shadow.controllerHelper.numerator.getPlayerForController(controller)+1)+")", null);
item.action = new Runnable(){public void run(){
SetupControllerLevel.controller = controller;
addMenuItemsMapping();
}};
return item;
}
protected MenuItem getMenuItemForCurrentController() {
final MenuItem item = new MenuItem(this, controller.getName()+" (#"+
(Shadow.controllerHelper.numerator.getPlayerForController(controller)+1)+")", null);
item.action = new Runnable(){public void run(){
addMenuItemsControllers();
}};
return item;
}
@Override
public void keyDown(Key key) {
if (Shadow.level != this) {
return;
}
if (Shadow.controllerHelper.assignKey != null) {
if (key == Input.pause || key == Input.androidBack) {
Array<ControllerHelper.ControllerInput> keymap =
Shadow.controllerHelper.keymap.get(Shadow.controllerHelper.assignKey);
if (keymap != null) {
for (ControllerHelper.ControllerInput input : keymap) {
if (input.controller == Shadow.controllerHelper.assignKeyController) {
keymap.removeValue(input, false);
}
}
}
if (Shadow.controllerHelper.assignKeyHelper != null) {
Shadow.controllerHelper.assignKeyHelper.text = Shadow.controllerHelper.assignKey.name+" ("+Shadow.controllerHelper.getInputLabelForKey(Shadow.controllerHelper.assignKey)+")";
}
Shadow.controllerHelper.assignKey = null;
Shadow.controllerHelper.assignKeyHelper = null;
Shadow.controllerHelper.assignKeyController = null;
}
return;
}
super.keyDown(key);
}
}