Skip to content
Snippets Groups Projects
Commit 3c0fa62d authored by Max Wittig's avatar Max Wittig Committed by GitHub
Browse files

Merge pull request #51 from deadlocker8/LevelEditor

Refractoring Controllers
parents 1ec4c32a f8a7f111
Branches
Tags
No related merge requests found
......@@ -49,4 +49,9 @@ public class LevelPackWriter
Level level = new Level(levelname, author, position, difficulty, startLives, paddleSize, getBoard(bricks));
levels.add(level);
}
public ArrayList<Level> getLevels()
{
return levels;
}
}
......@@ -4,7 +4,7 @@ import java.util.Arrays;
import java.util.Locale;
import java.util.ResourceBundle;
import de.brickedleveleditor.ui.Controller;
import de.brickedleveleditor.ui.controller.MainController;
import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.fxml.FXMLLoader;
......@@ -25,13 +25,10 @@ public class Main extends Application
{
try
{
FXMLLoader loader = new FXMLLoader(getClass().getClassLoader().getResource("de/brickedleveleditor/ui/GUI.fxml"));
FXMLLoader loader = new FXMLLoader(getClass().getClassLoader().getResource("de/brickedleveleditor/ui/fxml/main_controller.fxml"));
Parent root = (Parent)loader.load();
Scene scene = new Scene(root, 800, 600);
((Controller)loader.getController()).init(stage);
stage.setTitle(bundle.getString("app.name"));
stage.setScene(scene);
stage.setResizable(true);
......@@ -44,8 +41,8 @@ public class Main extends Application
System.exit(0);
}
});
stage.show();
((MainController)loader.getController()).init(stage, null);
}
catch(Exception e)
{
......
......@@ -3,3 +3,5 @@ version.code=0
version.name=0.0.0
version.date=19.10.16
author=Max Wittig, Robert Goldmann
level.saver=Save Level
package de.brickedleveleditor.ui.controller;
import javafx.stage.Stage;
public abstract class AbstractController
{
protected AbstractController parentController;
protected Stage stage;
public void init(Stage stage, AbstractController parentController)
{
this.parentController = parentController;
this.stage = stage;
initController();
}
protected abstract void initController();
}
package de.brickedleveleditor.ui.controller;
import de.bricked.game.paddle.PaddleSize;
import de.brickedleveleditor.utils.AlertGenerator;
import javafx.fxml.FXML;
import javafx.scene.control.Alert;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Spinner;
import javafx.scene.control.TextField;
public class LevelPackDialogController extends AbstractController
{
@FXML private Spinner difficultySpinner;
@FXML private ComboBox paddleSizeComboBox;
@FXML private Spinner startLivesSpinner;
@FXML private TextField authorTextField;
@FXML private TextField levelNameTextField;
@Override
protected void initController()
{
initPaddleSizeComboBox();
}
private void initPaddleSizeComboBox()
{
paddleSizeComboBox.getItems().addAll(PaddleSize.values());
paddleSizeComboBox.getSelectionModel().selectFirst();
}
@FXML
private void onSaveButtonClicked()
{
String levelName = levelNameTextField.getText();
String author = authorTextField.getText();
if(levelName.equals("") || author.equals(""))
{
AlertGenerator.showAlert(Alert.AlertType.WARNING, "Levelname or Author missing!", null);
}
else
{
int position = ((MainController) parentController).getLevelPackWriter().getLevels().size();
int difficulty = (int) difficultySpinner.getValue();
int startLives = (int) startLivesSpinner.getValue();
PaddleSize initPadSize = (PaddleSize) paddleSizeComboBox.getSelectionModel().getSelectedItem();
((MainController) parentController).getLevelPackWriter().addLevel(levelName, author, position, difficulty, startLives, initPadSize, ((MainController) parentController).getBrickArrayList());
stage.close();
}
}
@FXML
private void onBackButtonClicked()
{
stage.close();
}
}
package de.brickedleveleditor.ui;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Locale;
import java.util.ResourceBundle;
package de.brickedleveleditor.ui.controller;
import de.bricked.game.bricks.Brick;
import de.bricked.game.bricks.BrickType;
import de.bricked.game.paddle.PaddleSize;
import de.bricked.game.powerups.PowerUpType;
import de.brickedleveleditor.game.levels.LevelPackWriter;
import javafx.event.ActionEvent;
import de.brickedleveleditor.ui.BrickLabel;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.Label;
import javafx.scene.control.MenuItem;
import javafx.scene.image.Image;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.Background;
import javafx.scene.layout.BackgroundImage;
import javafx.scene.layout.BackgroundPosition;
import javafx.scene.layout.BackgroundRepeat;
import javafx.scene.layout.BackgroundSize;
import javafx.scene.layout.ColumnConstraints;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.RowConstraints;
import javafx.scene.layout.VBox;
import javafx.scene.layout.*;
import javafx.scene.paint.Paint;
import javafx.stage.Stage;
import javafx.stage.WindowEvent;
......@@ -40,7 +26,13 @@ import logger.LogLevel;
import logger.Logger;
import tools.Worker;
public class Controller
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Locale;
import java.util.ResourceBundle;
public class MainController extends AbstractController
{
@FXML
private AnchorPane anchorPane;
......@@ -48,25 +40,24 @@ public class Controller
private VBox sidebarVBox;
@FXML
private GridPane gridPane;
@FXML private MenuItem saveMenuItem;
@FXML
private MenuItem saveMenuItem;
private BrickType[] brickTypes = BrickType.values();
private Image currentlySelectedBrickImage;
private Image currentlySelectedPowerupImage;
private final int WIDTH = 18;
private final int HEIGHT = 18;
public Stage stage;
public final ResourceBundle bundle = ResourceBundle.getBundle("de/brickedleveleditor/main/", Locale.GERMANY);
private HashMap<BrickType, Image> bricksTextures;
private ArrayList<Image> powerupTextures;
private LevelPackWriter levelPackWriter;
public void init(Stage stage)
@Override
protected void initController()
{
powerupTextures = new ArrayList<>();
levelPackWriter = new LevelPackWriter();
gridPane.setMaxSize(50, 50);
this.stage = stage;
bricksTextures = new HashMap<>();
loadPowerupTextures();
addPowerupsToVBox();
......@@ -83,21 +74,30 @@ public class Controller
System.exit(0);
}
});
}
saveMenuItem.setOnAction(new EventHandler<ActionEvent>()
@FXML
private void onSaveMenuItemClicked()
{
@Override
public void handle(ActionEvent event)
try
{
String levelName = "";
String author = "";
int position = 0;
int difficulty = 1;
int startLives = 1;
PaddleSize initPadSize = PaddleSize.EXTRA_LARGE;
levelPackWriter.addLevel(levelName, author, position, difficulty, startLives, initPadSize, getBrickArrayList());
FXMLLoader loader = new FXMLLoader(getClass().getClassLoader().getResource("de/brickedleveleditor/ui/fxml/level_pack_dialog_controller.fxml"));
Parent root = (Parent) loader.load();
Scene scene = new Scene(root);
Stage dialogControllerStage = new Stage();
dialogControllerStage.setTitle(bundle.getString("level.saver"));
dialogControllerStage.setScene(scene);
dialogControllerStage.setResizable(true);
dialogControllerStage.show();
((LevelPackDialogController) loader.getController()).init(dialogControllerStage,this);
}
catch (Exception e)
{
Logger.log(LogLevel.ERROR, Logger.exceptionToString(e));
}
});
}
private void loadPowerupTextures()
......@@ -271,6 +271,11 @@ public class Controller
}
}
public LevelPackWriter getLevelPackWriter()
{
return levelPackWriter;
}
public void about()
{
Alert alert = new Alert(AlertType.INFORMATION);
......
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.ComboBox?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.Spinner?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.control.SpinnerValueFactory.IntegerSpinnerValueFactory?>
<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="317.0" prefWidth="397.0" xmlns="http://javafx.com/javafx/8.0.65" xmlns:fx="http://javafx.com/fxml/1" fx:controller="de.brickedleveleditor.ui.controller.LevelPackDialogController">
<children>
<Label layoutX="14.0" layoutY="22.0" prefHeight="16.0" prefWidth="112.0" text="Levelname:" AnchorPane.leftAnchor="14.0" />
<Label layoutX="14.0" layoutY="61.0" prefHeight="16.0" prefWidth="112.0" text="Author:" AnchorPane.leftAnchor="14.0" />
<TextField fx:id="authorTextField" layoutX="212.0" layoutY="56.0" AnchorPane.rightAnchor="14.0" />
<TextField fx:id="levelNameTextField" layoutX="212.0" layoutY="17.0" AnchorPane.rightAnchor="14.0" />
<Label layoutX="14.0" layoutY="99.0" prefHeight="16.0" prefWidth="112.0" text="Difficulty:" AnchorPane.leftAnchor="14.0" />
<Spinner fx:id="difficultySpinner" layoutX="212.0" layoutY="94.0" prefHeight="26.0" prefWidth="171.0" AnchorPane.rightAnchor="14.0">
<valueFactory>
<SpinnerValueFactory.IntegerSpinnerValueFactory min="1" max="10"/>
</valueFactory>
</Spinner>
<Label layoutX="14.0" layoutY="138.0" prefHeight="16.0" prefWidth="112.0" text="Start-Lives:" AnchorPane.leftAnchor="14.0" />
<Label layoutX="14.0" layoutY="174.0" prefHeight="16.0" prefWidth="112.0" text="Paddle-Size" AnchorPane.leftAnchor="14.0" />
<ComboBox fx:id="paddleSizeComboBox" layoutX="212.0" layoutY="169.0" prefHeight="26.0" prefWidth="171.0" AnchorPane.rightAnchor="14.0" />
<Button layoutX="126.0" layoutY="277.0" mnemonicParsing="false" onAction="#onSaveButtonClicked" text="Save" AnchorPane.bottomAnchor="14.0" />
<Button layoutX="212.0" layoutY="277.0" mnemonicParsing="false" onAction="#onBackButtonClicked" text="Back" AnchorPane.bottomAnchor="14.0" />
<Spinner fx:id="startLivesSpinner" layoutX="212.0" layoutY="133.0">
<valueFactory>
<SpinnerValueFactory.IntegerSpinnerValueFactory min="1" max="5"/>
</valueFactory>
</Spinner>
</children>
</AnchorPane>
......@@ -9,17 +9,17 @@
<?import javafx.scene.layout.RowConstraints?>
<?import javafx.scene.layout.VBox?>
<AnchorPane fx:id="anchorPane" prefHeight="600.0" prefWidth="800.0" xmlns="http://javafx.com/javafx/8.0.65" xmlns:fx="http://javafx.com/fxml/1" fx:controller="de.brickedleveleditor.ui.Controller">
<AnchorPane fx:id="anchorPane" prefHeight="600.0" prefWidth="800.0" xmlns="http://javafx.com/javafx/8.0.65" xmlns:fx="http://javafx.com/fxml/1" fx:controller="de.brickedleveleditor.ui.controller.MainController">
<children>
<MenuBar layoutX="40.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<menus>
<Menu mnemonicParsing="false" text="File">
<items>
<MenuItem fx:id="saveMenuItem" mnemonicParsing="false" text="Save" />
<MenuItem fx:id="saveMenuItem" mnemonicParsing="false" onAction="#onSaveMenuItemClicked" text="Save" />
<MenuItem mnemonicParsing="false" text="Unspecified Action" />
</items>
</Menu>
<Menu mnemonicParsing="false" text="Hilfe">
<Menu mnemonicParsing="false" text="Help">
<items>
<MenuItem mnemonicParsing="false" onAction="#about" text="Über" />
</items>
......
package de.brickedleveleditor.utils;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.image.Image;
import javafx.stage.Stage;
public class AlertGenerator
{
public static void showAlert(AlertType type, String contentText, Image icon)
{
show(type, type.name(), "", contentText, icon, true);
}
public static void showAlert(AlertType type, String title, String headerText, String contentText, Image icon, boolean centerOnScreen)
{
show(type, title, headerText, contentText, icon, centerOnScreen);
}
private static void show(AlertType type, String title, String headerText, String contentText, Image icon, boolean centerOnScreen)
{
Alert alert = new Alert(type);
alert.setTitle(title);
alert.setHeaderText(headerText);
alert.setContentText(contentText);
Stage dialogStage = (Stage) alert.getDialogPane().getScene().getWindow();
if(icon != null)
{
dialogStage.getIcons().add(icon);
}
if (centerOnScreen)
{
dialogStage.centerOnScreen();
}
alert.showAndWait();
}
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment