Advertisement
Guest User

Untitled

a guest
May 31st, 2016
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 11.60 KB | None | 0 0
  1. /**
  2.  * Created by Oskar on 31/05/16.
  3.  */
  4. import com.almasb.fxgl.GameApplication;
  5. import com.almasb.fxgl.asset.Assets;
  6. import com.almasb.fxgl.entity.Control;
  7. import com.almasb.fxgl.entity.Entity;
  8. import com.almasb.fxgl.GameSettings;
  9. import com.almasb.fxgl.entity.FXGLEvent;
  10. import com.almasb.fxgl.entity.FXGLEventType;
  11. import com.sun.javafx.scene.paint.GradientUtils;
  12. import com.sun.xml.internal.bind.v2.TODO;
  13. import javafx.animation.FadeTransition;
  14. import javafx.animation.ScaleTransition;
  15. import javafx.beans.property.BooleanProperty;
  16. import javafx.beans.property.SimpleBooleanProperty;
  17. import javafx.beans.value.ObservableValue;
  18. import javafx.geometry.Point2D;
  19. import javafx.beans.property.IntegerProperty;
  20. import javafx.beans.property.SimpleIntegerProperty;
  21. import javafx.geometry.Pos;
  22. import javafx.scene.input.KeyCode;
  23. import javafx.scene.layout.Pane;
  24. import javafx.scene.layout.StackPane;
  25. import javafx.scene.paint.Color;
  26. import javafx.scene.shape.Circle;
  27. import javafx.scene.shape.Rectangle;
  28. import javafx.scene.text.Font;
  29. import javafx.scene.text.Text;
  30. import javafx.scene.transform.Rotate;
  31. import javafx.util.Duration;
  32.  
  33. import java.util.Random;
  34.  
  35. public class game extends GameApplication {
  36.  
  37.     private enum Event implements FXGLEventType{
  38.         DEATH
  39.     }
  40.     private long lastTimeDotSpawned = 0, lastTimeLaserShot = 0,
  41.             lastTimeBoostSpawned = 0, lastTimeShot = 0,
  42.             lastTimeTraceSpawned = 0, lastTimeEnemySpawned = 0;
  43.  
  44.     //UI ELEMENTS
  45.     private IntegerProperty score = new SimpleIntegerProperty();
  46.     private BooleanProperty laserAlive = new SimpleBooleanProperty(false);
  47.     private Rectangle laserBar = new Rectangle(100, 20);
  48.     private Text fps = new Text();
  49.  
  50.  
  51.     //DECLARATION OF PLAYER
  52.     private Entity player = new Entity("player");
  53.     private Random random = new Random();
  54.  
  55.     //THIS IS FOR THE SPRITES AND AUDIO #TODO
  56.     private Assets assets;
  57.  
  58.  
  59.     @Override
  60.     protected void initSettings(GameSettings settings) {
  61.         settings.setWidth(1280);
  62.         settings.setHeight(720);
  63.         settings.setTitle("Warrior Snake");
  64.         settings.setVersion("0.0.1");
  65.     }
  66.  
  67.     @Override
  68.     protected void initAssets() throws Exception {
  69.  
  70.     }
  71.  
  72.     @Override
  73.     protected void initGame(Pane gameRoot) {
  74.         Entity bg = new Entity("background");
  75.         bg.setGraphics(new Rectangle(1280, 720));
  76.  
  77.         addEntities(bg);
  78.  
  79.         initCollision();
  80.         initInput();
  81.         spawnPlayer();
  82.  
  83.     }
  84.     private void initCollision(){
  85.         addCollisionHandler("player", "enemy", (player, enemy) -> {
  86.             player.fireFXGLEvent(new FXGLEvent(Event.DEATH));
  87.             enemy.fireFXGLEvent(new FXGLEvent(Event.DEATH, player));
  88.         });
  89.  
  90.         addCollisionHandler("bullet", "enemy", (bullet, enemy) -> {
  91.             bullet.fireFXGLEvent(new FXGLEvent(Event.DEATH));
  92.             enemy.fireFXGLEvent(new FXGLEvent(Event.DEATH, bullet));
  93.         });
  94.  
  95.         addCollisionHandler("laser", "enemy", (laser, enemy) -> {
  96.             enemy.fireFXGLEvent(new FXGLEvent(Event.DEATH, laser));
  97.         });
  98.  
  99.         addCollisionHandler("player", "boost", (player, boost) -> {
  100.             boost.fireFXGLEvent(new FXGLEvent(Event.DEATH));
  101.         });
  102.     }
  103.     @Override
  104.     protected void initUI(Pane uiRoot) {
  105.         Text score = new Text();
  106.         score.setTranslateX(1100);
  107.         score.setTranslateY(50);
  108.         score.textProperty().bind((ObservableValue<? extends String>) score);
  109.         score.setFill(Color.AQUA);
  110.  
  111.         laserBar.setFill(Color.BLUEVIOLET);
  112.  
  113.         Text laser = new Text("SPACE");
  114.         laser.setFont(Font.font(18));
  115.         laser.setFill(Color.BLACK);
  116.         laser.visibleProperty().bind(laserBar.widthProperty().isEqualTo(100));
  117.  
  118.  
  119.         StackPane stack = new StackPane();
  120.         stack.setTranslateX(50);
  121.         stack.setTranslateY(50);
  122.         stack.setAlignment(Pos.CENTER);
  123.         stack.getChildren().addAll(laserBar, laser);
  124.  
  125.         fps.setTranslateX(50);
  126.         fps.setTranslateY(100);
  127.         fps.setFill(Color.BLACK);
  128.  
  129.         uiRoot.getChildren().addAll(score, stack, fps);
  130.     }
  131.  
  132.     @Override
  133.     protected void initInput() {
  134.         addKeyPressBinding(KeyCode.UP, () -> {
  135.             player.translate(0, -5);
  136.         });
  137.  
  138.         addKeyPressBinding(KeyCode.DOWN, () -> {
  139.             player.translate(0, 5);
  140.         });
  141.  
  142.         addKeyPressBinding(KeyCode.LEFT, () -> {
  143.             player.translate(-5, 0);
  144.         });
  145.  
  146.         addKeyPressBinding(KeyCode.RIGHT, () -> {
  147.             player.translate(5, 0);
  148.         });
  149.  
  150.         addKeyPressBinding(KeyCode.SPACE, () -> {
  151.             if(currentTime - lastTimeLaserShot >= 5 * SECOND){
  152.                 spawnLaser();
  153.                 lastTimeLaserShot = currentTime;
  154.             }
  155.         });
  156.     }
  157.     private void spawnPlayer(){
  158.         player.setTranslateX(640);
  159.         player.setTranslateY(360);
  160.         player.setUsePhysics(true);
  161.         player.addFXGLEventHandler(Event.DEATH, event ->{
  162.             Entity p = event.getTarget();
  163.             p.setTranslateX(random.nextInt(1200));
  164.             p.setTranslateY(random.nextInt(700));
  165.             playerScoreAnimation(p, -1000);
  166.         });
  167.  
  168.         Rectangle rect = new Rectangle(40, 40);
  169.         rect.setFill(Color.BLUE);
  170.         player.setGraphics(rect);
  171.         addEntities(player);
  172.     }
  173.    
  174.     private void spawnEnemy(){
  175.         Entity enemy = new Entity("enemy");
  176.         enemy.setTranslateX(random.nextInt(1200));
  177.         enemy.setTranslateY(random.nextInt(700));
  178.         enemy.setUsePhysics(true);
  179.  
  180.         Circle c = new Circle(20);
  181.         c.setFill(Color.RED);
  182.         enemy.setGraphics(c);
  183.  
  184.         enemy.addControl(new Control() {
  185.             private Point2D velocity = new Point2D(0,0);
  186.             private long lastTimeChangedVelocity = 0;
  187.             @Override
  188.             public void onUpdate(Entity entity, long now) {
  189.                 if(now - lastTimeChangedVelocity >= 0.25*SECOND){
  190.                     velocity = new Point2D(player.getTranslateX(), player.getTranslateY())
  191.                             .subtract(entity.getTranslateX(), entity.getTranslateY())
  192.                             .normalize()
  193.                             .multiply(2);
  194.                     lastTimeChangedVelocity = now;
  195.                 }
  196.                 entity.translate(velocity.getX(), velocity.getY());
  197.             }
  198.         });
  199.  
  200.         enemy.addFXGLEventHandler(Event.DEATH, event -> {
  201.             switch (event.getSource().getType()){
  202.                 case "bullet":
  203.                     playEnemyDeathAnimation(event.getTarget());
  204.                     break;
  205.                 case "laser":
  206.                     playEnemyDeathAnimation(event.getTarget());
  207.                     break;
  208.                 case "player": //fallthru
  209.                 default:
  210.             }
  211.         });
  212.         addEntities(enemy);
  213.     }
  214.     private void spawnBullet(){
  215.         Entity bullet = new Entity("bullet");
  216.         bullet.setTranslateX(player.getTranslateX() + 20);
  217.         bullet.setTranslateY(player.getTranslateY() + 20);
  218.         bullet.setUsePhysics(true);
  219.  
  220.         Point2D vector = new Point2D(mouse.x, mouse.y)
  221.                 .subtract(bullet.getTranslateX(), bullet.getTranslateY())
  222.                 .normalize()
  223.                 .multiply(5);
  224.         bullet.setProperty("vector", vector);
  225.  
  226.         double angle = Math.toDegrees(Math.atan(vector.getY()/vector.getX()));
  227.         angle = vector.getX() > 0 ? angle : 180 + angle;
  228.  
  229.         bullet.getTransforms().add(new Rotate(angle, 0, 0));
  230.  
  231.         bullet.addControl(new Control() {
  232.             @Override
  233.             public void onUpdate(Entity entity, long now) {
  234.                 Point2D velocity = entity.getProperty("vector");
  235.                 entity.translate(velocity.getX(), velocity.getY());
  236.  
  237.                 if(entity.getTranslateX() < 0 || entity.getTranslateX() > 1280 ||
  238.                         entity.getTranslateY() < 0 || entity.getTranslateY() > 720){
  239.                     entity.fireFXGLEvent(new FXGLEvent(Event.DEATH));
  240.                 }
  241.             }
  242.         });
  243.  
  244.         Rectangle rec = new Rectangle(10, 1);
  245.         rec.setFill(Color.RED);
  246.         bullet.setGraphics(rec);
  247.  
  248.         bullet.addFXGLEventHandler(Event.DEATH, event -> {
  249.             bulletDeathAnimation(event.getTarget());
  250.         });
  251.  
  252.         addEntities(bullet);
  253.  
  254.     }
  255.     protected void spawnTrace(){
  256.         Entity trace = new Entity("particle");
  257.         trace.setTranslateX(player.getTranslateX());
  258.         trace.setTranslateY(player.getTranslateY());
  259.  
  260.         Rectangle r = new Rectangle(40,40);
  261.         r.setFill(Color.BLUEVIOLET);
  262.  
  263.         trace.setGraphics(r);
  264.         addEntities(trace);
  265.  
  266.         FadeTransition ft = new FadeTransition(Duration.seconds(1), trace);
  267.         ft.setFromValue(1);
  268.         ft.setToValue(0);
  269.         ft.setOnFinished(event -> removeEntity(trace));
  270.         ft.play();
  271.     }
  272.     protected void spawnBoost(){
  273.         Entity powerup = new Entity("powerup");
  274.         powerup.setTranslateX(random.nextInt(1200));
  275.         powerup.setTranslateY(random.nextInt(700));
  276.         powerup.setUsePhysics(true);
  277.  
  278.         Rectangle r = new Rectangle(10, 10);
  279.         r.setFill(Color.GREEN);
  280.         powerup.setGraphics(r);
  281.  
  282.         powerup.addFXGLEventHandler(Event.DEATH, event -> {
  283.             Entity p = event.getTarget();
  284.  
  285.             p.setUsePhysics(false);
  286.  
  287.             ScaleTransition st = new ScaleTransition(Duration.seconds(1), p);
  288.             st.setFromX(1);
  289.             st.setFromY(1);
  290.             st.setToX(0);
  291.             st.setToY(0);
  292.             st.setOnFinished(e -> {
  293.                removeEntity(p);
  294.             });
  295.             st.play();
  296.             playScoreAnimation(p, 2000);
  297.  
  298.         });
  299.         addEntities(powerup);
  300.     }
  301.     int angle = -90;
  302.     private void spawnLaser(){
  303.         Rectangle r = new Rectangle(1000, 1);
  304.         r.setFill(Color.RED);
  305.  
  306.         Entity laser = new Entity("laser")
  307.                 .setPosition(player.getTranslateX(), player.getTranslateY())
  308.                 .setUsePhysics(true)
  309.                 .setGraphics(r);
  310.  
  311.         laser.getTransforms().add(new Rotate(angle));
  312.         laserAlive.set(true);
  313.  
  314.         runAtIntervalWhile(() -> {
  315.             laser.setPosition(player.getTranslateX()+20, player.getTranslateY() +20);
  316.             laser.getTransforms().clear();
  317.             laser.getTransforms().add(new Rotate(++angle));
  318.  
  319.             if(angle == 270){
  320.                 laserAlive.set(false);
  321.                 removeEntity(laser);
  322.                 angle = -90;
  323.             }
  324.         }, 0.002 * SECOND, laserAlive);
  325.  
  326.         addEntities(laser);
  327.     }
  328.     @Override
  329.     protected void onUpdate(long now) {
  330.         if(now - lastTimeDotSpawned >= 1 * SECOND){
  331.             spawnDot();
  332.             lastTimeDotSpawned = now;
  333.         }
  334.         if(now - lastTimeBoostSpawned >= 5 * SECOND){
  335.             spawnBoost();
  336.             lastTimeBoostSpawned = now;
  337.         }
  338.         if(now - lastTimeTraceSpawned >= 0.1 * SECOND){
  339.             spawnTrace();
  340.             lastTimeTraceSpawned = now;
  341.         }
  342.         if(now- lastTimeEnemySpawned >= 5 * SECOND){
  343.             spawnEnemy();
  344.             lastTimeEnemySpawned = now;
  345.         }
  346.         if(mouse.leftPressed && now - lastTimeShot >= 0.25 * SECOND){
  347.             spawnBullet();
  348.             lastTimeShot = now;
  349.         }
  350.  
  351.         laserBar.setWidth(Math.min(100, ((now-lastTimeLaserShot) * 1.0f / (5*SECOND))
  352.                 * 100 ));
  353.  
  354.         fps.setText("FPS: " + fps + " Performance: " + fpsPerformance);
  355.  
  356.     }
  357.  
  358.     public static void main(String[] args){
  359.         launch(args);
  360.     }
  361.  
  362. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement