Built a basic movement test, can't test because it doesn't recognize my gamepads.

This commit is contained in:
no
2021-06-10 11:50:38 +02:00
parent f56c84ef8e
commit 93f5727569
5 changed files with 227 additions and 117 deletions

View File

@ -1,7 +1,11 @@
package gameplay.match;
import engine.Engine;
import engine.input.Button;
import engine.input.GamepadInput;
import engine.math.Vector3f;
import engine.object.ObjectGl;
import gameplay.Characters.Blue.CharacterBlue;
import gameplay.actions.Attack;
import gameplay.actions.attackPart;
import gameplay.actions.Throw;
@ -36,42 +40,36 @@ public class match {
/**
* the level of the "ground", used to determine if a character is in the air or not.
*/
private static final int groundLevel = 250;
private static final int groundLevel = 200;
private int timer;
private InputBuffer inputsP1, inputsP2;
private int roundsWonP1, roundsWonP2;
private Character p1, p2; //characters of player 1 and 2
private static int timer;
private static InputBuffer inputsP1, inputsP2;
private static int roundsWonP1, roundsWonP2;
private static Character p1, p2; //characters of player 1 and 2
private static long timeStamp1;
private static long timeStamp2;
private static int frameCount;
private static int oldPosXp1;
private static int oldPosXp2;
private static int oldPosYp1;
private static int oldPosYp2;
private static GamepadInput gamepad1 = null;
private static GamepadInput gamepad2 = null;
/**
* base constructor of the match class.
* Initiates a new match with with two given characters
*/
public match(Character p1, Character p2) {
this.timer = 99;
this.inputsP1 = new InputBuffer(inputBufferSize);
this.inputsP2 = new InputBuffer(inputBufferSize);
this.p1 = p1;
this.p2 = p2;
this.roundsWonP1 = 0;
this.roundsWonP2 = 0;
}
private static ObjectGl objP1,objP2;
private static Engine engine;
private static Frame f;
/**
* Starts a new round, by placing the timer back at base value, characters back at full hp and such.
*/
private void startNewRound() {
this.timer = 99;
this.inputsP1 = new InputBuffer(inputBufferSize);
this.inputsP2 = new InputBuffer(inputBufferSize);
this.p1.setPos(-500, groundLevel); //TODO : change to better values if needed
this.p2.setPos(500, groundLevel); //TODO : change to better values if needed
private static void startNewRound() {
timer = 99;
inputsP1 = new InputBuffer(inputBufferSize);
inputsP2 = new InputBuffer(inputBufferSize);
p1.setPos(-750, groundLevel); //TODO : change to better values if needed
p2.setPos(-750, groundLevel); //TODO : change to better values if needed
}
/**
@ -79,7 +77,7 @@ public class match {
* Used for playing animations and such.
* TODO : Implement this once we know what to do.
*/
private void endRound() {
private static void endRound() {
}
@ -88,7 +86,7 @@ public class match {
* Used for playing animations and such.
* TODO : Implement this once we know what to do.
*/
private void endMatch() {
private static void endMatch() {
}
@ -156,7 +154,32 @@ public class match {
} */
boolean Joystick1Present = glfwJoystickPresent(GLFW_JOYSTICK_1);
boolean Joystick2Present = glfwJoystickPresent(GLFW_JOYSTICK_2);
match match = new match(new Character(),new Character()); //TODO : Change to not empty chars
engine = new Engine(640, 480, new Vector3f(4.0f, 3.0f));
engine.init();
String path = "textures/Sprite.png";
String pathToBG = "textures/background_beach.png";
ObjectGl background = new ObjectGl(0f,1f,1f,10f, pathToBG, null);
background.setTextureWrap(0,0,621, 224, ObjectGl.DEFAULT);
background.translate(new Vector3f(-3011.0f, 1400.0f, 1.0f));
engine.add_objectGl(background);
p1 = CharacterBlue.generateCharBlue();
p2 = CharacterBlue.generateCharBlue();
objP1 = new ObjectGl(1f, 60f, 80f, 5f, path, null);
objP2 = new ObjectGl(2f, 60f, 80f, 5f, path, null);
engine.add_objectGl(objP1);
engine.add_objectGl(objP2);
f = p1.getCurrentframe();
objP1.setTextureWrap(f.getSprite()[0], f.getSprite()[1], f.getSprite()[2], f.getSprite()[3], ObjectGl.STICK_TOP);
objP1.translate(new Vector3f(-750,200,0));
f = p2.getCurrentframe();
objP2.setTextureWrap(f.getSprite()[0], f.getSprite()[1], f.getSprite()[2], f.getSprite()[3], ObjectGl.STICK_TOP);
objP2.translate(new Vector3f(750,200,0));
objP2.flipTextureWrapH();
if (Joystick1Present) {
gamepad1 = new GamepadInput(GLFW_JOYSTICK_1);
@ -166,10 +189,12 @@ public class match {
gamepad2 = new GamepadInput(GLFW_JOYSTICK_2);
gamepad2.inputRefresh();
}
ac(0);
}
private void ac(int i) {
private static void ac(int i) {
System.out.println(i);
switch (i) {
//initiate a round
@ -182,6 +207,11 @@ public class match {
//checks if one or both of the chars are out of health
case 10:
oldPosXp1 = p1.getPosX();
oldPosXp2 = p2.getPosX();
oldPosYp1 = p1.getPosY();
oldPosYp2 = p2.getPosY();
if(p1.getCurrentHP() <= 0 && p2.getCurrentHP() <= 0) { ac(11);}
else if(p1.getCurrentHP() <= 0) { ac(12);}
else if(p2.getCurrentHP() <= 0) { ac(13);}
@ -210,8 +240,8 @@ public class match {
//read both players inputs
case 20:
gamepad1.inputRefresh();
gamepad2.inputRefresh();
inputsP1.recordInputsFromGamepad(gamepad1, p1.getPosX() < p2.getPosX());
gamepad2.inputRefresh();
inputsP2.recordInputsFromGamepad(gamepad2, p2.getPosX() <= p1.getPosX());
handleInputs(p1, inputsP1);
handleInputs(p2, inputsP2);
@ -238,18 +268,29 @@ public class match {
nextFrame(p2,inputsP2);
updatePos(p1);
updatePos(p2);
f = p1.getCurrentframe();
objP1.setTextureWrap(f.getSprite()[0], f.getSprite()[1], f.getSprite()[2], f.getSprite()[3], ObjectGl.STICK_TOP);
objP1.translate(new Vector3f(p1.getPosX()-oldPosXp1,p1.getPosY()-oldPosYp1,0));
f = p2.getCurrentframe();
objP2.setTextureWrap(f.getSprite()[0], f.getSprite()[1], f.getSprite()[2], f.getSprite()[3], ObjectGl.STICK_TOP);
objP2.translate(new Vector3f(p2.getPosX()-oldPosXp2,p2.getPosY()-oldPosYp2,0));
boolean p1LooksRight = p1.getPosX() < p2.getPosX();
if(p1LooksRight) {
Frame f = new Frame();
f.clone(p2.getCurrentframe());
f.invertHitBoxes();
p2.setCurrentFrame(f);
Frame nf = new Frame();
nf.clone(p2.getCurrentframe());
nf.invertHitBoxes();
p2.setCurrentFrame(nf);
objP2.flipTextureWrapH();
} else {
Frame f = new Frame();
f.clone(p1.getCurrentframe());
f.invertHitBoxes();
p1.setCurrentFrame(f);
Frame nf = new Frame();
nf.clone(p1.getCurrentframe());
nf.invertHitBoxes();
p1.setCurrentFrame(nf);
objP1.flipTextureWrapH();
}
engine.update();
engine.render();
ac(23);
break;
@ -472,7 +513,7 @@ public class match {
* @param c the character
* @param in the input buffer corresponding to the character
*/
private void nextFrame(Character c, InputBuffer in) {
private static void nextFrame(Character c, InputBuffer in) {
if(!c.getFrames().getNextframe().equals(null)){
c.goToNextFrames();
} else {
@ -496,7 +537,7 @@ public class match {
}
}
private void updatePos(Character c) {
private static void updatePos(Character c) {
c.setPos((int)(c.getPosX()+c.getCurrentframe().getMove_x()),(int)(c.getPosY()+c.getCurrentframe().getMove_y()));
}