diff --git a/README.md b/README.md index 1fd6bf2..76dde4b 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ A turn based game in which players kill each others using bows, arrows and GRAVITY ! ## Built with -* [openJDK 15](https://openjdk.java.net/projects/jdk/15/) +* [openJDK 8](https://openjdk.java.net/projects/jdk/8/) * [libGDX](https://libgdx.com/) ## Usage @@ -26,14 +26,16 @@ To export the game to a .jar file: The resulting .jar file should be in `desktop/build/libs/` ## TODO LIST -* create BaseActor to concatenate code -* player turn -* kill player +* generate random map (with parameters) * move freely camera -* lerp camera arrow -* menus test +* faire des textures (+ background) +* particules de flèche, quand un joueur meurt... +* faire le gestionnaire de keybinds +* faire des sons et musique +* astéroïdes +* bonus/gadgets * améliorer trajectoires arrows en simulant tout n'univers -* rotating planets and moons (on themselves) +* petites phrases vision ## Contributing Please use [conventionnal commits](https://www.conventionalcommits.org/). diff --git a/core/src/sagittarius/model/Arrow.java b/core/src/sagittarius/model/Arrow.java index f0e6711..eb8a7c7 100644 --- a/core/src/sagittarius/model/Arrow.java +++ b/core/src/sagittarius/model/Arrow.java @@ -146,7 +146,7 @@ public class Arrow extends EntityQuad { private void verifyHitting() { for (Actor actor : GameScreen.players.getChildren()) { Player player = (Player) actor; - if (player == GameScreen.playerCurrent && TTL > 19.5) break; + if (player == GameScreen.playerCurrent && TTL > 19.5) continue; if (Intersector.overlapConvexPolygons(player.hitbox, this.hitbox)) { landed = true; GameScreen.removePlayer(player); @@ -158,10 +158,11 @@ public class Arrow extends EntityQuad { } } - private boolean hasHit() { + private boolean hasHit() { // doesn't work for (Actor actor : GameScreen.players.getChildren()) { Player player = (Player) actor; - if (TTL < 19 && Intersector.overlapConvexPolygons(player.hitbox, this.hitbox)) { + if (player == GameScreen.playerCurrent) continue; + if (player.hitbox.contains(this.getPosition())) { return true; } } @@ -181,16 +182,16 @@ public class Arrow extends EntityQuad { Arrow dummyArrow = new Arrow(angle, power, shooter); for (int i = 0; i < iterations; i++) { dummyArrow.integrationVerlet(timeStep); - if (dummyArrow.hasLanded() || dummyArrow.hasHit() ) { break; } path.add(dummyArrow.getX()); path.add(dummyArrow.getY()); + if ( dummyArrow.hasLanded() || dummyArrow.hasHit() ) { break; } } // TODO : optimize, lots of useless stuff + change name // or ignore and use adapters final float[] arr = new float[path.size()]; // utiliser le count de la fonction, faire tab size iteration*2, et draw avec count - int index = 0; + int index = 0; // TODO: créer objet Trajectory, avec un float[iteration*2] et un actualSize; for (final Float value: path) { arr[index++] = value; } diff --git a/core/src/sagittarius/model/Bow.java b/core/src/sagittarius/model/Bow.java index 82cb030..cd41593 100644 --- a/core/src/sagittarius/model/Bow.java +++ b/core/src/sagittarius/model/Bow.java @@ -60,7 +60,7 @@ public class Bow extends Actor { if (power > 50) shapes.setColor(Color.RED); shapes.line(this.anchor, GameScreen.worldCursor); if (aimAssist) { - float[] traj = Arrow.traj(angle, power, GameScreen.playerCurrent, 400, 0.05f); + float[] traj = Arrow.traj(angle, power, GameScreen.playerCurrent, 500, 0.03f); if (traj.length > 2) { shapes.polyline(traj); } diff --git a/core/src/sagittarius/view/GameScreen.java b/core/src/sagittarius/view/GameScreen.java index 0b99dd5..1da58eb 100644 --- a/core/src/sagittarius/view/GameScreen.java +++ b/core/src/sagittarius/view/GameScreen.java @@ -1,10 +1,12 @@ package sagittarius.view; import com.badlogic.gdx.Gdx; -import com.badlogic.gdx.Input.Buttons; +import com.badlogic.gdx.InputProcessor; +import com.badlogic.gdx.Input.Keys; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.OrthographicCamera; import com.badlogic.gdx.graphics.g2d.BitmapFont; +import com.badlogic.gdx.math.MathUtils; import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.math.Vector3; import com.badlogic.gdx.scenes.scene2d.Group; @@ -12,7 +14,7 @@ import com.badlogic.gdx.scenes.scene2d.Group; import sagittarius.SagittariusGame; import sagittarius.model.*; -public class GameScreen extends BaseScreen { +public class GameScreen extends BaseScreen implements InputProcessor { // ---------- ATTRIBUTEs ---------- @@ -38,12 +40,15 @@ public class GameScreen extends BaseScreen { private final float ispeed = 1.0f - speed; private static Entity focus; + // test + private OrthographicCamera gameCam; + // ---------- METHODs ---------- @Override public void initialize() { - Gdx.input.setInputProcessor(null); // on a pas de boutons + Gdx.input.setInputProcessor(this); // planets & moons attractors = new Group(); @@ -102,6 +107,7 @@ public class GameScreen extends BaseScreen { // camera stuff mainCameraPosition = mainStage.getCamera().position; focus = playerCurrent; + gameCam = ((OrthographicCamera) mainStage.getCamera()); } @@ -116,16 +122,21 @@ public class GameScreen extends BaseScreen { SagittariusGame.setActiveScreen( new StartScreen() ); } + // camera zoom using keys + if (Gdx.input.isKeyPressed( Keys.DOWN)) { + gameCam.zoom += dt; + } + if (Gdx.input.isKeyPressed( Keys.UP)) { + gameCam.zoom -= dt; + } + + // clamp zoom + gameCam.zoom = MathUtils.clamp(gameCam.zoom, 1f, 3f); + // camera follow focus mainCameraPosition.scl(ispeed); mainCameraPosition.add(new Vector3(focus.getPosition(), 0).scl(speed)); - if (Gdx.input.isButtonPressed(Buttons.LEFT)) { - ((OrthographicCamera) mainStage.getCamera()).zoom = 2f; - } else { - ((OrthographicCamera) mainStage.getCamera()).zoom = 1f; - } - } /** @@ -164,4 +175,55 @@ public class GameScreen extends BaseScreen { public static void setFocus(Entity entity) { focus = entity; } -} \ No newline at end of file + +// ---------- InputProcessor METHODs ---------- + + @Override + public boolean keyDown(int keycode) { + // TODO Auto-generated method stub + return true; + } + + @Override + public boolean keyUp(int keycode) { + // TODO Auto-generated method stub + return true; + } + + @Override + public boolean keyTyped(char character) { + // TODO Auto-generated method stub + return true; + } + + @Override + public boolean touchDown(int screenX, int screenY, int pointer, int button) { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean touchUp(int screenX, int screenY, int pointer, int button) { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean touchDragged(int screenX, int screenY, int pointer) { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean mouseMoved(int screenX, int screenY) { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean scrolled(float amountX, float amountY) { + gameCam.zoom += 2 * amountY * Gdx.graphics.getDeltaTime(); + return false; + } + +}