diff --git a/res/textures/banane.png b/res/textures/banane.png new file mode 100644 index 0000000..d5a5cdb Binary files /dev/null and b/res/textures/banane.png differ diff --git a/res/textures/bonus1.png b/res/textures/bonus1.png new file mode 100644 index 0000000..4347ba3 Binary files /dev/null and b/res/textures/bonus1.png differ diff --git a/res/textures/bonus2.png b/res/textures/bonus2.png new file mode 100644 index 0000000..0e6e1dc Binary files /dev/null and b/res/textures/bonus2.png differ diff --git a/res/textures/bonus3.png b/res/textures/bonus3.png new file mode 100644 index 0000000..6bd8aab Binary files /dev/null and b/res/textures/bonus3.png differ diff --git a/res/textures/dechets.png b/res/textures/dechets.png new file mode 100644 index 0000000..990664a Binary files /dev/null and b/res/textures/dechets.png differ diff --git a/res/textures/dechets1.png b/res/textures/dechets1.png new file mode 100644 index 0000000..ff6c1ba Binary files /dev/null and b/res/textures/dechets1.png differ diff --git a/res/textures/mur.png b/res/textures/mur.png index c93a68a..86f04f6 100644 Binary files a/res/textures/mur.png and b/res/textures/mur.png differ diff --git a/res/textures/murbas.png b/res/textures/murbas.png new file mode 100644 index 0000000..4764dd6 Binary files /dev/null and b/res/textures/murbas.png differ diff --git a/res/textures/murcoté.png b/res/textures/murcoté.png index 282dbe0..8d9d0ea 100644 Binary files a/res/textures/murcoté.png and b/res/textures/murcoté.png differ diff --git a/res/textures/murhauteur.png b/res/textures/murhauteur.png index f2bb0aa..c4c95bf 100644 Binary files a/res/textures/murhauteur.png and b/res/textures/murhauteur.png differ diff --git a/res/textures/perso2.png b/res/textures/perso2.png new file mode 100644 index 0000000..6328b10 Binary files /dev/null and b/res/textures/perso2.png differ diff --git a/res/textures/sand.jpg b/res/textures/sand.jpg new file mode 100644 index 0000000..fdff124 Binary files /dev/null and b/res/textures/sand.jpg differ diff --git a/src/globalgamejam/Main.java b/src/globalgamejam/Main.java index 4ac2dd9..ea49b36 100644 --- a/src/globalgamejam/Main.java +++ b/src/globalgamejam/Main.java @@ -80,7 +80,7 @@ public class Main { while(!glfwWindowShouldClose(windowID)){ - if(System.currentTimeMillis() - previousTicks >= 1000/60){//Update TICKS + if(System.currentTimeMillis() - previousTicks >= 1000/120){//Update TICKS glfwPollEvents(); Input.update(); game.update(); diff --git a/src/globalgamejam/game/EObjetType.java b/src/globalgamejam/game/EObjetType.java new file mode 100644 index 0000000..df12af4 --- /dev/null +++ b/src/globalgamejam/game/EObjetType.java @@ -0,0 +1,25 @@ +package globalgamejam.game; + +public enum EObjetType { + + POISSON("res/textures/dechets1.png",-20),POMME("res/textures/dechets.png",-30), + ETOILE_DE_MER("res/textures/bonus1.png",20),COQUILLAGE("res/textures/bonus2.png",30), + COQUILLAGE2("res/textures/bonus3.png",40),BANANE("res/textures/banane.png",50); + + private int points; + private String filename; + + EObjetType(String filename,int points){ + this.points = points; + this.filename = filename; + } + + public int getPoints() { + return points; + } + + public String getFilename() { + return filename; + } + +} diff --git a/src/globalgamejam/game/MainGame.java b/src/globalgamejam/game/MainGame.java index 0724bf6..3156ffb 100644 --- a/src/globalgamejam/game/MainGame.java +++ b/src/globalgamejam/game/MainGame.java @@ -12,6 +12,7 @@ import globalgamejam.world.MainWorld; */ public class MainGame extends Game{ + public static final int MAX_SCORE = 1000; private MainWorld world; private MainInterfaces interfaces; public int[] scores; @@ -20,9 +21,19 @@ public class MainGame extends Game{ @Override public void init() { this.scores = new int[2]; + this.scores[0] = MAX_SCORE; + this.scores[1] = MAX_SCORE; world = new MainWorld(this); interfaces = new MainInterfaces(this); } + + public void reset(){ + this.scores[0] = MAX_SCORE; + this.scores[1] = MAX_SCORE; + world.destroy(); + world = new MainWorld(this); + world.init(); + } @Override public void update() { diff --git a/src/globalgamejam/game/Mur.java b/src/globalgamejam/game/Mur.java new file mode 100644 index 0000000..b040df5 --- /dev/null +++ b/src/globalgamejam/game/Mur.java @@ -0,0 +1,27 @@ +package globalgamejam.game; + +import globalgamejam.physics.PhysicalEntity; +import globalgamejam.tiles.MurTile; +import globalgamejam.tiles.Tile; + +public class Mur extends PhysicalEntity { + + private final Tile tile; + + public Mur(float x, float y, String texturePath){ + super(x, y, 0, 0, 5, 0, 0, 0); + + this.tile = new MurTile(x, y, texturePath); + + this.setSizeXY(this.tile.getTexture().width, this.tile.getTexture().height); + } + + public Tile getTile(){ + return this.tile; + } + + @Override + public float getSpeed(){ + return this.getSpeedFactor(); + } +} diff --git a/src/globalgamejam/game/Objet.java b/src/globalgamejam/game/Objet.java index 077e67a..3c28f1a 100644 --- a/src/globalgamejam/game/Objet.java +++ b/src/globalgamejam/game/Objet.java @@ -6,13 +6,16 @@ import globalgamejam.tiles.ObjetTile; import globalgamejam.tiles.Tile; public class Objet extends PhysicalEntity { - + + private EObjetType type; private final Tile tile; - public Objet(String texturePath, float x, float y, float sizeRadius, float speed, float xVelocity, float yVelocity, float frictionFactor){ - super(x, y, sizeRadius, speed, xVelocity, yVelocity, frictionFactor); + public Objet(String texturePath, float x, float y, float speed, float xVelocity, float yVelocity, float frictionFactor){ + super(x, y, 0, 0, speed, xVelocity, yVelocity, frictionFactor); this.tile = new ObjetTile(texturePath, x, y); + + this.setSizeXY(this.tile.getTexture().width, this.tile.getTexture().height); } public Tile getTile(){ @@ -29,4 +32,14 @@ public class Objet extends PhysicalEntity { public String toString(){ return "x : " + this.x + ", y : " + this.y; } + + public EObjetType getType() { + return type; + } + + public void setType(EObjetType type) { + this.type = type; + } + + } diff --git a/src/globalgamejam/game/Player.java b/src/globalgamejam/game/Player.java index 6b33475..820e233 100644 --- a/src/globalgamejam/game/Player.java +++ b/src/globalgamejam/game/Player.java @@ -16,18 +16,20 @@ public class Player extends PhysicalEntity { private final Tile tile; private float angle; - private float speed = 3; + private float speed = 15; private final PhysicalEntity brosse; private final float longueurBalai; public Player(float x, float y){ - super(x, y, 100, 3, 0, 0, 10); + super(x, y, 0, 0, 3, 0, 0, 10); this.tile = new PlayerTile("res/textures/perso.png", x, y); - this.longueurBalai = 80; + this.setSizeXY(this.tile.getTexture().width, this.tile.getTexture().height); - this.brosse = new PhysicalEntity(x, y + this.longueurBalai, 2f, 3, 0, 0, 0){ + this.longueurBalai = 82; + + this.brosse = new PhysicalEntity(x, y + this.longueurBalai, 18f, 12f, 15, 0, 0, 0){ @Override public float getSpeed(){ return getSpeedFactor(); @@ -41,6 +43,7 @@ public class Player extends PhysicalEntity { public void move(float x, float y){ this.addPosition(x, y); + this.tile.setPosition(new Vector2f(this.x, this.y)); this.tile.applyTransform(); @@ -84,4 +87,10 @@ public class Player extends PhysicalEntity { public String toString(){ return this.brosse.toString(); } + + public float getAngle() { + return angle; + } + + } diff --git a/src/globalgamejam/interfaces/MainInterfaces.java b/src/globalgamejam/interfaces/MainInterfaces.java index c67475e..25bf168 100644 --- a/src/globalgamejam/interfaces/MainInterfaces.java +++ b/src/globalgamejam/interfaces/MainInterfaces.java @@ -2,6 +2,7 @@ package globalgamejam.interfaces; import globalgamejam.Main; import globalgamejam.game.MainGame; +import globalgamejam.gui.ActionGUI; import globalgamejam.gui.GUI; import globalgamejam.gui.GUILabel; import globalgamejam.input.Input; @@ -25,12 +26,17 @@ public class MainInterfaces { private ArrayList guisHelp; private GUILabel helpLabel; + + private ArrayList guisPartieTerminer; + private GUILabel labelPartieTerminer; + private GUILabel recommencerPartie; public MainInterfaces(MainGame game){ this.game = game; guis = new ArrayList(); guisHelp = new ArrayList(); + guisPartieTerminer = new ArrayList(); init(); } @@ -44,11 +50,35 @@ public class MainInterfaces { helpLabel = new GUILabel("HELP",Main.WIDTH/2,10,Color.WHITE,"Arial",32); helpLabel.setX(Main.WIDTH/2 - helpLabel.getWitdh()/2); guisHelp.add(helpLabel); + + //Menu Partie Terminer + labelPartieTerminer = new GUILabel("PARTIE TERMINER",Main.WIDTH/2,10,Color.WHITE,"Arial",32); + labelPartieTerminer.setX(Main.WIDTH/2 - labelPartieTerminer.getWitdh()/2); + recommencerPartie = new GUILabel("RECOMMENCER",Main.WIDTH/2,100,Color.WHITE,"Arial",16); + recommencerPartie.setX(Main.WIDTH/2 - recommencerPartie.getWitdh()/2); + recommencerPartie.setAction(new ActionGUI(){ + @Override + public void enter(float mouseX,float mouseY){ + recommencerPartie.setColor(new Color(1, 1, 1, 0.5f)); + } + @Override + public void leave(float mouseX,float mouseY){ + recommencerPartie.setColor(Color.WHITE); + } + @Override + public void clicked(float mouseX,float mouseY,int buttonKey,int buttonState){ + game.reset(); + } + }); + guisPartieTerminer.add(labelPartieTerminer); + guisPartieTerminer.add(recommencerPartie); } public void update(){ if(Input.isKey(this.game.helpKey)){ for(GUI g : guisHelp)g.update(); + }else if(this.game.scores[0] <= 0 || this.game.scores[1] <= 0){ + for(GUI g : guisPartieTerminer)g.update(); }else{ p1.setText("Player 1 : " + this.game.scores[0]); p1.setX((Main.WIDTH-SIZE_OF_DETAILS)/4 - p1.getWitdh()/2); @@ -61,6 +91,15 @@ public class MainInterfaces { public void render(){ if(Input.isKey(this.game.helpKey)){ for(GUI g : guisHelp)g.render(); + }else if(this.game.scores[0] <= 0 || this.game.scores[1] <= 0){ + if(this.game.scores[0] <= 0){ + labelPartieTerminer.setText("PARTIE TERMINER (GAGNANT : JOUEUR 2)"); + labelPartieTerminer.setX(Main.WIDTH/2 - labelPartieTerminer.getWitdh()/2); + }else{ + labelPartieTerminer.setText("PARTIE TERMINER (GAGNANT : JOUEUR 1)"); + labelPartieTerminer.setX(Main.WIDTH/2 - labelPartieTerminer.getWitdh()/2); + } + for(GUI g : guisPartieTerminer)g.render(); }else{ for(GUI g : guis)g.render(); } @@ -71,6 +110,8 @@ public class MainInterfaces { guis.clear(); for(GUI g : guisHelp)g.destroy(); guisHelp.clear(); + for(GUI g : guisPartieTerminer)g.destroy(); + guisPartieTerminer.clear(); } } diff --git a/src/globalgamejam/physics/PhysicalEntity.java b/src/globalgamejam/physics/PhysicalEntity.java index 8845ff7..f76d5a2 100644 --- a/src/globalgamejam/physics/PhysicalEntity.java +++ b/src/globalgamejam/physics/PhysicalEntity.java @@ -1,5 +1,7 @@ package globalgamejam.physics; +import globalgamejam.game.Mur; + /** * * @author Jean-Baptiste @@ -9,8 +11,10 @@ public class PhysicalEntity { protected float x; protected float y; - - private float sizeRadius; + +// private float sizeRadius; + private float sizeX; + private float sizeY; private float xVelocity; private float yVelocity; @@ -20,41 +24,91 @@ public class PhysicalEntity { private float frictionFactor; - public PhysicalEntity(float x, float y, float sizeRadius, float speedFactor, float xVelocity, float yVelocity, float frictionFactor) { +/* public PhysicalEntity(float x, float y, float sizeRadius, float speedFactor, float xVelocity, float yVelocity, float frictionFactor) { this.x = x; this.y = y; + this.sizeX = sizeRadius * 2; + this.sizeY = sizeRadius * 2; this.sizeRadius = sizeRadius; this.xVelocity = xVelocity; this.yVelocity = yVelocity; this.frictionFactor = frictionFactor; this.speedFactor = speedFactor; this.speed = 0; + }*/ + + public PhysicalEntity(float x, float y, float sizeX, float sizeY, float speedFactor, float xVelocity, float yVelocity, float frictionFactor) { + this.x = x; + this.y = y; + this.sizeX = sizeX; + this.sizeY = sizeY; + // this.sizeRadius = -1; + this.xVelocity = xVelocity; + this.yVelocity = yVelocity; + this.frictionFactor = frictionFactor; + this.speedFactor = speedFactor; + this.speed = 0; } - + + public boolean collideWith(PhysicalEntity entity){ + // if(this.sizeRadius == -1 || entity.sizeRadius == -1){ + return this.collideWithSquareHitBox(entity); + /* } + else{ + return this.collideWithRoundHitBox(entity); + }*/ + } + public boolean collideWithSquareHitBox(PhysicalEntity entity){ // on teste une collision avec une hitbox carré - return (this.x + this.sizeRadius >= entity.x - entity.sizeRadius - && this.x - this.sizeRadius <= entity.x + entity.sizeRadius - && this.y + this.sizeRadius >= entity.y - entity.sizeRadius - && this.y - this.sizeRadius <= entity.y + entity.sizeRadius); + return (this.x + this.sizeX / 2 >= entity.x - entity.sizeX / 2 + && this.x - this.sizeX / 2 <= entity.x + entity.sizeX / 2 + && this.y + this.sizeY / 2 >= entity.y - entity.sizeY / 2 + && this.y - this.sizeY / 2 <= entity.y + entity.sizeY / 2); } /* public boolean collideWithRoundHitBox(PhysicalEntity entity){ - if(this.collideWithSquareHitBox(entity)){ - - // teste avec une hitbox ronde à venir ... - return true; - } - return false; + + float distX = this.x - entity.x; + float distY = this.y - entity.y; + + float dist = (float)Math.sqrt( distX * distX + distY * distY ); + + return dist <= this.sizeRadius + entity.sizeRadius; } */ - public void resolveCollideWith(PhysicalEntity entity){ - float xVel = entity.getSpeed() * (this.getX() - entity.getX()) / this.getSizeRadius(); - float yVel = entity.getSpeed() * (this.getY() - entity.getY()) / this.getSizeRadius(); - this.addVelocity(xVel, yVel); + if(entity instanceof Mur){ + + // on a touché le bas du Mur + if(this.y <= entity.y - entity.sizeY / 2){ + this.yVelocity *= -1; + } + + // on a touché le haut du Mur + if(this.y >= entity.y + entity.sizeY / 2){ + this.yVelocity *= -1; + } + + // on a touché le coté gauche du Mur + if(this.x <= entity.x - entity.sizeX / 2){ + this.xVelocity *= -1; + } + + // on a touché le coté droit du Mur + if(this.x >= entity.x + entity.sizeX / 2){ + this.xVelocity *= -1; + } + + } + else{ + float xVel = entity.getSpeed() * (this.getX() - entity.getX()) / this.getSizeRadius(); + float yVel = entity.getSpeed() * (this.getY() - entity.getY()) / this.getSizeRadius(); + + this.addVelocity(xVel, yVel); + } } /** @@ -67,11 +121,11 @@ public class PhysicalEntity { this.xVelocity *= 1 - this.frictionFactor; this.yVelocity *= 1 - this.frictionFactor; - if(this.xVelocity < 0.001 && this.xVelocity > 0.001){ + if(this.xVelocity < 0.01 && this.xVelocity > 0.01){ this.xVelocity = 0; } - if(this.yVelocity < 0.001 && this.yVelocity > 0.001){ + if(this.yVelocity < 0.01 && this.yVelocity > 0.01){ this.yVelocity = 0; } @@ -136,7 +190,18 @@ public class PhysicalEntity { * @return the sizeRadius */ public float getSizeRadius() { - return sizeRadius; + return (this.sizeX + this.sizeY) / 2; + } +/* + public void setSizeRadius(float size){ + this.sizeRadius = size; + this.sizeX = size; + this.sizeY = size; + }*/ + + public void setSizeXY(float sizeX, float sizeY){ + this.sizeX = sizeX; + this.sizeY = sizeY; } @Override diff --git a/src/globalgamejam/tiles/Mur.java b/src/globalgamejam/tiles/MurTile.java similarity index 53% rename from src/globalgamejam/tiles/Mur.java rename to src/globalgamejam/tiles/MurTile.java index 83427fb..e487f09 100644 --- a/src/globalgamejam/tiles/Mur.java +++ b/src/globalgamejam/tiles/MurTile.java @@ -1,17 +1,15 @@ package globalgamejam.tiles; -import globalgamejam.math.Color4f; import globalgamejam.math.Vector2f; import globalgamejam.render.Texture; -public class Mur extends Tile{ +public class MurTile extends Tile{ - public Mur(int x,int y,int scaleX,int scaleY,String path){ + public MurTile(float x, float y, String path){ super(); - //super.setColor(Color4f.BLACK); super.setPosition(new Vector2f(x, y)); - super.setScale(new Vector2f(scaleX, scaleY)); super.setTexture(Texture.loadTexture(path)); + super.setScale(new Vector2f(this.getTexture().width, this.getTexture().height)); super.applyTransform(); } diff --git a/src/globalgamejam/tiles/ObjetTile.java b/src/globalgamejam/tiles/ObjetTile.java index 94890dc..78d1a87 100644 --- a/src/globalgamejam/tiles/ObjetTile.java +++ b/src/globalgamejam/tiles/ObjetTile.java @@ -8,8 +8,7 @@ public class ObjetTile extends Tile { public ObjetTile(String texturePath, float x, float y){ super(); - super.setColor(Color4f.RED); - // this.setTexture(Texture.loadTexture(texturePath)); + this.setTexture(Texture.loadTexture(texturePath)); this.setPosition(new Vector2f(x, y)); diff --git a/src/globalgamejam/world/MainWorld.java b/src/globalgamejam/world/MainWorld.java index a532af7..f4ce618 100644 --- a/src/globalgamejam/world/MainWorld.java +++ b/src/globalgamejam/world/MainWorld.java @@ -5,12 +5,15 @@ import java.util.ArrayList; import org.lwjgl.glfw.GLFW; import globalgamejam.Main; +import globalgamejam.game.EObjetType; import globalgamejam.game.MainGame; +import globalgamejam.game.Mur; import globalgamejam.game.Objet; import globalgamejam.game.Player; import globalgamejam.input.Input; +import globalgamejam.math.Mathf; import globalgamejam.tiles.Fond; -import globalgamejam.tiles.Mur; +import globalgamejam.tiles.MurTile; import globalgamejam.tiles.ObjetTile; import globalgamejam.tiles.Tile; import globalgamejam.tiles.VaguesTile; @@ -25,54 +28,62 @@ public class MainWorld { private MainGame game; private Player player1,player2; - private Mur mur1,mur2,mur3,murGauche,murDroit,murHaut,murBas; private VaguesTile vagues; private float vaguesValue; private ArrayList listObjet; + private ArrayList listMur; + private Mur mur1,mur2,mur3,murGauche,murDroit,murHaut,murBas; public MainWorld(MainGame game){ this.game = game; tiles = new ArrayList<>(); listObjet = new ArrayList<>(); + listMur = new ArrayList<>(); init(); } public void init(){ - player1 = new Player(200, 150); - player2 = new Player(400, 150); + player1 = new Player(Main.WIDTH/4-20, 150); + player2 = new Player(Main.WIDTH/4 * 3-20, 150); - - Fond fond = new Fond("res/textures/fond.png"); + Fond fond = new Fond("res/textures/sand.jpg"); fond.getTransform().translate(Main.WIDTH/2, Main.HEIGHT/2, 0); fond.getTransform().scale(Main.WIDTH,Main.HEIGHT, 0); vagues = new VaguesTile("res/textures/vagues.png"); vagues.getTransform().translate(Main.WIDTH/2, -Main.HEIGHT/2, 0); vagues.getTransform().scale(Main.WIDTH,Main.HEIGHT, 0); - - this.mur1 = new Mur(Main.WIDTH/2-10, Main.HEIGHT - 50, 20, 150,"res/textures/mur.png"); - this.mur2 = new Mur(Main.WIDTH/2-10, Main.HEIGHT - 250, 20, 50,"res/textures/mur.png"); - this.mur3 = new Mur(Main.WIDTH/2-10, Main.HEIGHT - 400, 20, 150,"res/textures/mur.png"); - this.murGauche=new Mur(0,Main.HEIGHT/2+40,30,Main.HEIGHT-80,"res/textures/murcoté.png"); - this.murDroit=new Mur(Main.WIDTH,Main.HEIGHT/2+40,30,Main.HEIGHT-80,"res/textures/murcoté.png"); - this.murHaut=new Mur(Main.WIDTH/2,Main.HEIGHT,Main.WIDTH,70,"res/textures/murhauteur.png"); - this.murBas=new Mur(Main.WIDTH/2,80,Main.WIDTH,20,"res/textures/murhauteur.png"); + + this.murGauche = new Mur(0,Main.HEIGHT/2+40,"res/textures/murcoté.png"); + this.murDroit = new Mur(Main.WIDTH,Main.HEIGHT/2+40,"res/textures/murcoté.png"); + this.murHaut = new Mur(Main.WIDTH/2,Main.HEIGHT+10,"res/textures/murhauteur.png"); + this.murBas = new Mur(Main.WIDTH/2,80,"res/textures/murbas.png"); + this.mur1 = new Mur(Main.WIDTH/2,Main.HEIGHT/2,"res/textures/mur.png"); + this.mur2 = new Mur(Main.WIDTH/2-10, Main.HEIGHT/2 - 250,"res/textures/mur.png"); + this.mur3 = new Mur(Main.WIDTH/2-10, Main.HEIGHT - 400, "res/textures/mur.png"); tiles.add(fond); tiles.add(vagues); - tiles.add(murGauche); - tiles.add(murDroit); - tiles.add(murHaut); - tiles.add(murBas); - tiles.add(this.mur1); - tiles.add(this.mur2); - tiles.add(this.mur3); + tiles.add(mur1.getTile()); + tiles.add(mur2.getTile()); + tiles.add(mur3.getTile()); + tiles.add(murGauche.getTile()); + tiles.add(murDroit.getTile()); + tiles.add(murHaut.getTile()); + tiles.add(murBas.getTile()); + tiles.add(player1.getTile()); tiles.add(player2.getTile()); - + listMur.add(mur1); + listMur.add(mur2); + listMur.add(mur3); + listMur.add(murGauche); + listMur.add(murDroit); + listMur.add(murHaut); + listMur.add(murBas); - generateEntity(3); + genererBonusMalus(3); } public void update(){ @@ -82,17 +93,21 @@ public class MainWorld { if(!Input.isKey(this.game.helpKey)){ //Player 1 float xDep = 0, yDep = 0; - if(Input.isKey(GLFW.GLFW_KEY_W) && player1.getTile().getPosition().y + player1.getTile().getScale().y/2.0f <= Main.HEIGHT - murHaut.getScale().y/2.0f){ - yDep = player1.getSpeed(); + if(Input.isKey(GLFW.GLFW_KEY_W)){ + xDep = player1.getSpeed() * Mathf.cos(Mathf.toRadians(player1.getAngle() + 90)); + yDep = player1.getSpeed() * Mathf.sin(Mathf.toRadians(player1.getAngle() + 90)); } - if(Input.isKey(GLFW.GLFW_KEY_S) && player1.getTile().getPosition().y - player1.getTile().getScale().y/2.0f >= murBas.getScale().y/2.0f + murBas.getPosition().y){ - yDep = -player1.getSpeed(); + if(Input.isKey(GLFW.GLFW_KEY_S)){ + xDep = player1.getSpeed() * Mathf.cos(Mathf.toRadians(player1.getAngle() - 90)); + yDep = player1.getSpeed() * Mathf.sin(Mathf.toRadians(player1.getAngle() - 90)); } - if(Input.isKey(GLFW.GLFW_KEY_A) && player1.getTile().getPosition().x - player1.getTile().getScale().x/2.0f >= 0.0f + murGauche.getScale().getX()/2.0f){ - xDep = -player1.getSpeed(); + if(Input.isKey(GLFW.GLFW_KEY_A)){ + xDep = player1.getSpeed() * Mathf.cos(Mathf.toRadians(player1.getAngle() - 180)); + yDep = player1.getSpeed() * Mathf.sin(Mathf.toRadians(player1.getAngle() - 180)); } - if(Input.isKey(GLFW.GLFW_KEY_D) && player1.getTile().getPosition().x + player1.getTile().getScale().x/2.0f <= Main.WIDTH/2.0f){ - xDep = player1.getSpeed(); + if(Input.isKey(GLFW.GLFW_KEY_D)){ + xDep = player1.getSpeed() * Mathf.cos(Mathf.toRadians(player1.getAngle())); + yDep = player1.getSpeed() * Mathf.sin(Mathf.toRadians(player1.getAngle())); } if(xDep != 0.0 && yDep != 0.0){ @@ -103,54 +118,72 @@ public class MainWorld { player1.move(xDep, yDep); if(Input.isKey(GLFW.GLFW_KEY_Q)){ - player1.rotate(5); + player1.rotate(player1.getSpeed()); } if(Input.isKey(GLFW.GLFW_KEY_E)){ - player1.rotate(-5); - } - - for(Objet o : this.listObjet){ - if(player1.brosseCollideWith(o)){ - o.resolveCollideWith(player1.getBrosse()); - } - - for(Objet o2 : this.listObjet){ - if(!o.equals(o2) && o.collideWithSquareHitBox(o2)){ - o.resolveCollideWith(o2); - } - } + player1.rotate(-player1.getSpeed()); } //Player 2 xDep = 0; yDep = 0; - if(Input.isKey(GLFW.GLFW_KEY_I) && player2.getTile().getPosition().y + player2.getTile().getScale().y/2.0f <= Main.HEIGHT - murHaut.getScale().y/2.0f){ - yDep = player2.getSpeed(); - } - if(Input.isKey(GLFW.GLFW_KEY_K) && player2.getTile().getPosition().y - player2.getTile().getScale().y/2.0f >= murBas.getScale().y/2.0f + murBas.getPosition().y){ - yDep = -player2.getSpeed(); - } - if(Input.isKey(GLFW.GLFW_KEY_J ) && player2.getTile().getPosition().x - player2.getTile().getScale().x/2.0f >= Main.WIDTH/2.0f){ - xDep = -player2.getSpeed(); - } - if(Input.isKey(GLFW.GLFW_KEY_L) && player2.getTile().getPosition().x + player2.getTile().getScale().x/2.0f <= Main.WIDTH - murDroit.getScale().getX()/2.0f){ - xDep = player2.getSpeed(); - } + if(Input.isKey(GLFW.GLFW_KEY_I)){ + xDep = player2.getSpeed() * Mathf.cos(Mathf.toRadians(player2.getAngle() + 90)); + yDep = player2.getSpeed() * Mathf.sin(Mathf.toRadians(player2.getAngle() + 90)); + } + if(Input.isKey(GLFW.GLFW_KEY_K)){ + xDep = player2.getSpeed() * Mathf.cos(Mathf.toRadians(player2.getAngle() - 90)); + yDep = player2.getSpeed() * Mathf.sin(Mathf.toRadians(player2.getAngle() - 90)); + } + if(Input.isKey(GLFW.GLFW_KEY_J)){ + xDep = player2.getSpeed() * Mathf.cos(Mathf.toRadians(player2.getAngle() - 180)); + yDep = player2.getSpeed() * Mathf.sin(Mathf.toRadians(player2.getAngle() - 180)); + } + if(Input.isKey(GLFW.GLFW_KEY_L)){ + xDep = player2.getSpeed() * Mathf.cos(Mathf.toRadians(player2.getAngle())); + yDep = player2.getSpeed() * Mathf.sin(Mathf.toRadians(player2.getAngle())); + } if(xDep != 0.0 && yDep != 0.0){ xDep *= Math.cos(Math.PI / 4); yDep *= Math.cos(Math.PI / 4); } + player2.move(xDep, yDep); if(Input.isKey(GLFW.GLFW_KEY_U)){ - player2.rotate(5); + player2.rotate(player2.getSpeed()); } if(Input.isKey(GLFW.GLFW_KEY_O)){ - player2.rotate(-5); + player2.rotate(-player2.getSpeed()); } + + for(Objet o : this.listObjet){ + if(player1.brosseCollideWith(o)){ + o.resolveCollideWith(player1.getBrosse()); + this.game.scores[0]-=10; + } + + if(player2.brosseCollideWith(o)){ + o.resolveCollideWith(player2.getBrosse()); + this.game.scores[1]-=10; + } + + for(Objet o2 : this.listObjet){ + if(!o.equals(o2) && o.collideWith(o2)){ + o.resolveCollideWith(o2); + } + } + + for(Mur m : this.listMur){ + if(o.collideWith(m)){ + o.resolveCollideWith(m); + } + } + } } + vaguesValue += Main.delta * 2; applyVaguesCoeff((Math.cos(vaguesValue)>0.5)? ((float)Math.cos(vaguesValue)-0.5f)*2:0,(int)Main.HEIGHT/8,Main.HEIGHT/4*3); @@ -158,7 +191,7 @@ public class MainWorld { } public void render(){ - if(!Input.isKey(this.game.helpKey)){ + if(!Input.isKey(this.game.helpKey) && this.game.scores[0] > 0 && this.game.scores[1] > 0){ for(Tile t : tiles)t.render(); } } @@ -168,48 +201,17 @@ public class MainWorld { tiles.clear(); } - private void generateEntity(int nb){ - final int MIN_HAUTEUR_MAX=150;//gére la hauteur min de la hauteur maximum de la vague - final int MIN_HAUTEUR=80;//hauteur min que doit monter la vague - final int MAX_HAUTEUR_MAX=Main.HEIGHT-80;//hauteur maximum que peut monter la vague au max - - - int hauteurMax = (int) (MIN_HAUTEUR_MAX +Math.random()* MAX_HAUTEUR_MAX); - int nbMin = 1; - int nbMax = 1; - - if(hauteurMax<=MIN_HAUTEUR_MAX){ - nbMin=nb-1; - nbMax=1; - } - if(hauteurMax>MIN_HAUTEUR_MAX && hauteurMax=Main.HEIGHT/2){ - nbMin=1; - nbMax=nb+1; - } - int countJ1=(int)(nbMin + Math.random()*nbMax); - int countJ2=(int)(nbMin + Math.random()*nbMax); - - for(int i =0;i