private void buildEventHandlers() { xAxesGroup.setOnMouseEntered( (MouseEvent t) -> { x1AxisRectangle.setVisible(true); x2AxisRectangle.setVisible(true); t.consume(); }); xAxesGroup.setOnMouseExited( (MouseEvent t) -> { adjustPanelsByPos(cameraRX, cameraRY, cameraRZ); t.consume(); }); yAxesGroup.setOnMouseEntered( (MouseEvent t) -> { y1AxisRectangle.setVisible(true); y2AxisRectangle.setVisible(true); t.consume(); }); yAxesGroup.setOnMouseExited( (MouseEvent t) -> { adjustPanelsByPos(cameraRX, cameraRY, cameraRZ); t.consume(); }); zAxesGroup.setOnMouseEntered( (MouseEvent t) -> { z1AxisRectangle.setVisible(true); z2AxisRectangle.setVisible(true); t.consume(); }); zAxesGroup.setOnMouseExited( (MouseEvent t) -> { adjustPanelsByPos(cameraRX, cameraRY, cameraRZ); t.consume(); }); // @TODO SMP Need to Define an F(X)yz Draggable DataItem type // xAxesGroup.setOnDragOver((DragEvent event) -> { // if (event.getGestureSource() != xAxesGroup && // event.getDragboard().hasContent(DataListItem.dataListItemFormat)) { // event.acceptTransferModes(TransferMode.COPY_OR_MOVE); // } // event.consume(); // }); // xAxesGroup.setOnDragEntered((DragEvent event) -> { // if (event.getGestureSource() != xAxesGroup && // event.getDragboard().hasContent(DataListItem.dataListItemFormat)) { // xAxesGroup.setEffect(new Glow(0.8)); // x1AxisRectangle.setVisible(true); // x2AxisRectangle.setVisible(true); // } // event.consume(); // }); // xAxesGroup.setOnDragExited((DragEvent event) -> { // if (event.getGestureSource() != xAxesGroup && // event.getDragboard().hasContent(DataListItem.dataListItemFormat)) { // xAxesGroup.setEffect(null); // adjustPanelsByPos(cameraRX, cameraRY, cameraRZ); // } // event.consume(); // }); // xAxesGroup.setOnDragDropped((DragEvent event) -> { // Dragboard db = event.getDragboard(); // boolean success = false; // if (db.hasContent(DataListItem.dataListItemFormat)) { // DataListItem dragItem = (DataListItem) // db.getContent(DataListItem.dataListItemFormat); // ArrayList<Double> dataVector = dragItem.getData(); // //@TODO SMP Drop on the X Axis means replace the X Axis Data // success = true; // } // /* let the source know the data was transferred and used */ // event.setDropCompleted(success); // event.consume(); // }); }
@Override public void start(Stage primaryStage) { VBox loginPane = new VBox(); loginPane.setAlignment(Pos.CENTER); primaryStage.setTitle("Amoeba"); primaryStage.setScene(new Scene(loginPane, 800, 600)); primaryStage.show(); TextField username = new TextField(); username.setPromptText("Username"); username.setMaxSize(200, 50); Timeline renderTimer = new Timeline(); Timeline inputTimer = new Timeline(); ColorPicker colorPicker = new ColorPicker(); colorPicker.setEditable(true); colorPicker.setValue(Color.BLACK); lagLabel.setTranslateX(25); lagLabel.setTranslateY(10); lagLabel.setTextFill(Color.RED); TextField address = new TextField("localhost"); address.setPromptText("Server IP Address"); address.setMaxSize(200, 50); TextField port = new TextField("8080"); port.setPromptText("Port Number"); port.setMaxSize(200, 50); Button btn = new Button("Play"); btn.setDefaultButton(true); loginPane.getChildren().addAll(username, colorPicker, address, port, btn); primaryStage.setResizable(false); music.setCycleCount(MediaPlayer.INDEFINITE); renderPane.setBackground(new Background(backgroundImage)); renderPane.setPrefSize(800, 600); chatBox.setPrefSize(400, 100); chatBox.setTranslateX(0); chatBox.setTranslateY(468); chatBox.setWrapText(true); chatBox.setEditable(false); chatBox.setStyle("-fx-opacity: 0.5"); chatInput.setPrefSize(400, 10); chatInput.setTranslateX(0); chatInput.setTranslateY(570); chatInput.setStyle("-fx-opacity: 0.8"); highScores.setPrefSize(400, 210); highScores.setEditable(false); currentScores.setPrefSize(400, 250); currentScores.setEditable(false); currentScores.setLayoutY(210); scores.setTranslateX(-390); scores.setTranslateY(0); scores.setStyle("-fx-opacity: 0.8"); scores.setOnMouseEntered( (e) -> { scores.setTranslateX(0); }); scores.setOnMouseExited( (e) -> { if (e.getX() > 350) { scores.setTranslateX(-390); } }); btn.setOnAction( (e) -> { if (!networkController.isConnected()) { networkController.connect(address.getText(), Integer.parseInt(port.getText())); if (username.getText().isEmpty()) { username.setText("Anonymous"); } networkController.sendMessage(new LoginMessage(username.getText(), "")); ArrayList<KeyValuePair> properties = new ArrayList<>(); properties.add(new KeyValuePair("color", colorPicker.getValue().toString())); networkController.sendMessage(new SetBlobPropertiesMessage(properties)); primaryStage.setScene(new Scene(renderPane)); renderTimer.play(); inputTimer.play(); music.play(); } }); inputTimer.setCycleCount(Timeline.INDEFINITE); inputTimer .getKeyFrames() .add( new KeyFrame( Duration.seconds(0.05), (e) -> { if (sendCoordinates) { networkController.sendMessage(new MoveTowardCoordinatesMessage(x, y)); } })); renderTimer.setCycleCount(Timeline.INDEFINITE); renderTimer .getKeyFrames() .add( new KeyFrame( Duration.seconds(0.01), (e) -> { render(); })); renderPane.setOnMouseReleased( (e) -> { this.sendCoordinates = false; }); renderPane.setOnMouseDragged( (e) -> { this.sendCoordinates = true; this.x = e.getX(); this.y = e.getY(); }); renderPane.setOnMouseClicked( (e) -> { if (e.getButton() == MouseButton.SECONDARY) { networkController.sendMessage(new BoostMessage()); } else if (e.getClickCount() > 1 || e.getButton() == MouseButton.MIDDLE) { networkController.sendMessage(new SplitMessage()); } }); renderPane.setOnKeyPressed( (e) -> { if (e.getCode().equals(KeyCode.ENTER) && !chatInput.getText().isEmpty()) { networkController.sendMessage(new ChatMessage("", chatInput.getText())); chatInput.clear(); } }); primaryStage.setOnCloseRequest( (e) -> { networkController.sendMessage(new LogoutMessage()); try { Thread.sleep(100); } catch (InterruptedException ex) { Logger.getLogger(AmoebaClient.class.getName()).log(Level.WARNING, null, ex); } finally { System.exit(0); } }); }