Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * Created by Oskar on 31/05/16.
- */
- import com.almasb.fxgl.GameApplication;
- import com.almasb.fxgl.asset.Assets;
- import com.almasb.fxgl.entity.Control;
- import com.almasb.fxgl.entity.Entity;
- import com.almasb.fxgl.GameSettings;
- import com.almasb.fxgl.entity.FXGLEvent;
- import com.almasb.fxgl.entity.FXGLEventType;
- import com.sun.javafx.scene.paint.GradientUtils;
- import com.sun.xml.internal.bind.v2.TODO;
- import javafx.animation.FadeTransition;
- import javafx.animation.ScaleTransition;
- import javafx.beans.property.BooleanProperty;
- import javafx.beans.property.SimpleBooleanProperty;
- import javafx.beans.value.ObservableValue;
- import javafx.geometry.Point2D;
- import javafx.beans.property.IntegerProperty;
- import javafx.beans.property.SimpleIntegerProperty;
- import javafx.geometry.Pos;
- import javafx.scene.input.KeyCode;
- import javafx.scene.layout.Pane;
- import javafx.scene.layout.StackPane;
- import javafx.scene.paint.Color;
- import javafx.scene.shape.Circle;
- import javafx.scene.shape.Rectangle;
- import javafx.scene.text.Font;
- import javafx.scene.text.Text;
- import javafx.scene.transform.Rotate;
- import javafx.util.Duration;
- import java.util.Random;
- public class game extends GameApplication {
- private enum Event implements FXGLEventType{
- DEATH
- }
- private long lastTimeDotSpawned = 0, lastTimeLaserShot = 0,
- lastTimeBoostSpawned = 0, lastTimeShot = 0,
- lastTimeTraceSpawned = 0, lastTimeEnemySpawned = 0;
- //UI ELEMENTS
- private IntegerProperty score = new SimpleIntegerProperty();
- private BooleanProperty laserAlive = new SimpleBooleanProperty(false);
- private Rectangle laserBar = new Rectangle(100, 20);
- private Text fps = new Text();
- //DECLARATION OF PLAYER
- private Entity player = new Entity("player");
- private Random random = new Random();
- //THIS IS FOR THE SPRITES AND AUDIO #TODO
- private Assets assets;
- @Override
- protected void initSettings(GameSettings settings) {
- settings.setWidth(1280);
- settings.setHeight(720);
- settings.setTitle("Warrior Snake");
- settings.setVersion("0.0.1");
- }
- @Override
- protected void initAssets() throws Exception {
- }
- @Override
- protected void initGame(Pane gameRoot) {
- Entity bg = new Entity("background");
- bg.setGraphics(new Rectangle(1280, 720));
- addEntities(bg);
- initCollision();
- initInput();
- spawnPlayer();
- }
- private void initCollision(){
- addCollisionHandler("player", "enemy", (player, enemy) -> {
- player.fireFXGLEvent(new FXGLEvent(Event.DEATH));
- enemy.fireFXGLEvent(new FXGLEvent(Event.DEATH, player));
- });
- addCollisionHandler("bullet", "enemy", (bullet, enemy) -> {
- bullet.fireFXGLEvent(new FXGLEvent(Event.DEATH));
- enemy.fireFXGLEvent(new FXGLEvent(Event.DEATH, bullet));
- });
- addCollisionHandler("laser", "enemy", (laser, enemy) -> {
- enemy.fireFXGLEvent(new FXGLEvent(Event.DEATH, laser));
- });
- addCollisionHandler("player", "boost", (player, boost) -> {
- boost.fireFXGLEvent(new FXGLEvent(Event.DEATH));
- });
- }
- @Override
- protected void initUI(Pane uiRoot) {
- Text score = new Text();
- score.setTranslateX(1100);
- score.setTranslateY(50);
- score.textProperty().bind((ObservableValue<? extends String>) score);
- score.setFill(Color.AQUA);
- laserBar.setFill(Color.BLUEVIOLET);
- Text laser = new Text("SPACE");
- laser.setFont(Font.font(18));
- laser.setFill(Color.BLACK);
- laser.visibleProperty().bind(laserBar.widthProperty().isEqualTo(100));
- StackPane stack = new StackPane();
- stack.setTranslateX(50);
- stack.setTranslateY(50);
- stack.setAlignment(Pos.CENTER);
- stack.getChildren().addAll(laserBar, laser);
- fps.setTranslateX(50);
- fps.setTranslateY(100);
- fps.setFill(Color.BLACK);
- uiRoot.getChildren().addAll(score, stack, fps);
- }
- @Override
- protected void initInput() {
- addKeyPressBinding(KeyCode.UP, () -> {
- player.translate(0, -5);
- });
- addKeyPressBinding(KeyCode.DOWN, () -> {
- player.translate(0, 5);
- });
- addKeyPressBinding(KeyCode.LEFT, () -> {
- player.translate(-5, 0);
- });
- addKeyPressBinding(KeyCode.RIGHT, () -> {
- player.translate(5, 0);
- });
- addKeyPressBinding(KeyCode.SPACE, () -> {
- if(currentTime - lastTimeLaserShot >= 5 * SECOND){
- spawnLaser();
- lastTimeLaserShot = currentTime;
- }
- });
- }
- private void spawnPlayer(){
- player.setTranslateX(640);
- player.setTranslateY(360);
- player.setUsePhysics(true);
- player.addFXGLEventHandler(Event.DEATH, event ->{
- Entity p = event.getTarget();
- p.setTranslateX(random.nextInt(1200));
- p.setTranslateY(random.nextInt(700));
- playerScoreAnimation(p, -1000);
- });
- Rectangle rect = new Rectangle(40, 40);
- rect.setFill(Color.BLUE);
- player.setGraphics(rect);
- addEntities(player);
- }
- private void spawnEnemy(){
- Entity enemy = new Entity("enemy");
- enemy.setTranslateX(random.nextInt(1200));
- enemy.setTranslateY(random.nextInt(700));
- enemy.setUsePhysics(true);
- Circle c = new Circle(20);
- c.setFill(Color.RED);
- enemy.setGraphics(c);
- enemy.addControl(new Control() {
- private Point2D velocity = new Point2D(0,0);
- private long lastTimeChangedVelocity = 0;
- @Override
- public void onUpdate(Entity entity, long now) {
- if(now - lastTimeChangedVelocity >= 0.25*SECOND){
- velocity = new Point2D(player.getTranslateX(), player.getTranslateY())
- .subtract(entity.getTranslateX(), entity.getTranslateY())
- .normalize()
- .multiply(2);
- lastTimeChangedVelocity = now;
- }
- entity.translate(velocity.getX(), velocity.getY());
- }
- });
- enemy.addFXGLEventHandler(Event.DEATH, event -> {
- switch (event.getSource().getType()){
- case "bullet":
- playEnemyDeathAnimation(event.getTarget());
- break;
- case "laser":
- playEnemyDeathAnimation(event.getTarget());
- break;
- case "player": //fallthru
- default:
- }
- });
- addEntities(enemy);
- }
- private void spawnBullet(){
- Entity bullet = new Entity("bullet");
- bullet.setTranslateX(player.getTranslateX() + 20);
- bullet.setTranslateY(player.getTranslateY() + 20);
- bullet.setUsePhysics(true);
- Point2D vector = new Point2D(mouse.x, mouse.y)
- .subtract(bullet.getTranslateX(), bullet.getTranslateY())
- .normalize()
- .multiply(5);
- bullet.setProperty("vector", vector);
- double angle = Math.toDegrees(Math.atan(vector.getY()/vector.getX()));
- angle = vector.getX() > 0 ? angle : 180 + angle;
- bullet.getTransforms().add(new Rotate(angle, 0, 0));
- bullet.addControl(new Control() {
- @Override
- public void onUpdate(Entity entity, long now) {
- Point2D velocity = entity.getProperty("vector");
- entity.translate(velocity.getX(), velocity.getY());
- if(entity.getTranslateX() < 0 || entity.getTranslateX() > 1280 ||
- entity.getTranslateY() < 0 || entity.getTranslateY() > 720){
- entity.fireFXGLEvent(new FXGLEvent(Event.DEATH));
- }
- }
- });
- Rectangle rec = new Rectangle(10, 1);
- rec.setFill(Color.RED);
- bullet.setGraphics(rec);
- bullet.addFXGLEventHandler(Event.DEATH, event -> {
- bulletDeathAnimation(event.getTarget());
- });
- addEntities(bullet);
- }
- protected void spawnTrace(){
- Entity trace = new Entity("particle");
- trace.setTranslateX(player.getTranslateX());
- trace.setTranslateY(player.getTranslateY());
- Rectangle r = new Rectangle(40,40);
- r.setFill(Color.BLUEVIOLET);
- trace.setGraphics(r);
- addEntities(trace);
- FadeTransition ft = new FadeTransition(Duration.seconds(1), trace);
- ft.setFromValue(1);
- ft.setToValue(0);
- ft.setOnFinished(event -> removeEntity(trace));
- ft.play();
- }
- protected void spawnBoost(){
- Entity powerup = new Entity("powerup");
- powerup.setTranslateX(random.nextInt(1200));
- powerup.setTranslateY(random.nextInt(700));
- powerup.setUsePhysics(true);
- Rectangle r = new Rectangle(10, 10);
- r.setFill(Color.GREEN);
- powerup.setGraphics(r);
- powerup.addFXGLEventHandler(Event.DEATH, event -> {
- Entity p = event.getTarget();
- p.setUsePhysics(false);
- ScaleTransition st = new ScaleTransition(Duration.seconds(1), p);
- st.setFromX(1);
- st.setFromY(1);
- st.setToX(0);
- st.setToY(0);
- st.setOnFinished(e -> {
- removeEntity(p);
- });
- st.play();
- playScoreAnimation(p, 2000);
- });
- addEntities(powerup);
- }
- int angle = -90;
- private void spawnLaser(){
- Rectangle r = new Rectangle(1000, 1);
- r.setFill(Color.RED);
- Entity laser = new Entity("laser")
- .setPosition(player.getTranslateX(), player.getTranslateY())
- .setUsePhysics(true)
- .setGraphics(r);
- laser.getTransforms().add(new Rotate(angle));
- laserAlive.set(true);
- runAtIntervalWhile(() -> {
- laser.setPosition(player.getTranslateX()+20, player.getTranslateY() +20);
- laser.getTransforms().clear();
- laser.getTransforms().add(new Rotate(++angle));
- if(angle == 270){
- laserAlive.set(false);
- removeEntity(laser);
- angle = -90;
- }
- }, 0.002 * SECOND, laserAlive);
- addEntities(laser);
- }
- @Override
- protected void onUpdate(long now) {
- if(now - lastTimeDotSpawned >= 1 * SECOND){
- spawnDot();
- lastTimeDotSpawned = now;
- }
- if(now - lastTimeBoostSpawned >= 5 * SECOND){
- spawnBoost();
- lastTimeBoostSpawned = now;
- }
- if(now - lastTimeTraceSpawned >= 0.1 * SECOND){
- spawnTrace();
- lastTimeTraceSpawned = now;
- }
- if(now- lastTimeEnemySpawned >= 5 * SECOND){
- spawnEnemy();
- lastTimeEnemySpawned = now;
- }
- if(mouse.leftPressed && now - lastTimeShot >= 0.25 * SECOND){
- spawnBullet();
- lastTimeShot = now;
- }
- laserBar.setWidth(Math.min(100, ((now-lastTimeLaserShot) * 1.0f / (5*SECOND))
- * 100 ));
- fps.setText("FPS: " + fps + " Performance: " + fpsPerformance);
- }
- public static void main(String[] args){
- launch(args);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement