Facebook
From Gruff Treeshrew, 3 Years ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 59
  1. package org.javafx3d;
  2.  
  3. import com.interactivemesh.jfx.importer.obj.ObjModelImporter;
  4. import jaco.mp3.player.MP3Player;
  5. import javafx.animation.Interpolator;
  6. import javafx.animation.RotateTransition;
  7. import javafx.application.Application;
  8. import javafx.scene.Group;
  9. import javafx.scene.Node;
  10. import javafx.scene.PerspectiveCamera;
  11. import javafx.scene.Scene;
  12. import javafx.scene.image.Image;
  13. import javafx.scene.input.KeyEvent;
  14. import javafx.scene.paint.PhongMaterial;
  15. import javafx.scene.shape.MeshView;
  16. import javafx.scene.transform.Rotate;
  17. import javafx.stage.Stage;
  18. import javafx.util.Duration;
  19.  
  20. import java.io.File;
  21. import java.util.HashMap;
  22. import java.util.Map;
  23.  
  24.  
  25. public class GramophoneApp extends Application {
  26.  
  27.     private Group model = loadModel();
  28.     private PerspectiveCamera camera;
  29.     private Stage stage;
  30.     private MP3Player player;
  31.     private RotateTransition rt;
  32.     private Map<Node, RotateTransition> elementsAbleToRotate = new HashMap<>();
  33.  
  34.     public static void main(String[] args) {
  35.         launch(args);
  36.     }
  37.  
  38.     @Override
  39.     public void start(Stage stage) throws Exception {
  40.         this.stage = stage;
  41.         stage.setScene(createScene());
  42.         stage.show();
  43.     }
  44.  
  45.     private Scene createScene() {
  46.         Group root = new Group(model);
  47.         Scene scene = new Scene(root, 1500, 1000, true);
  48.         setCamera();
  49.         scene.setCamera(camera);
  50.         handleKeyPressing();
  51.         handleKeyReleasing();
  52.         loadTrack();
  53.         setMaterial();
  54.         return scene;
  55.     }
  56.  
  57.     private void setCamera() {
  58.         camera = new PerspectiveCamera(true);
  59.         camera.translateXProperty().set(0.2);
  60.         camera.translateZProperty().set(-7);
  61.         model.getTransforms().add(new Rotate(50, Rotate.X_AXIS));
  62.     }
  63.  
  64.  
  65.     private void handleKeyPressing() {
  66.         stage.addEventHandler(
  67.                 KeyEvent.KEY_PRESSED, event -> {
  68.                     switch (event.getCode()) {
  69.                         case UP:
  70.                             camera.translateYProperty().set(camera.getTranslateY() - 0.1);
  71.                             break;
  72.                         case DOWN:
  73.                             camera.translateYProperty().set(camera.getTranslateY() + 0.1);
  74.                             break;
  75.                         case RIGHT:
  76.                             camera.translateXProperty().set(camera.getTranslateX() + 0.1);
  77.                             break;
  78.                         case LEFT:
  79.                             camera.translateXProperty().set(camera.getTranslateX() - 0.1);
  80.                             System.out.println(camera.getTranslateX());
  81.                             break;
  82.                         case P:
  83.                             camera.translateZProperty().set(camera.getTranslateZ() + 0.1);
  84.                             break;
  85.                         case O:
  86.                             camera.translateZProperty().set(camera.getTranslateZ() - 0.1);
  87.                             break;
  88.                         case ENTER:
  89.                             animate(true);
  90.                             System.out.println("play");
  91.                             if (player != null) {
  92.                                 if (player.isStopped() || player.isPaused()) {
  93.                                     player.play();
  94.                                 }
  95.                             }
  96.                             break;
  97.                     }
  98.                 });
  99.     }
  100.  
  101.     private void loadTrack() {
  102.  
  103.         player = new MP3Player();
  104.         File file = new File("Living_on_a_prayer.mp3");
  105.  
  106.         player.addToPlayList(file);
  107.     }
  108.  
  109.     private void handleKeyReleasing() {
  110.         stage.addEventHandler(KeyEvent.KEY_RELEASED, event -> {
  111.             switch (event.getCode()) {
  112.                 case ENTER:
  113.                     animate(false);
  114.                     player.pause();
  115.                     break;
  116.             }
  117.             if (player != null) {
  118.                 player.pause();
  119.             }
  120.         });
  121.     }
  122.  
  123.     private Group loadModel() {
  124.         Group modelRoot = new Group();
  125.         ObjModelImporter importer = new ObjModelImporter();
  126.         importer.read("gramofon.obj");
  127.         for (MeshView view : importer.getImport()) {
  128.             modelRoot.getChildren().add(view);
  129.         }
  130.         return modelRoot;
  131.     }
  132.  
  133.     private void animate(boolean rotate) {
  134.  
  135.         model.getChildren()
  136.                 .stream()
  137.                 .filter(view ->
  138.                         view.getId().toLowerCase().contains("plyta")
  139.                 )
  140.                 .forEach(view -> {
  141.                             elementsAbleToRotate.entrySet().stream().filter(element -> element.getKey().equals(view)).findAny().ifPresent((element -> {
  142.                                 rt = element.getValue();
  143.                                 if (!rotate) {
  144.                                     rt.stop();
  145.                                 } else
  146.                                     rt.play();
  147.  
  148.                             }));
  149.                             if (elementsAbleToRotate.entrySet().stream().noneMatch(element -> element.getKey().equals(view))) {
  150.                                 rt = new RotateTransition(Duration.seconds(1), view);
  151.                                 rt.setCycleCount(Integer.MAX_VALUE);
  152.                                 rt.setAxis(Rotate.Y_AXIS);
  153.                                 rt.setByAngle(360);
  154.                                 rt.setInterpolator(Interpolator.LINEAR);
  155.                                 elementsAbleToRotate.put(view, rt);
  156.                                 if (!rotate) {
  157.                                     rt.stop();
  158.                                 } else
  159.                                     rt.play();
  160.                             }
  161.                         }
  162.  
  163.                 );
  164.     }
  165.  
  166.  
  167.     private void setMaterial() {
  168.         PhongMaterial material = new PhongMaterial();
  169.         model.getChildren().forEach(element -> {
  170.             if (element.getId().toLowerCase().equals("plane")) {
  171.                 material.setDiffuseMap(new Image("wood.jpg"));
  172.                 ((MeshView) element).setMaterial(material);
  173.             }
  174.         });
  175.     }
  176.  
  177.  
  178. }
  179.