126 lines
3.7 KiB
Java
126 lines
3.7 KiB
Java
package gameplay.input;
|
|
|
|
import engine.input.GamepadInput;
|
|
import engine.input.InputConst;
|
|
import gameplay.input.ButtonIG;
|
|
|
|
import static gameplay.input.ButtonIG.*;
|
|
|
|
/**
|
|
* The class handling the parsing of one input.
|
|
* @author Victor
|
|
*
|
|
*/
|
|
public class Inputs {
|
|
private static final int numberOfInputs = 8;
|
|
private static boolean[] tab;
|
|
|
|
public Inputs() {
|
|
this.tab = new boolean[numberOfInputs];
|
|
for(int i = 0; i < numberOfInputs; i ++) {
|
|
this.tab[i] = false;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* record one input
|
|
* @param b the input to be recorded
|
|
*/
|
|
public void recordOneInput(ButtonIG b) {
|
|
int i = b.toInt();
|
|
this.tab[i] = true;
|
|
}
|
|
|
|
/**
|
|
* Check if a specific input (for example UP) has been recorded
|
|
* @param b the button to be checked
|
|
* @return
|
|
*/
|
|
public boolean containsInput(ButtonIG b) {
|
|
return this.tab[b.toInt()];
|
|
}
|
|
|
|
/**
|
|
* Check if a number of inputs are contained simultaneously
|
|
* @param in a number of inputs. Check if those are containes in this
|
|
* @return true if all inputs of in are also in this
|
|
*/
|
|
public boolean containsInputs(Inputs in) {
|
|
for(int i = 0; i < numberOfInputs; i++) {
|
|
if(this.tab[i] != in.getInputs()[i]) {return false;}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Check if a number of inputs are contained simultaneously, in the form of an array of Buttons
|
|
* @param bs a number of inputs. Check if those are contained in this
|
|
* @return true if all inputs of in are also in this
|
|
*/
|
|
public boolean containsButtonTab(ButtonIG[] bs) {
|
|
for(int i = 0; i < bs.length; i++) {
|
|
if(!this.containsInput(bs[i])) { return false;}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Check if a number of inputs are contained simultaneously, in the form of an array of Buttons.
|
|
* Contrary to the other containsButtonTab, will check that only these specified buttons are pressed.
|
|
* @param bs a number of inputs. Check if those are contained in this
|
|
* @return true if all inputs of in are also in this
|
|
*/
|
|
public boolean equalsButtonTab(ButtonIG[] bs) {
|
|
ButtonIG[] directions = {DOWN,FORWARD,UP,BACK};
|
|
ButtonIG[] buttons = {A,B,C,D};
|
|
Inputs inp = new Inputs();
|
|
for(int i = 0; i < bs.length; i++) {
|
|
inp.recordOneInput(bs[i]);
|
|
}
|
|
if(!this.containsButtonTab(bs)){return false;}
|
|
for(ButtonIG d : directions) {
|
|
if(!this.containsInput(d) && inp.containsInput(d)) { return false;}
|
|
if(this.containsInput(d) && !inp.containsInput(d)) { return false;}
|
|
}
|
|
for(ButtonIG d : buttons) {
|
|
if(!this.containsInput(d) && inp.containsInput(d)) { return false;}
|
|
if(this.containsInput(d) && !inp.containsInput(d)) { return false;}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
|
|
public boolean[] getInputs() {
|
|
return this.tab;
|
|
}
|
|
|
|
public void recordFromGamepad(GamepadInput pad, boolean facesRight) {
|
|
this.tab[ButtonIG.UP.toInt()] = pad.checkPressed(InputConst.up);
|
|
this.tab[DOWN.toInt()] = pad.checkPressed(InputConst.down);
|
|
this.tab[ButtonIG.BACK.toInt()] = (pad.checkPressed(InputConst.left) && facesRight) || (pad.checkPressed(InputConst.right)&&!facesRight);
|
|
this.tab[FORWARD.toInt()] = (pad.checkPressed(InputConst.right) && facesRight) || (pad.checkPressed(InputConst.left) && !facesRight);
|
|
this.tab[ButtonIG.A.toInt()] = pad.checkPressed(InputConst.buttonX);
|
|
this.tab[ButtonIG.B.toInt()] = pad.checkPressed(InputConst.buttonA);
|
|
this.tab[ButtonIG.C.toInt()] = pad.checkPressed(InputConst.buttonY);
|
|
this.tab[ButtonIG.D.toInt()] = pad.checkPressed(InputConst.buttonB);
|
|
}
|
|
|
|
public String toString() {
|
|
String s = "";
|
|
for(int i = 0; i < numberOfInputs; i++) {
|
|
if(this.tab[i]) {s = s + ButtonIG.intToButton(i).toString() + " "; }
|
|
}
|
|
return s;
|
|
}
|
|
|
|
/**
|
|
* Clears the input (puts them all to false)
|
|
*/
|
|
public void clear(){
|
|
for(int i = 0; i < numberOfInputs; i++) {
|
|
this.tab[i] = false;
|
|
}
|
|
}
|
|
|
|
}
|