package jp.ac.aiit.jointry.controllers; import java.awt.Color; import java.net.URL; import java.util.ArrayList; import java.util.List; import java.util.ResourceBundle; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.scene.Node; import javafx.scene.control.Button; import javafx.scene.control.CheckBox; import javafx.scene.control.Slider; import javafx.scene.layout.AnchorPane; import javafx.scene.layout.VBox; import javafx.stage.Stage; import javafx.stage.WindowEvent; import jp.ac.aiit.jointry.models.Sprite; import jp.ac.aiit.jointry.models.VariableLabel; import jp.ac.aiit.jointry.models.blocks.expression.Variable; import jp.ac.aiit.jointry.services.broker.app.JointryCommon; import jp.ac.aiit.jointry.services.broker.app.MainDialog; import jp.ac.aiit.jointry.services.broker.app.SpriteDialog; import jp.ac.aiit.jointry.services.picture.paint.PaintApplication; public class FrontStageController implements Initializable, JointryCommon { @FXML private AnchorPane stage; @FXML private VBox variables; @FXML private Slider speed_slider; @FXML private Button sync; private Sprite currentSprite; private MainController mainController; @Override public void initialize(URL url, ResourceBundle rb) { } @FXML public void start(ActionEvent event) { this.mainController.getBackStageController().start(); MainDialog.sendEvent(mainController.getAgent(), M_MAIN_SCRIPT_EXECUTE); } public double getSpeed() { return (speed_slider.getMax() + 10) - speed_slider.getValue(); } @FXML public void stop(ActionEvent event) throws Exception { this.mainController.getBackStageController().stop(); MainDialog.sendEvent(mainController.getAgent(), M_MAIN_SCRIPT_STOP); } @FXML protected void handlePaintBtnAct(ActionEvent event) throws Exception { final PaintApplication app = new PaintApplication(); Stage paintStage = app.start(null, stage.getScene().getWindow()); paintStage.setOnHidden(new EventHandler<WindowEvent>() { @Override public void handle(WindowEvent t) { if (app.getResult() != null) { Sprite sprite = new Sprite(app.getResult()); sprite.setMainController(mainController); showSprite(sprite); } } }); } @FXML protected void sync(ActionEvent event) { MainDialog.sendSynchronize(); } @FXML protected void reset(ActionEvent event) { currentSprite.setTranslateX(0.0); currentSprite.setTranslateY(0.0); currentSprite.setRotate(0.0); currentSprite.setScaleX(1.0); currentSprite.setDirection(1); currentSprite.clearSpeechBubble(); SpriteDialog.sendSimpleMessage(M_SPRITE_RESET, currentSprite); } public void setSyncVisible(boolean visible) { sync.setVisible(visible); } public void setMainController(MainController controller) { this.mainController = controller; } public List<Sprite> getSprites() { List<Sprite> sprites = new ArrayList<>(); for (Node i : stage.getChildren()) { if (i instanceof Sprite) { sprites.add((Sprite) i); } } return sprites; } public Sprite getCurrentSprite() { return currentSprite; } public void setCurrentSprite(Sprite sprite) { currentSprite = sprite; mainController.getBackStageController().setCurrentSprite(sprite); } public void showSprite(Sprite sprite) { this.addSprite(sprite, true); this.setCurrentSprite(sprite); } public void addSprite(Sprite sprite, boolean sendMessage) { int number = 1; for (Node i : stage.getChildren()) { if (i instanceof Sprite) { if (((Sprite) i).getName().equals(sprite.getName())) { return; } number++; } } sprite.setName("sprite" + number); sprite.setDragRange(stage); stage.getChildren().add(sprite); if (sendMessage) { SpriteDialog.sendAllMessage(M_SPRITE_CREATE, sprite); } //Spriteが持っている変数を登録 for (Node node : sprite.getScriptPane().getChildrenUnmodifiable()) { if (node instanceof Variable) { Variable block = (Variable) node; mainController.getBlocksController().addVariable(block.getName(), sendMessage); } } } void addVariable(VariableLabel vl) { variables.getChildren().add(vl); } @FXML void keyboard(ActionEvent event) { CheckBox chk = (CheckBox) event.getSource(); if (chk.isSelected()) { mainController.getJointryMain().setEnableKeyboard(true); } else { mainController.getJointryMain().setEnableKeyboard(false); } } @FXML void hideScript(ActionEvent event) { CheckBox chk = (CheckBox) event.getSource(); if (chk.isSelected()) { currentSprite.getScriptPane().setVisible(false); } else { currentSprite.getScriptPane().setVisible(true); } } }