Merge branch 'master' of
https://gitlab.istic.univ-rennes1.fr/fautin/jeu-de-combat.git Conflicts: .classpath
This commit is contained in:
commit
0d7c08aa5d
@ -6,6 +6,12 @@
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry including="**/*.java" kind="src" output="target/classes" path="src">
|
||||
<attributes>
|
||||
<attribute name="optional" value="true"/>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11">
|
||||
<attributes>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
|
15
pom.xml
15
pom.xml
@ -1,4 +1,6 @@
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
@ -6,7 +8,9 @@
|
||||
<artifactId>jeu-de-combat</artifactId>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
<name>Boulevard Combattant</name>
|
||||
<description>Jeu de combat inspiré de Street Fighter 3: Third Strike. Projet de fin d'année de L3.</description>
|
||||
<description>Jeu de combat inspiré de Street Fighter 3: Third Strike.
|
||||
Projet de fin d'année de L3.
|
||||
</description>
|
||||
<url>https://gitlab.istic.univ-rennes1.fr/fautin/jeu-de-combat</url>
|
||||
|
||||
<build>
|
||||
@ -140,6 +144,13 @@
|
||||
<version>${javafx.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- https://mvnrepository.com/artifact/com.googlecode.json-simple/json-simple -->
|
||||
<dependency>
|
||||
<groupId>com.googlecode.json-simple</groupId>
|
||||
<artifactId>json-simple</artifactId>
|
||||
<version>1.1.1</version>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
</project>
|
BIN
sound/jump.ogg
Normal file
BIN
sound/jump.ogg
Normal file
Binary file not shown.
BIN
sound/jump.wav
Normal file
BIN
sound/jump.wav
Normal file
Binary file not shown.
54
src/configuration/JsonToJava.java
Normal file
54
src/configuration/JsonToJava.java
Normal file
@ -0,0 +1,54 @@
|
||||
package configuration;
|
||||
|
||||
import java.io.*;
|
||||
import org.json.simple.*;
|
||||
import org.json.simple.parser.*;
|
||||
|
||||
public class JsonToJava {
|
||||
|
||||
public static void main(String args[]) {
|
||||
|
||||
// initialize the parser
|
||||
JSONParser jsonP = new JSONParser();
|
||||
try {
|
||||
// read the json document
|
||||
JSONObject jsonO = (JSONObject) jsonP.parse(new FileReader("src/configuration/config.json"));
|
||||
|
||||
//to print all values
|
||||
//System.out.println(jsonO.values());
|
||||
|
||||
// isolate the "test" part and print it
|
||||
// String test = (String) jsonO.get("test");
|
||||
// System.out.println("ceci est un test :" + test);
|
||||
|
||||
|
||||
//select an element on the list
|
||||
JSONArray arene = (JSONArray) jsonO.get("arena");
|
||||
//print a case of this element
|
||||
System.out.println(arene.get(1));
|
||||
|
||||
JSONArray nb_players = (JSONArray) jsonO.get("nb_players");
|
||||
System.out.println(nb_players.get(1));
|
||||
|
||||
JSONArray character1 = (JSONArray) jsonO.get("character1");
|
||||
System.out.println(character1.get(1));
|
||||
|
||||
JSONArray character2 = (JSONArray) jsonO.get("character2");
|
||||
System.out.println(character2.get(1));
|
||||
|
||||
JSONArray resolution = (JSONArray) jsonO.get("resolution");
|
||||
System.out.println(resolution.get(1));
|
||||
|
||||
JSONArray button = (JSONArray) jsonO.get("button");
|
||||
System.out.println(button);
|
||||
|
||||
} catch (FileNotFoundException e) {
|
||||
e.printStackTrace();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
} catch (ParseException e) {
|
||||
e.printStackTrace();
|
||||
|
||||
}
|
||||
}
|
||||
}
|
@ -1,29 +1,55 @@
|
||||
{
|
||||
"arena": [
|
||||
"random",
|
||||
"arena1.png",
|
||||
"arena2.png",
|
||||
"random"
|
||||
"arena2.png"
|
||||
],
|
||||
"nb_players": [
|
||||
"1",
|
||||
"2"
|
||||
],
|
||||
"character1": [
|
||||
"random",
|
||||
"character1.png",
|
||||
"character2.png",
|
||||
"random"
|
||||
"character2.png"
|
||||
],
|
||||
"character2": [
|
||||
"random",
|
||||
"character1.png",
|
||||
"character1_swapcolor.png",
|
||||
"character2.png",
|
||||
"character2_swapcolor.png",
|
||||
"random"
|
||||
"character2_swapcolor.png"
|
||||
],
|
||||
"resolution": [
|
||||
"1280 x 1024",
|
||||
"1680 x 1050",
|
||||
"1920 x 1080",
|
||||
"800 x 600"
|
||||
{
|
||||
"width": "800",
|
||||
"height": "600"
|
||||
},
|
||||
{
|
||||
"width": "1280",
|
||||
"height": "1024"
|
||||
},
|
||||
{
|
||||
"width": "1680",
|
||||
"height": "1050"
|
||||
},
|
||||
{
|
||||
"width": "1920",
|
||||
"height": "1080"
|
||||
},
|
||||
{
|
||||
"persoWidth": "800",
|
||||
"persoHeight": "600"
|
||||
}
|
||||
],
|
||||
"button": [
|
||||
"UP",
|
||||
"DOWN",
|
||||
"RIGTH",
|
||||
"LEFT",
|
||||
"A",
|
||||
"B",
|
||||
"X",
|
||||
"Y"
|
||||
]
|
||||
}
|
||||
|
@ -1,7 +1,9 @@
|
||||
package engine;
|
||||
|
||||
import engine.input.*;
|
||||
import engine.math.*;
|
||||
import engine.object.*;
|
||||
import engine.sound.*;
|
||||
|
||||
import org.lwjgl.glfw.GLFWFramebufferSizeCallback;
|
||||
import org.lwjgl.glfw.GLFWVidMode;
|
||||
@ -20,13 +22,13 @@ public class Engine {
|
||||
|
||||
private final List<ObjectGl> objectsGl;
|
||||
|
||||
private static boolean present = glfwJoystickPresent(GLFW_JOYSTICK_1);
|
||||
|
||||
private boolean running;
|
||||
|
||||
private final int width;
|
||||
private final int height;
|
||||
|
||||
private float viewXPos;
|
||||
|
||||
/**
|
||||
* Create the engine and initial attributes use .init() to start the engine
|
||||
*/
|
||||
@ -37,6 +39,7 @@ public class Engine {
|
||||
this.height = height;
|
||||
ObjectGl.projection = Matrix4f.orthographic(-1000, 1000, -1000 * aspectRatio, 1000 * aspectRatio, 0.1f, 100.0f);
|
||||
ObjectGl.view = Matrix4f.translate(new Vector3f(0.0f, 0.0f, 1.0f));
|
||||
this.viewXPos = 0.0f;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -60,8 +63,8 @@ public class Engine {
|
||||
this.setWindow(glfwCreateWindow(width, height, "Boulevard Combattant", NULL, NULL));
|
||||
assert getWindow() != NULL;
|
||||
|
||||
|
||||
System.out.println(present);
|
||||
boolean present = glfwJoystickPresent(GLFW_JOYSTICK_1);
|
||||
System.out.println("Manette détectée : " + present);
|
||||
|
||||
// On récupère les informations du moniteur principal
|
||||
GLFWVidMode vidmode = glfwGetVideoMode(glfwGetPrimaryMonitor());
|
||||
@ -70,7 +73,7 @@ public class Engine {
|
||||
// On met la fenêtre au centre de l'écran principale
|
||||
glfwSetWindowPos(getWindow(), (vidmode.width() - width) / 2, (vidmode.height() - height) / 2);
|
||||
|
||||
glfwSetKeyCallback(getWindow(), new Input());
|
||||
glfwSetKeyCallback(getWindow(), new KeyboardInput());
|
||||
glfwSetInputMode(getWindow(), GLFW_STICKY_KEYS, GLFW_TRUE);
|
||||
|
||||
// Contexte = zone cible des rendus
|
||||
@ -78,6 +81,8 @@ public class Engine {
|
||||
glfwShowWindow(getWindow());
|
||||
GL.createCapabilities();
|
||||
|
||||
correctViewport(this.width, this.height);
|
||||
|
||||
glfwSetFramebufferSizeCallback(getWindow(), resizeWindow);
|
||||
|
||||
glEnable(GL_DEPTH_TEST); // Z-Buffer plus z est grand plus l'objet est proche de la camera limite à 100.0f au dela l'objet disparait
|
||||
@ -101,6 +106,7 @@ public class Engine {
|
||||
*/
|
||||
public void render() {
|
||||
|
||||
glEnable(GL_SCISSOR_TEST);
|
||||
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
|
||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||
|
||||
@ -116,7 +122,6 @@ public class Engine {
|
||||
|
||||
/**
|
||||
* Add obj to the render queue
|
||||
*
|
||||
* @param obj ObjectGl to render
|
||||
*/
|
||||
public void add_objectGl(ObjectGl obj) {
|
||||
@ -127,6 +132,28 @@ public class Engine {
|
||||
objectsGl.remove(obj);
|
||||
}
|
||||
|
||||
public void translateView(Vector3f vec){
|
||||
ObjectGl.view = ObjectGl.view.multiply(Matrix4f.translate(vec));
|
||||
viewXPos += vec.x;
|
||||
}
|
||||
|
||||
public static void correctViewport(int width, int height){
|
||||
int heightViewport, widthViewport, x, y;
|
||||
if (width >= height * 4.0f/3.0f){
|
||||
heightViewport = height;
|
||||
widthViewport = (int) (height * 4.0f/3.0f);
|
||||
y = 0;
|
||||
x = (width - widthViewport)/2;
|
||||
} else {
|
||||
widthViewport = width;
|
||||
heightViewport = (int) (width * 3.0f/4.0f);
|
||||
y = (height - heightViewport)/2;
|
||||
x = 0;
|
||||
}
|
||||
glScissor(x, y, widthViewport, heightViewport);
|
||||
glViewport(x, y, widthViewport, heightViewport);
|
||||
}
|
||||
|
||||
public boolean isRunning() {
|
||||
return running;
|
||||
}
|
||||
@ -148,53 +175,101 @@ public class Engine {
|
||||
}
|
||||
|
||||
/**
|
||||
* Est appelé à a chaque modification de la taille de la fenêtre, et modifie la taille de la zone de rendu
|
||||
* Est appelé à chaque modification de la taille de la fenêtre, et modifie la taille de la zone de rendu
|
||||
* pour quelle corresponde à la taille de la fenêtre
|
||||
*/
|
||||
private static final GLFWFramebufferSizeCallback resizeWindow = new GLFWFramebufferSizeCallback() {
|
||||
@Override
|
||||
public void invoke(long window, int width, int height) {
|
||||
glViewport(0, 0, width, height);
|
||||
correctViewport(width, height);
|
||||
}
|
||||
};
|
||||
|
||||
public static void main(String[] args) {
|
||||
Engine engine = new Engine(1280, 720, 9.0f / 16.0f);
|
||||
int speed = 10; //vitesse déplacement Object
|
||||
public static void main(String[] args) throws Exception {
|
||||
/*
|
||||
OpenAl TEST
|
||||
*/
|
||||
SoundManager soundManager = new SoundManager();
|
||||
soundManager.init();
|
||||
|
||||
SoundListener soundListener = new SoundListener();
|
||||
|
||||
soundManager.setListener(soundListener);
|
||||
|
||||
SoundBuffer jumpSoundBuffer = new SoundBuffer("sound/jump.ogg");
|
||||
SoundSource soundSource = new SoundSource(false, false);
|
||||
soundSource.setBuffer(jumpSoundBuffer.getBufferId());
|
||||
|
||||
soundManager.addSoundSource("jump", soundSource);
|
||||
soundManager.playSoundSource("jump");
|
||||
|
||||
/*
|
||||
Engine Init
|
||||
*/
|
||||
Engine engine = new Engine(1280, 720, 3.0f / 4.0f);
|
||||
int speed = 10; //vitesse d<EFBFBD>placement Object
|
||||
engine.init();
|
||||
|
||||
// Add objects to render
|
||||
String path = "textures/zangief_sprite.png";
|
||||
|
||||
String path2 = "textures/awesomeface.png";
|
||||
String pathToBG = "textures/background_beach.png";
|
||||
|
||||
ObjectGl zangief = new ObjectGl(0f, 60f, 80f, 10f, path, null);
|
||||
zangief.setTextureWrap(58, 0, 62, 84, ObjectGl.STICK_TOP);
|
||||
ObjectGl zangief = new ObjectGl(10.0f, 1f, 1f, 10f, path, null);
|
||||
zangief.setTextureWrap(58, 0, 62, 84, ObjectGl.DEFAULT);
|
||||
engine.add_objectGl(zangief);
|
||||
zangief.translate(new Vector3f(-5000.0f, 500.0f, 10.0f));
|
||||
zangief.setColor(new Vector3f(1.0f, 1.0f, 1.0f));
|
||||
zangief.useTime = true;
|
||||
zangief.setShader("shaders/StylishShaders/BasicVert.glsl", "shaders/StylishShaders/FlashFrag.glsl");
|
||||
zangief.translate(new Vector3f(-1000.0f, 200.0f, 0.0f));
|
||||
|
||||
ObjectGl smiley2 = new ObjectGl(0.0f, 500.0f, 500.0f, 1f, path2, null);
|
||||
engine.add_objectGl(smiley2);
|
||||
smiley2.translate(new Vector3f(0.0f, 0.0f, 5.0f));
|
||||
smiley2.translate(new Vector3f(0.0f, 0.0f, 15.0f));
|
||||
|
||||
//Create background
|
||||
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);
|
||||
|
||||
long timer = System.currentTimeMillis();
|
||||
long lastFrame;
|
||||
int frame = 0;
|
||||
boolean nextFrame = false;
|
||||
boolean Joystick1Present = glfwJoystickPresent(GLFW_JOYSTICK_1);
|
||||
|
||||
/*
|
||||
* Cr<EFBFBD>ation des manettes / action
|
||||
*/
|
||||
|
||||
GamepadInput gamepad1 = null;
|
||||
Button jump = null;
|
||||
|
||||
if (Joystick1Present){
|
||||
gamepad1 = new GamepadInput(GLFW_JOYSTICK_1);
|
||||
gamepad1.inputRefresh();
|
||||
List<Integer> listJump = new ArrayList<>();
|
||||
listJump.add(InputConst.buttonA);
|
||||
jump = new Button("jump", listJump, gamepad1);
|
||||
}
|
||||
|
||||
|
||||
|
||||
while (engine.isRunning()) {
|
||||
lastFrame = System.currentTimeMillis();
|
||||
// Game logic should fit here
|
||||
|
||||
if (present) {
|
||||
Input.gamepadInput(zangief, speed);
|
||||
}
|
||||
if (Joystick1Present) {
|
||||
gamepad1.inputRefresh();
|
||||
// Check si le personnage a sauté
|
||||
if (jump.isButtonPressed()){
|
||||
// Le personnage saute
|
||||
System.out.println(" JE SAUTE ");
|
||||
}
|
||||
}
|
||||
|
||||
Input.keyboardInput(zangief, speed);
|
||||
// input(smiley2, speed);
|
||||
KeyboardInput.keyboardInput(zangief, speed);
|
||||
|
||||
Vector3f vecTransView = new Vector3f((-zangief.getXPos() - engine.viewXPos) - 250.0f,0.0f,0.0f);
|
||||
engine.translateView(vecTransView);
|
||||
|
||||
/*
|
||||
********************
|
||||
@ -219,5 +294,8 @@ public class Engine {
|
||||
nextFrame = false;
|
||||
if (engine.shouldClose()) engine.setRunning(false);
|
||||
}
|
||||
|
||||
soundManager.cleanup();
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
package engine.graphics;
|
||||
|
||||
import engine.utils.BufferUtils;
|
||||
import engine.utils.BufferUtilsEngine;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import java.awt.image.BufferedImage;
|
||||
@ -49,7 +49,7 @@ public class Texture {
|
||||
glBindTexture(GL_TEXTURE_2D, result);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
||||
GL11.glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, BufferUtils.createIntBuffer(data));
|
||||
GL11.glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, BufferUtilsEngine.createIntBuffer(data));
|
||||
glGenerateMipmap(GL_TEXTURE_2D);
|
||||
glBindTexture(GL_TEXTURE_2D, 0);
|
||||
return result;
|
||||
|
@ -1,6 +1,6 @@
|
||||
package engine.graphics;
|
||||
|
||||
import engine.utils.BufferUtils;
|
||||
import engine.utils.BufferUtilsEngine;
|
||||
|
||||
import static org.lwjgl.opengl.GL11.*;
|
||||
import static org.lwjgl.opengl.GL15.*;
|
||||
@ -28,7 +28,7 @@ public class VertexArray {
|
||||
|
||||
EBO = glGenBuffers();
|
||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
|
||||
glBufferData(GL_ELEMENT_ARRAY_BUFFER, BufferUtils.createByteBuffer(indices), GL_STATIC_DRAW);
|
||||
glBufferData(GL_ELEMENT_ARRAY_BUFFER, BufferUtilsEngine.createByteBuffer(indices), GL_STATIC_DRAW);
|
||||
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
||||
glBindVertexArray(0);
|
||||
|
||||
@ -37,7 +37,7 @@ public class VertexArray {
|
||||
private void createVertexBufferObject(float[] vertices){
|
||||
VBO = glGenBuffers();
|
||||
glBindBuffer(GL_ARRAY_BUFFER, VBO);
|
||||
glBufferData(GL_ARRAY_BUFFER, BufferUtils.createFloatBuffer(vertices), GL_STATIC_DRAW);
|
||||
glBufferData(GL_ARRAY_BUFFER, BufferUtilsEngine.createFloatBuffer(vertices), GL_STATIC_DRAW);
|
||||
glVertexAttribPointer(0, 3, GL_FLOAT, false, 0, 0);
|
||||
glEnableVertexAttribArray(0);
|
||||
}
|
||||
@ -45,7 +45,7 @@ public class VertexArray {
|
||||
private void createColorBufferObject(float[] color){
|
||||
CBO = glGenBuffers();
|
||||
glBindBuffer(GL_ARRAY_BUFFER, CBO);
|
||||
glBufferData(GL_ARRAY_BUFFER, BufferUtils.createFloatBuffer(color), GL_STATIC_DRAW);
|
||||
glBufferData(GL_ARRAY_BUFFER, BufferUtilsEngine.createFloatBuffer(color), GL_STATIC_DRAW);
|
||||
glVertexAttribPointer(1, 3, GL_FLOAT, false, 0, 0);
|
||||
glEnableVertexAttribArray(1);
|
||||
}
|
||||
@ -53,19 +53,19 @@ public class VertexArray {
|
||||
private void createTextureBufferObject(float[] texture){
|
||||
TBO = glGenBuffers();
|
||||
glBindBuffer(GL_ARRAY_BUFFER, TBO);
|
||||
glBufferData(GL_ARRAY_BUFFER, BufferUtils.createFloatBuffer(texture), GL_STATIC_DRAW);
|
||||
glBufferData(GL_ARRAY_BUFFER, BufferUtilsEngine.createFloatBuffer(texture), GL_STATIC_DRAW);
|
||||
glVertexAttribPointer(2, 2, GL_FLOAT, false, 0, 0);
|
||||
glEnableVertexAttribArray(2);
|
||||
}
|
||||
|
||||
public void swapVertexBufferObject(float[] vertices){
|
||||
glBindBuffer(GL_ARRAY_BUFFER, VBO);
|
||||
glBufferData(GL_ARRAY_BUFFER, BufferUtils.createFloatBuffer(vertices), GL_STATIC_DRAW);
|
||||
glBufferData(GL_ARRAY_BUFFER, BufferUtilsEngine.createFloatBuffer(vertices), GL_STATIC_DRAW);
|
||||
}
|
||||
|
||||
public void swapTextureBufferObject(float [] texture){
|
||||
glBindBuffer(GL_ARRAY_BUFFER, TBO);
|
||||
glBufferData(GL_ARRAY_BUFFER, BufferUtils.createFloatBuffer(texture), GL_STATIC_DRAW);
|
||||
glBufferData(GL_ARRAY_BUFFER, BufferUtilsEngine.createFloatBuffer(texture), GL_STATIC_DRAW);
|
||||
}
|
||||
|
||||
public void bind(){
|
||||
|
25
src/engine/input/Button.java
Normal file
25
src/engine/input/Button.java
Normal file
@ -0,0 +1,25 @@
|
||||
package engine.input;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class Button {
|
||||
|
||||
public String name;
|
||||
private final List<Integer> buttons;
|
||||
private final GamepadInput controller;
|
||||
|
||||
public Button(String name, List<Integer> buttons, GamepadInput controller){
|
||||
this.name = name;
|
||||
this.buttons = buttons;
|
||||
this.controller = controller;
|
||||
}
|
||||
|
||||
public boolean isButtonPressed(){
|
||||
for (int i : buttons){
|
||||
if (controller.checkPressed(i)) return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
}
|
212
src/engine/input/GamepadInput.java
Normal file
212
src/engine/input/GamepadInput.java
Normal file
@ -0,0 +1,212 @@
|
||||
package engine.input;
|
||||
|
||||
import engine.math.Vector3f;
|
||||
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.FloatBuffer;
|
||||
|
||||
import static engine.input.InputConst.*;
|
||||
import static org.lwjgl.glfw.GLFW.*;
|
||||
/* Buttons
|
||||
0 : Croix / A
|
||||
1: rond /B
|
||||
2: carré / X
|
||||
3: triangle / Y
|
||||
4: L1 / LB
|
||||
5: R1 / RB
|
||||
6:select
|
||||
7:start
|
||||
8:L3
|
||||
9:R3
|
||||
10: haut
|
||||
11: droite
|
||||
12: bas
|
||||
13: gauche
|
||||
*/
|
||||
|
||||
/* Axes
|
||||
0 : left X axe ( right : 1 left -1)
|
||||
1: left Y axe ( down : 1 , Up -1)
|
||||
2: right X axe ( right : 1 left -1)
|
||||
3: right Y axe ( down : 1 , Up -1)
|
||||
4:L2 / LT : 1 active, -1 unactive
|
||||
5: R2 /RT : 1 active, -1 unactive
|
||||
*/
|
||||
|
||||
public class GamepadInput {
|
||||
|
||||
private final int gamepadNum;
|
||||
private ByteBuffer gamepadButton;
|
||||
private FloatBuffer gamepadAxes;
|
||||
|
||||
public boolean buttonA_pressed ;
|
||||
public boolean buttonB_pressed ;
|
||||
public boolean buttonY_pressed ;
|
||||
public boolean buttonX_pressed;
|
||||
|
||||
public boolean LB_pressed ;
|
||||
public boolean RB_pressed ;
|
||||
|
||||
public boolean select_pressed;
|
||||
public boolean start_pressed;
|
||||
|
||||
public boolean R_JoyClick_pressed;
|
||||
public boolean L_JoyClick_pressed;
|
||||
|
||||
public boolean up_pressed ;
|
||||
public boolean down_pressed;
|
||||
public boolean left_pressed ;
|
||||
public boolean right_pressed;
|
||||
|
||||
public boolean leftJoyRight;
|
||||
public boolean leftJoyLeft;
|
||||
public boolean leftJoyDown;
|
||||
public boolean leftJoyUp;
|
||||
|
||||
public boolean rightJoyLeft;
|
||||
public boolean rightJoyRight;
|
||||
public boolean rightJoyDown ;
|
||||
public boolean rightJoyUp;
|
||||
|
||||
public boolean LT_pressed ;
|
||||
public boolean RT_pressed;
|
||||
|
||||
public GamepadInput (int gamepadNum){
|
||||
this.gamepadNum = gamepadNum;
|
||||
this.gamepadAxes = null;
|
||||
this.gamepadButton = null;
|
||||
this.buttonA_pressed = false;
|
||||
this.buttonB_pressed = false;
|
||||
this.buttonY_pressed = false;
|
||||
this.buttonX_pressed = false;
|
||||
this.LB_pressed = false;
|
||||
this.RB_pressed = false;
|
||||
this.select_pressed = false;
|
||||
this.start_pressed = false;
|
||||
this.R_JoyClick_pressed = false;
|
||||
this.L_JoyClick_pressed = false;
|
||||
this.up_pressed = false;
|
||||
this.down_pressed = false;
|
||||
this.left_pressed = false;
|
||||
this.right_pressed = false;
|
||||
this.leftJoyRight = false;
|
||||
this.leftJoyLeft = false;
|
||||
this.leftJoyDown = false;
|
||||
this.leftJoyUp = false;
|
||||
this.rightJoyLeft = false;
|
||||
this.rightJoyRight = false;
|
||||
this.rightJoyDown = false;
|
||||
this.rightJoyUp = false;
|
||||
this.LT_pressed = false;
|
||||
this.RT_pressed = false;
|
||||
}
|
||||
|
||||
public void inputRefresh() {
|
||||
|
||||
this.gamepadButton = glfwGetJoystickButtons(this.gamepadNum);
|
||||
this.gamepadAxes = glfwGetJoystickAxes(this.gamepadNum);
|
||||
|
||||
assert gamepadAxes != null;
|
||||
assert gamepadButton != null;
|
||||
|
||||
|
||||
// A B X Y
|
||||
buttonA_pressed = gamepadButton.get(buttonA) == 1;
|
||||
buttonB_pressed = gamepadButton.get(buttonB) == 1;
|
||||
buttonY_pressed = gamepadButton.get(buttonY) == 1;
|
||||
buttonX_pressed = gamepadButton.get(buttonX) == 1;
|
||||
|
||||
|
||||
// LB RB
|
||||
LB_pressed = gamepadButton.get(LB) == 1;
|
||||
RB_pressed = gamepadButton.get(RB) == 1;
|
||||
|
||||
|
||||
//start select
|
||||
start_pressed = gamepadButton.get(start) == 1;
|
||||
select_pressed = gamepadButton.get(select) == 1;
|
||||
|
||||
|
||||
//R & L JoystickClick
|
||||
R_JoyClick_pressed = gamepadButton.get(R_JoystickClick) == 1;
|
||||
L_JoyClick_pressed = gamepadButton.get(L_JoystickClick) == 1;
|
||||
|
||||
|
||||
//up, down, left, right
|
||||
up_pressed = gamepadButton.get(up) == 1;
|
||||
down_pressed = gamepadButton.get(down) == 1;
|
||||
left_pressed = gamepadButton.get(left) == 1;
|
||||
right_pressed = gamepadButton.get(right) == 1;
|
||||
|
||||
|
||||
//Left Joystick
|
||||
leftJoyRight = gamepadAxes.get(leftJoyX_Axe) > 0.1;
|
||||
leftJoyLeft = gamepadAxes.get(leftJoyX_Axe) < -0.1;
|
||||
leftJoyDown = gamepadAxes.get(leftJoyY_Axe) > 0.1;
|
||||
leftJoyUp = gamepadAxes.get(leftJoyY_Axe) < -0.1;
|
||||
|
||||
|
||||
//Right Joystick
|
||||
rightJoyRight = gamepadAxes.get(rightJoyX_Axe) > 0.1;
|
||||
rightJoyLeft = gamepadAxes.get(rightJoyX_Axe) < -0.1;
|
||||
rightJoyDown = gamepadAxes.get(rightJoyY_Axe) > 0.1;
|
||||
rightJoyUp = gamepadAxes.get(rightJoyY_Axe) < -0.1;
|
||||
|
||||
//LT RT
|
||||
LT_pressed = gamepadButton.get(LT) == 1;
|
||||
RT_pressed = gamepadButton.get(RT) == 1;
|
||||
}
|
||||
|
||||
public boolean checkPressed(int keyCode){
|
||||
this.gamepadButton = glfwGetJoystickButtons(GLFW_JOYSTICK_1);
|
||||
|
||||
assert gamepadButton != null;
|
||||
|
||||
return gamepadButton.get(keyCode) == 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Envoie la position du stick pointé par axisId sous forme de direction général (9 directions)
|
||||
* @param axisId l'identifiant du joystick (AXE X)
|
||||
* @return la direction du stick valeur possible : RIGHT, UPPER_RIGHT, UP, UPPER_LEFT, LEFT, LOWER_LEFT, DOWN, LOWER_RIGHT, CENTER;
|
||||
*/
|
||||
public int getAxisDiscreet(int axisId){
|
||||
|
||||
float x = gamepadAxes.get(axisId);
|
||||
float y = gamepadAxes.get(axisId + 1);
|
||||
|
||||
float magnitude = (float) Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2));
|
||||
float angle = (float) Math.toDegrees(2 * Math.atan(y /(x + magnitude)));
|
||||
|
||||
if (magnitude < 0.3) return CENTER;
|
||||
if (angle < 22.5 && angle > -22.5) return RIGHT;
|
||||
else if (angle > -67.5 && angle < -22.5) return UPPER_RIGHT;
|
||||
else if (angle > -112.5 && angle < -67.5) return UP;
|
||||
else if (angle > -157.5 && angle < -112.5) return UPPER_LEFT;
|
||||
else if (angle < -157.5 || angle > 157.5) return LEFT;
|
||||
else if (angle < 157.5 && angle > 112.5) return LOWER_LEFT;
|
||||
else if (angle < 112.5 && angle > 67.5) return DOWN;
|
||||
else if (angle < 67.5 && angle > 22.5) return LOWER_RIGHT;
|
||||
|
||||
return -1; // TEST
|
||||
}
|
||||
|
||||
/**
|
||||
* Envoie la position du stick pointé par axisID (AXE X) sous forme de Vecteur
|
||||
* @param axisId l'identifiant du joystick (AXE X)
|
||||
* @return un Vecteur représentant la position actuel du joystick
|
||||
*/
|
||||
public Vector3f getAxisContinuous(int axisId){
|
||||
|
||||
float x = gamepadAxes.get(axisId);
|
||||
float y = gamepadAxes.get(axisId + 1);
|
||||
|
||||
if (x < 0.1 && x > -0.1) x = 0;
|
||||
if (y < 0.1 && y > -0.1) y = 0;
|
||||
|
||||
System.out.println("x: " + x + " y: " + y);
|
||||
|
||||
return new Vector3f(x,y);
|
||||
}
|
||||
|
||||
}
|
17
src/engine/input/InputConst.java
Normal file
17
src/engine/input/InputConst.java
Normal file
@ -0,0 +1,17 @@
|
||||
package engine.input;
|
||||
|
||||
public class InputConst {
|
||||
/*
|
||||
Button ID
|
||||
*/
|
||||
public final static int buttonA=0, buttonB=1, buttonX=2, buttonY=3, LB = 4, RB = 5, select = 6, start = 7,
|
||||
L_JoystickClick = 8, R_JoystickClick =9, up = 10, right = 11, down = 12, left = 13;
|
||||
|
||||
/*
|
||||
Axis ID
|
||||
*/
|
||||
public final static int leftJoyX_Axe = 0, leftJoyY_Axe = 1, rightJoyX_Axe = 2, rightJoyY_Axe = 3, LT = 4, RT = 5;
|
||||
|
||||
public final static int RIGHT = 0, UPPER_RIGHT = 1, UP = 2, UPPER_LEFT = 3, LEFT = 4, LOWER_LEFT = 5,
|
||||
DOWN = 6, LOWER_RIGHT = 7, CENTER = 8;
|
||||
}
|
@ -1,5 +1,6 @@
|
||||
package engine;
|
||||
package engine.input;
|
||||
|
||||
import engine.Engine;
|
||||
import engine.math.Vector3f;
|
||||
import engine.object.ObjectGl;
|
||||
import org.lwjgl.glfw.GLFW;
|
||||
@ -11,7 +12,7 @@ import java.nio.FloatBuffer;
|
||||
import static org.lwjgl.glfw.GLFW.*;
|
||||
import static org.lwjgl.opengl.GL11.*;
|
||||
|
||||
public class Input extends GLFWKeyCallback {
|
||||
public class KeyboardInput extends GLFWKeyCallback {
|
||||
|
||||
public static boolean[] keys = new boolean[65536];
|
||||
|
||||
@ -38,9 +39,7 @@ public class Input extends GLFWKeyCallback {
|
||||
|
||||
String name = GLFW.glfwGetJoystickName(GLFW_JOYSTICK_1);
|
||||
System.out.println("GamePad Name :" + name);
|
||||
// for (int i =0 ; i < gamepadAxes.capacity(); i++) {
|
||||
// System.out.println(i + " :" + gamepadAxes.get(i));
|
||||
// }
|
||||
|
||||
|
||||
|
||||
if (gamepadButton.get(0) ==1 ) { // appuie sur croix(PlayStation) A (Xbox)
|
||||
@ -90,22 +89,25 @@ public class Input extends GLFWKeyCallback {
|
||||
|
||||
public static void keyboardInput(ObjectGl token, int speed) {
|
||||
boolean keyPressed = false;
|
||||
if (Input.isKeyDown(GLFW.GLFW_KEY_S)) {
|
||||
if (KeyboardInput.isKeyDown(GLFW.GLFW_KEY_S)) {
|
||||
token.setTextureWrap(161,260,56,59, ObjectGl.STICK_BOTTOM);
|
||||
keyPressed = true;
|
||||
} else if (Input.isKeyDown(GLFW.GLFW_KEY_W)) {
|
||||
} else if (KeyboardInput.isKeyDown(GLFW.GLFW_KEY_W)) {
|
||||
keyPressed = true;
|
||||
token.scale(new Vector3f(1.001f,1.001f,1.0f));
|
||||
}
|
||||
if (Input.isKeyDown(GLFW.GLFW_KEY_A)) {
|
||||
token.translate(new Vector3f (speed * -5.0f, 0.0f, 0.0f));
|
||||
if (KeyboardInput.isKeyDown(GLFW.GLFW_KEY_A)) {
|
||||
token.translate(new Vector3f (speed * -1.0f, 0.0f, 0.0f));
|
||||
token.setTextureWrap(121,0,57,82, ObjectGl.STICK_TOP);
|
||||
keyPressed = true;
|
||||
}
|
||||
else if (Input.isKeyDown(GLFW.GLFW_KEY_D)) {
|
||||
token.translate(new Vector3f (speed * 5.0f, 0.0f, 0.0f));
|
||||
else if (KeyboardInput.isKeyDown(GLFW.GLFW_KEY_D)) {
|
||||
token.translate(new Vector3f (speed * 1.0f, 0.0f, 0.0f));
|
||||
token.setTextureWrap(178,0,62,82, ObjectGl.STICK_TOP);
|
||||
keyPressed = true;
|
||||
}
|
||||
if (!keyPressed) token.setTextureWrap(58,0,62,82, ObjectGl.STICK_TOP);
|
||||
|
||||
token.flipTextureWrapH();
|
||||
}
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
package engine.math;
|
||||
|
||||
import engine.utils.BufferUtils;
|
||||
import engine.utils.BufferUtilsEngine;
|
||||
|
||||
import java.nio.FloatBuffer;
|
||||
|
||||
@ -117,7 +117,7 @@ public class Matrix4f {
|
||||
}
|
||||
|
||||
public FloatBuffer toFloatBuffer() {
|
||||
return BufferUtils.createFloatBuffer(elements);
|
||||
return BufferUtilsEngine.createFloatBuffer(elements);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -10,6 +10,12 @@ public class Vector3f {
|
||||
z = 0.0f;
|
||||
}
|
||||
|
||||
public Vector3f(float x, float y){
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
this.z = 0.0f;
|
||||
}
|
||||
|
||||
public Vector3f(float x, float y, float z){
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
|
@ -27,7 +27,15 @@ public class ObjectGl {
|
||||
public static Matrix4f projection;
|
||||
public static Matrix4f view;
|
||||
|
||||
/**
|
||||
* xPos and yPos will stop to be relevant if you use rotate function
|
||||
*/
|
||||
private float xPos;
|
||||
private float yPos;
|
||||
private float zPos;
|
||||
private float xAngle;
|
||||
private float yAngle;
|
||||
private float zAngle;
|
||||
private float width; // To be used in setTextureWrap
|
||||
private float height;
|
||||
private float scalingFactor;
|
||||
@ -35,6 +43,7 @@ public class ObjectGl {
|
||||
public boolean useTime;
|
||||
|
||||
private Texture texture;
|
||||
private float[] textureWrap;
|
||||
|
||||
/**
|
||||
* Create a rectangle shape, use setTextureWrap to correctly align the texture with the model
|
||||
@ -61,15 +70,18 @@ public class ObjectGl {
|
||||
this.texture = new Texture(tex, 0);
|
||||
}
|
||||
|
||||
this.xPos = 0.0f;
|
||||
this.yPos = 0.0f;
|
||||
this.zPos = z;
|
||||
this.height = h;
|
||||
this.width = w;
|
||||
|
||||
this.textureWrap = Primitive.stdTexWrap;
|
||||
this.vertexArray = new VertexArray(Primitive.createRectangle(this.zPos, this.width, this.height), Primitive.rectangle_indices, colorBuffer, Primitive.stdTexWrap);
|
||||
|
||||
this.scalingFactor = size;
|
||||
this.scalingFactor = 1;
|
||||
this.transform = Matrix4f.identity();
|
||||
this.scale(new Vector3f(size, size,1f));
|
||||
this.scale(new Vector3f(size, size,1.0f));
|
||||
this.stick_state = DEFAULT;
|
||||
this.useTime = false;
|
||||
|
||||
@ -92,6 +104,9 @@ public class ObjectGl {
|
||||
public void resetTransform(){
|
||||
this.transform = Matrix4f.identity();
|
||||
this.scalingFactor = 1;
|
||||
this.xPos = 0.0f;
|
||||
this.yPos = 0.0f;
|
||||
this.zPos = 0.0f;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -99,9 +114,11 @@ public class ObjectGl {
|
||||
* @param vec Vector3f
|
||||
*/
|
||||
public void translate(Vector3f vec){
|
||||
this.xPos += vec.x;
|
||||
this.yPos += vec.y;
|
||||
this.zPos += vec.z;
|
||||
vec.divXY(this.scalingFactor);
|
||||
this.transform = this.transform.multiply(Matrix4f.translate(vec));
|
||||
this.zPos += vec.z;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -183,6 +200,19 @@ public class ObjectGl {
|
||||
this.setTextureWrap(result);
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the textureWrap left to right
|
||||
*/
|
||||
public void flipTextureWrapH(){
|
||||
float[] textureWrapTemp = new float[] {
|
||||
this.textureWrap[2], this.textureWrap[3],
|
||||
this.textureWrap[0], this.textureWrap[1],
|
||||
this.textureWrap[6], this.textureWrap[7],
|
||||
this.textureWrap[4], this.textureWrap[5]
|
||||
};
|
||||
setTextureWrap(textureWrapTemp);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set a new shader to be used by this object
|
||||
* @param vert path to glsl Vertex Shader
|
||||
@ -207,9 +237,18 @@ public class ObjectGl {
|
||||
}
|
||||
|
||||
private void setTextureWrap(float[] texture){
|
||||
this.textureWrap = texture;
|
||||
this.vertexArray.swapTextureBufferObject(texture);
|
||||
}
|
||||
|
||||
public float getXPos(){
|
||||
return xPos;
|
||||
}
|
||||
|
||||
public float getYPos(){
|
||||
return yPos;
|
||||
}
|
||||
|
||||
public float getZPos(){
|
||||
return zPos;
|
||||
}
|
||||
|
@ -5,6 +5,7 @@
|
||||
|
||||
package engine.sound;
|
||||
|
||||
import engine.utils.FileUtils;
|
||||
import org.lwjgl.stb.STBVorbisInfo;
|
||||
import org.lwjgl.system.MemoryStack;
|
||||
import org.lwjgl.system.MemoryUtil;
|
||||
@ -13,7 +14,6 @@ import java.nio.ByteBuffer;
|
||||
import java.nio.IntBuffer;
|
||||
import java.nio.ShortBuffer;
|
||||
|
||||
import static engine.utils.BufferUtils.StringToByteBuffer;
|
||||
import static org.lwjgl.openal.AL10.*;
|
||||
import static org.lwjgl.stb.STBVorbis.*;
|
||||
import static org.lwjgl.system.MemoryUtil.NULL;
|
||||
@ -56,19 +56,19 @@ public class SoundBuffer {
|
||||
/**
|
||||
* Source : https://github.com/lwjglgamedev/lwjglbook/blob/master/chapter28/src/main/java/org/lwjglb/engine/sound/SoundBuffer.java
|
||||
* lis un fichier .ogg et le convertis en .pcm seul format lisible par openAl
|
||||
* @param resource le fichier .ogg
|
||||
* @param path chemin vers un fichier .ogg
|
||||
* @param info STBVorbisInfo
|
||||
* @return pcm
|
||||
* @throws Exception MemoryStack.stackPush()
|
||||
*/
|
||||
private ShortBuffer readVorbis(String resource, STBVorbisInfo info) throws Exception {
|
||||
private ShortBuffer readVorbis(String path, STBVorbisInfo info) throws Exception {
|
||||
try (MemoryStack stack = MemoryStack.stackPush()) {
|
||||
vorbis = StringToByteBuffer(resource);
|
||||
this.vorbis = FileUtils.loadAsByteBuffer(path);
|
||||
IntBuffer error = stack.mallocInt(1);
|
||||
long decoder = stb_vorbis_open_memory(vorbis, error, null);
|
||||
if (decoder == NULL) {
|
||||
throw new RuntimeException("Failed to open Ogg Vorbis file. Error: " + error.get(0));
|
||||
}
|
||||
} //Failed to open Ogg Vorbis file. Error: 30 / 34
|
||||
|
||||
stb_vorbis_get_info(decoder, info);
|
||||
|
||||
|
@ -1,6 +1,9 @@
|
||||
// Source : https://github.com/lwjglgamedev/lwjglbook/blob/master/chapter28/src/main/java/org/lwjglb/engine/sound/SoundManager.java
|
||||
|
||||
package engine.sound;
|
||||
|
||||
import engine.math.Matrix4f;
|
||||
import engine.math.Vector3f;
|
||||
import org.lwjgl.openal.*;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.IntBuffer;
|
||||
@ -9,6 +12,7 @@ import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import static org.lwjgl.openal.AL10.*;
|
||||
import static org.lwjgl.openal.ALC10.*;
|
||||
import static org.lwjgl.system.MemoryUtil.NULL;
|
||||
|
||||
@ -46,4 +50,69 @@ public class SoundManager {
|
||||
alcMakeContextCurrent(context);
|
||||
AL.createCapabilities(deviceCaps);
|
||||
}
|
||||
|
||||
public void addSoundSource(String name, SoundSource soundSource) {
|
||||
this.soundSourceMap.put(name, soundSource);
|
||||
}
|
||||
|
||||
public SoundSource getSoundSource(String name) {
|
||||
return this.soundSourceMap.get(name);
|
||||
}
|
||||
|
||||
public void playSoundSource(String name) {
|
||||
SoundSource soundSource = this.soundSourceMap.get(name);
|
||||
if (soundSource != null && !soundSource.isPlaying()) {
|
||||
soundSource.play();
|
||||
}
|
||||
}
|
||||
|
||||
public void removeSoundSource(String name) {
|
||||
this.soundSourceMap.remove(name);
|
||||
}
|
||||
|
||||
public void addSoundBuffer(SoundBuffer soundBuffer) {
|
||||
this.soundBufferList.add(soundBuffer);
|
||||
}
|
||||
|
||||
public SoundListener getListener() {
|
||||
return this.listener;
|
||||
}
|
||||
|
||||
public void setListener(SoundListener listener) {
|
||||
this.listener = listener;
|
||||
}
|
||||
|
||||
// Camera Statique de notre côté pas besoin de "corriger" cette fonction
|
||||
// public void updateListenerPosition(Camera camera) {
|
||||
// // Update camera matrix with camera data
|
||||
// Transformation.updateGenericViewMatrix(camera.getPosition(), camera.getRotation(), cameraMatrix);
|
||||
//
|
||||
// listener.setPosition(camera.getPosition());
|
||||
// Vector3f at = new Vector3f();
|
||||
// cameraMatrix.positiveZ(at).negate();
|
||||
// Vector3f up = new Vector3f();
|
||||
// cameraMatrix.positiveY(up);
|
||||
// listener.setOrientation(at, up);
|
||||
// }
|
||||
|
||||
public void setAttenuationModel(int model) {
|
||||
alDistanceModel(model);
|
||||
}
|
||||
|
||||
public void cleanup() {
|
||||
for (SoundSource soundSource : soundSourceMap.values()) {
|
||||
soundSource.cleanup();
|
||||
}
|
||||
soundSourceMap.clear();
|
||||
for (SoundBuffer soundBuffer : soundBufferList) {
|
||||
soundBuffer.cleanup();
|
||||
}
|
||||
soundBufferList.clear();
|
||||
if (context != NULL) {
|
||||
alcDestroyContext(context);
|
||||
}
|
||||
if (device != NULL) {
|
||||
alcCloseDevice(device);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,13 +1,16 @@
|
||||
package engine.utils;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.RandomAccessFile;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.ByteOrder;
|
||||
import java.nio.FloatBuffer;
|
||||
import java.nio.IntBuffer;
|
||||
import java.nio.channels.FileChannel;
|
||||
|
||||
public class BufferUtils {
|
||||
public class BufferUtilsEngine {
|
||||
|
||||
private BufferUtils() {
|
||||
private BufferUtilsEngine() {
|
||||
|
||||
}
|
||||
|
||||
@ -29,8 +32,4 @@ public class BufferUtils {
|
||||
return result;
|
||||
}
|
||||
|
||||
public static ByteBuffer StringToByteBuffer(String msg){
|
||||
return ByteBuffer.wrap(msg.getBytes());
|
||||
}
|
||||
|
||||
}
|
@ -1,9 +1,13 @@
|
||||
package engine.utils;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.FileReader;
|
||||
import java.io.IOException;
|
||||
import org.lwjgl.BufferUtils;
|
||||
|
||||
import java.io.*;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.channels.SeekableByteChannel;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
|
||||
public class FileUtils {
|
||||
|
||||
@ -17,13 +21,27 @@ public class FileUtils {
|
||||
BufferedReader reader = new BufferedReader(new FileReader(file));
|
||||
String buffer = "";
|
||||
while ((buffer = reader.readLine()) != null) {
|
||||
result.append(buffer +"\n");
|
||||
result.append(buffer).append("\n");
|
||||
}
|
||||
reader.close();
|
||||
} catch (IOException e){
|
||||
e.printStackTrace();
|
||||
System.exit(1);
|
||||
}
|
||||
return result.toString();
|
||||
}
|
||||
|
||||
public static ByteBuffer loadAsByteBuffer(String file) throws IOException{
|
||||
ByteBuffer buffer;
|
||||
|
||||
Path path = Paths.get(file);
|
||||
|
||||
try (SeekableByteChannel fc = Files.newByteChannel(path)) {
|
||||
buffer = BufferUtils.createByteBuffer((int) fc.size() + 1);
|
||||
while (fc.read(buffer) != -1) ;
|
||||
}
|
||||
|
||||
buffer.flip();
|
||||
return buffer;
|
||||
}
|
||||
}
|
||||
|
@ -1,9 +1,19 @@
|
||||
package gameplay.match;
|
||||
|
||||
import engine.Engine;
|
||||
import engine.input.Button;
|
||||
import engine.input.GamepadInput;
|
||||
import engine.input.InputConst;
|
||||
import engine.object.ObjectGl;
|
||||
import gameplay.input.InputBuffer;
|
||||
import gameplay.entities.*;
|
||||
import gameplay.entities.Character;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import static org.lwjgl.glfw.GLFW.*;
|
||||
|
||||
/**
|
||||
* Main class that describes the base structure of the match, with characters, timer and such
|
||||
* @author Victor Azra
|
||||
@ -38,5 +48,67 @@ public class match {
|
||||
this.roundsWonP2 = 0;
|
||||
}
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
|
||||
Engine engine = new Engine(800, 600, 3.0f / 4.0f);
|
||||
engine.init();
|
||||
|
||||
String path = "textures/zangief_sprite.png";
|
||||
|
||||
ObjectGl zangief = new ObjectGl(0f, 60f, 80f, 10f, path, null);
|
||||
zangief.setTextureWrap(58, 0, 62, 84, ObjectGl.STICK_TOP);
|
||||
engine.add_objectGl(zangief);
|
||||
|
||||
long timer = System.currentTimeMillis();
|
||||
long lastFrame;
|
||||
int frame = 0;
|
||||
boolean nextFrame = false;
|
||||
boolean Joystick1Present = glfwJoystickPresent(GLFW_JOYSTICK_1);
|
||||
|
||||
GamepadInput gamepad1 = null;
|
||||
Button jump = null;
|
||||
|
||||
if (Joystick1Present) {
|
||||
gamepad1 = new GamepadInput(GLFW_JOYSTICK_1);
|
||||
gamepad1.inputRefresh();
|
||||
List<Integer> listJump = new ArrayList<>();
|
||||
listJump.add(InputConst.buttonA);
|
||||
jump = new Button("jump", listJump, gamepad1);
|
||||
}
|
||||
|
||||
while (engine.isRunning()) {
|
||||
lastFrame = System.currentTimeMillis();
|
||||
// Game logic should fit here
|
||||
|
||||
if (Joystick1Present) {
|
||||
gamepad1.inputRefresh();
|
||||
|
||||
System.out.println(gamepad1.getAxisDiscreet(GLFW_GAMEPAD_AXIS_LEFT_X));
|
||||
|
||||
// Check si le personnage a sauté
|
||||
if (jump.isButtonPressed()) {
|
||||
// Le personnage saute
|
||||
System.out.println(" JE SAUTE ");
|
||||
}
|
||||
}
|
||||
|
||||
engine.update();
|
||||
engine.render();
|
||||
|
||||
frame++;
|
||||
|
||||
if (System.currentTimeMillis() - timer > 1000) {
|
||||
timer += 1000;
|
||||
System.out.println("FPS: " + frame);
|
||||
frame = 0;
|
||||
}
|
||||
|
||||
while (!nextFrame) {
|
||||
nextFrame = System.currentTimeMillis() - lastFrame >= 16.66f;
|
||||
}
|
||||
|
||||
nextFrame = false;
|
||||
if (engine.shouldClose()) engine.setRunning(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
BIN
textures/background_beach.png
Normal file
BIN
textures/background_beach.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 66 KiB |
Loading…
x
Reference in New Issue
Block a user