projet-programmation-orient.../core/src/sagittarius/view/GameScreen.java

241 lines
6.8 KiB
Java
Raw Normal View History

package sagittarius.view;
2021-04-05 16:45:57 +00:00
import com.badlogic.gdx.Gdx;
2021-05-03 13:16:10 +00:00
import com.badlogic.gdx.InputProcessor;
import com.badlogic.gdx.Input.Keys;
2021-04-05 16:45:57 +00:00
import com.badlogic.gdx.graphics.Color;
2021-04-23 15:32:17 +00:00
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.g2d.BitmapFont;
2021-05-03 13:16:10 +00:00
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;
2021-04-05 16:45:57 +00:00
import sagittarius.SagittariusGame;
import sagittarius.model.*;
2021-04-05 16:45:57 +00:00
2021-05-03 13:16:10 +00:00
public class GameScreen extends BaseScreen implements InputProcessor {
2021-04-05 16:45:57 +00:00
// ---------- ATTRIBUTEs ----------
2021-04-05 16:45:57 +00:00
public static BitmapFont fontDebug = new BitmapFont();
// Cursors
public static Vector2 screenCursor;
private static Vector3 unprojectedCursor;
public static Vector2 worldCursor;
// Groups
public static Group attractors;
public static Group arrows;
public static Group players; // TODO: move this in SagittariusGame ?
2021-04-13 17:45:49 +00:00
// turn system stuff
public static int playerIndex;
public static Player playerCurrent;
2021-04-09 14:28:37 +00:00
// camera stuff
private Vector3 mainCameraPosition;
private final float speed = 0.05f;
private final float ispeed = 1.0f - speed;
private static Entity focus;
2021-05-03 13:16:10 +00:00
// test
private OrthographicCamera gameCam;
// ---------- METHODs ----------
2021-04-05 16:45:57 +00:00
@Override
public void initialize() {
2021-05-13 20:39:34 +00:00
if (SagittariusGame.music.isPlaying()){
SagittariusGame.music.stop();
SagittariusGame.music = Gdx.audio.newMusic(Gdx.files.internal("core/assets/sounds/HMO-MercuryCity.mp3"));
SagittariusGame.music.setLooping(true);
SagittariusGame.music.play();
}
2021-05-03 13:16:10 +00:00
Gdx.input.setInputProcessor(this);
2021-04-23 15:32:17 +00:00
2021-05-12 17:06:26 +00:00
// arrows
arrows = new Group();
mainStage.addActor(arrows);
// planets & moons
attractors = new Group();
2021-04-13 19:24:36 +00:00
Planet planet1 = new Planet(new Vector2(300, 200), 1000, 50, Color.BLUE);
attractors.addActor(planet1);
2021-04-13 19:24:36 +00:00
Planet planet2 = new Planet(new Vector2(1200, 700), 3000, 200, Color.ORANGE);
attractors.addActor(planet2);
Moon moon2_1 = new Moon(planet2, 100, 70, 500, Color.MAGENTA);
attractors.addActor(moon2_1);
Planet planet3 = new Planet(new Vector2(1500, 100), 1000, 70, Color.PINK);
attractors.addActor(planet3);
mainStage.addActor(attractors);
// players
2021-04-13 17:45:49 +00:00
players = new Group();
2021-04-22 15:43:41 +00:00
Player player1 = new Player(planet1, Color.RED);
2021-04-13 17:45:49 +00:00
players.addActor(player1);
Player player2 = new Player(planet2, Color.WHITE);
2021-04-13 17:45:49 +00:00
players.addActor(player2);
Player player3 = new Player(moon2_1, Color.YELLOW);
players.addActor(player3);
2021-04-13 17:45:49 +00:00
mainStage.addActor(players);
2021-04-13 19:55:14 +00:00
// The one and only Bow
Bow bow = new Bow(true);
2021-04-13 19:55:14 +00:00
mainStage.addActor(bow);
// others
2021-04-13 19:08:25 +00:00
FPS fpsCounter = new FPS(uiStage);
uiStage.addActor(fpsCounter);
MouseInfo mouseInfo = new MouseInfo();
uiStage.addActor(mouseInfo);
2021-04-09 13:10:39 +00:00
mainStage.setDebugAll(SagittariusGame.debugMode);
uiStage.setDebugAll(SagittariusGame.debugMode);
2021-04-10 10:22:48 +00:00
2021-04-13 19:55:14 +00:00
// game turns
playerIndex = 0;
2021-04-13 19:57:53 +00:00
player1.setActive(true);
playerCurrent = player1;
2021-04-13 19:55:14 +00:00
// camera stuff
mainCameraPosition = mainStage.getCamera().position;
focus = playerCurrent;
2021-05-03 13:16:10 +00:00
gameCam = ((OrthographicCamera) mainStage.getCamera());
2021-04-05 16:45:57 +00:00
}
@Override
public void update(float dt) {
screenCursor = new Vector2(Gdx.input.getX(), Gdx.input.getY()); // utiliser les trucs fournis par libGDX
unprojectedCursor = mainStage.getCamera().unproject(new Vector3(screenCursor, 0));
worldCursor = new Vector2(unprojectedCursor.x, unprojectedCursor.y);
if (players.getChildren().size <= 1) {
SagittariusGame.setActiveScreen( new StartScreen() );
}
2021-04-13 17:45:49 +00:00
2021-05-03 13:16:10 +00:00
// camera zoom using keys
if (Gdx.input.isKeyPressed( Keys.DOWN)) {
gameCam.zoom += dt;
}
if (Gdx.input.isKeyPressed( Keys.UP)) {
gameCam.zoom -= dt;
}
2021-05-13 21:14:05 +00:00
// Pause Menu
if (Gdx.input.isKeyPressed( Keys.ESCAPE)) {
SagittariusGame.setActiveScreen( new ResumeScreen(this) );
}
2021-05-03 13:16:10 +00:00
// 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));
2021-04-05 16:45:57 +00:00
}
/**
* Removes a Player from the Game.
*
* @param player Player to remove from the active list.
*/
public static void removePlayer(Player player) {
player.setActive(false);
int index = players.getChildren().indexOf(player, true);
if (index < playerIndex) {
players.removeActor(player);
2021-04-23 14:26:17 +00:00
playerIndex++;
playerIndex %= players.getChildren().size;
} else if (index == playerIndex) {
players.removeActor(player);
playerIndex %= players.getChildren().size;
playerCurrent = (Player) players.getChild(playerIndex);
playerCurrent.setActive(true);
} else {
players.removeActor(player);
2021-04-13 17:45:49 +00:00
}
}
/**
* Used to allows the next Player in the list to play.
*/
public static void nextPlayer() {
playerCurrent.setActive(false);
playerIndex++;
playerIndex %= players.getChildren().size;
playerCurrent = (Player) players.getChild(playerIndex);
playerCurrent.setActive(true);
}
public static void setFocus(Entity entity) {
focus = entity;
}
2021-05-03 13:16:10 +00:00
// ---------- 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;
}
}