système pour contrôler le rendu de sprite de taille differente

# Pour l'instant toutes les sprites d'un même état doivent être de la même taille
This commit is contained in:
Antoine 2021-05-23 00:57:29 +02:00
parent ee8473e344
commit 5c48a88be4
2 changed files with 45 additions and 16 deletions

View File

@ -160,8 +160,9 @@ public class Engine {
String path2 = "textures/awesomeface.png"; String path2 = "textures/awesomeface.png";
ObjectGl zangief = new ObjectGl(0f,60f,80f,10f, path, null); ObjectGl zangief = new ObjectGl(0f,60f,80f,10f, path, null);
zangief.setTextureWrap(58,0,62,84, ObjectGl.STICK_TOP);
engine.add_objectGl(zangief); engine.add_objectGl(zangief);
// zangief.translate(new Vector3f(-600.0f,100,10.0f)); zangief.translate(new Vector3f(-5000.0f,0.0f,10.0f));
ObjectGl smiley2 = new ObjectGl(0.0f,500.0f,500.0f, 1f, path2, null); ObjectGl smiley2 = new ObjectGl(0.0f,500.0f,500.0f, 1f, path2, null);
engine.add_objectGl(smiley2); engine.add_objectGl(smiley2);
@ -176,8 +177,7 @@ public class Engine {
lastFrame = System.currentTimeMillis(); lastFrame = System.currentTimeMillis();
// Game logic should fit here // Game logic should fit here
zangief.setTextureWrap(58,0,62,84); // gamepadInput(zangief, speed);
gamepadInput(zangief, speed);
input(zangief, speed); input(zangief, speed);
// input(smiley2, speed); // input(smiley2, speed);
@ -226,9 +226,9 @@ public class Engine {
if ( (gamepadAxes.get(2) < -0.1 || gamepadAxes.get(2) > 0.1) ) { // de droite à gauche //joystick gauche if ( (gamepadAxes.get(2) < -0.1 || gamepadAxes.get(2) > 0.1) ) { // de droite à gauche //joystick gauche
token.translate(new Vector3f (5*speed * gamepadAxes.get(2), 0.0f, 0.0f)); token.translate(new Vector3f (5*speed * gamepadAxes.get(2), 0.0f, 0.0f));
if ( gamepadAxes.get(2) < -0.1 ){ if ( gamepadAxes.get(2) < -0.1 ){
token.setTextureWrap(121,0,57,80); token.setTextureWrap(121,0,57,80, ObjectGl.DEFAULT);
}else if (gamepadAxes.get(2) > 0.1) { }else if (gamepadAxes.get(2) > 0.1) {
token.setTextureWrap(178,0,62,82); token.setTextureWrap(178,0,62,82, ObjectGl.DEFAULT);
} }
} }
@ -266,19 +266,27 @@ public class Engine {
} }
public static void input(ObjectGl token, int speed) { public static void input(ObjectGl token, int speed) {
if (Input.isKeyDown(GLFW.GLFW_KEY_W)) { boolean keyPressed = false;
token.scale(new Vector3f (1.01f, 1.01f, 0.0f)); if (Input.isKeyDown(GLFW.GLFW_KEY_S)) {
token.setTextureWrap(161,260,56,59, ObjectGl.STICK_BOTTOM);
keyPressed = true;
} else if (Input.isKeyDown(GLFW.GLFW_KEY_W)) {
// token.translate(new Vector3f (0.0f, speed * 5.0f, 0.0f));
keyPressed = true;
} }
if (Input.isKeyDown(GLFW.GLFW_KEY_A)) { if (Input.isKeyDown(GLFW.GLFW_KEY_A)) {
token.translate(new Vector3f (speed *-5.0f, 0.0f, 0.0f)); token.translate(new Vector3f (speed *-5.0f, 0.0f, 0.0f));
token.setTextureWrap(121,0,57,80); // token.setTextureWrap(121,0,57,80, ObjectGl.STICK_TOP);
token.setTextureWrap(121,0,57,82, ObjectGl.STICK_TOP);
keyPressed = true;
} }
if (Input.isKeyDown(GLFW.GLFW_KEY_S)) { else if (Input.isKeyDown(GLFW.GLFW_KEY_D)) {
token.setTextureWrap(161,260,56,59);
}
if (Input.isKeyDown(GLFW.GLFW_KEY_D)) {
token.translate(new Vector3f (speed * 5.0f, 0.0f, 0.0f)); token.translate(new Vector3f (speed * 5.0f, 0.0f, 0.0f));
token.setTextureWrap(178,0,62,82); // token.setTextureWrap(178,0,62,82, ObjectGl.STICK_TOP);
token.setTextureWrap(178,0,62,82, ObjectGl.STICK_TOP);
keyPressed = true;
} }
// if (!keyPressed) token.setTextureWrap(58,0,62,84, ObjectGl.STICK_TOP);
if (!keyPressed) token.setTextureWrap(58,0,62,82, ObjectGl.STICK_TOP);
} }
} }

View File

@ -8,6 +8,13 @@ import engine.math.*;
*/ */
public class ObjectGl { public class ObjectGl {
/**
* STATE CONST DECLARATION
*/
public static final int DEFAULT = 0, STICK_BOTTOM = 1, STICK_TOP = 2;
private int stick_state;
protected VertexArray vertexArray; protected VertexArray vertexArray;
protected Shader shader; protected Shader shader;
protected Matrix4f transform; protected Matrix4f transform;
@ -58,16 +65,17 @@ public class ObjectGl {
this.scalingFactor = size; this.scalingFactor = size;
this.transform = Matrix4f.identity(); this.transform = Matrix4f.identity();
this.scale(new Vector3f(size, size,1f)); this.scale(new Vector3f(size, size,1f));
this.stick_state = DEFAULT;
// use different shader for each set of option // use different shader for each set of option
if (tex == null && color == null){ if (tex == null && color == null){
this.shader = new Shader("shaders/ObjectGl/vert.glsl","shaders/ObjectGl/frag.glsl"); this.shader = new Shader("shaders/ObjectGl/vert.glsl","shaders/ObjectGl/frag.glsl");
} else if (tex == null){ } else if (tex == null){
this.shader = new Shader("shaders/ObjectGlColor/vert.glsl","shaders/ObjectGlColor/frag.glsl"); // TODO this.shader = new Shader("shaders/ObjectGlColor/vert.glsl","shaders/ObjectGlColor/frag.glsl");
} else if (color == null){ } else if (color == null){
this.shader = new Shader("shaders/ObjectGlTex/vert.glsl","shaders/ObjectGlTex/frag.glsl"); this.shader = new Shader("shaders/ObjectGlTex/vert.glsl","shaders/ObjectGlTex/frag.glsl");
} else { } else {
this.shader = new Shader("shaders/ObjectGlTexColor/vert.glsl","shaders/ObjectGlTexColor/frag.glsl"); // TODO this.shader = new Shader("shaders/ObjectGlTexColor/vert.glsl","shaders/ObjectGlTexColor/frag.glsl");
} }
} }
@ -138,8 +146,21 @@ public class ObjectGl {
* @param w the length of the wrapping on the horizontal axis * @param w the length of the wrapping on the horizontal axis
* @param h the length of the wrapping on the vertical axis * @param h the length of the wrapping on the vertical axis
*/ */
public void setTextureWrap(float x, float y, float w, float h){ public void setTextureWrap(float x, float y, float w, float h, int sticky){
// TODO set sticky property + precision issue // TODO set sticky property + precision issue
if (this.stick_state != sticky){ // Check if we're using a new dimension
if (sticky == STICK_BOTTOM){
this.stick_state = STICK_BOTTOM;
this.translate(new Vector3f(0.0f, (h - this.height)*this.scalingFactor, 0.0f));
} else if (sticky == STICK_TOP){
this.stick_state = STICK_TOP;
this.translate(new Vector3f(0.0f, (h - this.height)*this.scalingFactor, 0.0f));
} else {
this.stick_state = DEFAULT;
}
}
this.height = h;
this.width = w;
this.vertexArray.swapVertexBufferObject(Primitive.createRectangle(this.zPos, w, h)); this.vertexArray.swapVertexBufferObject(Primitive.createRectangle(this.zPos, w, h));
int texWidth = this.texture.getWidth(); int texWidth = this.texture.getWidth();
int texHeight = this.texture.getHeight(); int texHeight = this.texture.getHeight();