Skip to content
Snippets Groups Projects
Select Git revision
  • a87bc770c7cf873db8a5a79811da2f496be18633
  • master default
  • renovate/fastapi-0.x
  • v2.21.0
  • v2.20.1
  • v2.20.0
  • v2.19.0
  • v2.18.1
  • v2.18.0
  • v2.17.0
  • v2.16.0
  • v2.15.0
  • v2.14.0
  • v2.13.1
  • v2.13.0
  • v2.12.0
  • v2.11.0
  • v2.10.0
  • v2.9.0
  • v2.8.0
  • v2.7.0
  • v2.6.0
  • v2.5.0
23 results

StorageLeaf.py

Blame
  • MainController.java 10.15 KiB
    package de.brickedleveleditor.ui.controller;
    
    import java.io.File;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Locale;
    import java.util.ResourceBundle;
    
    import de.bricked.game.bricks.Brick;
    import de.bricked.game.bricks.BrickType;
    import de.bricked.game.powerups.PowerUpType;
    import de.brickedleveleditor.game.levels.LevelPackWriter;
    import de.bricked.game.paddle.PaddleSize;
    import de.brickedleveleditor.ui.BrickLabel;
    import javafx.event.ActionEvent;
    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.image.ImageView;
    import javafx.scene.input.MouseEvent;
    import javafx.scene.layout.*;
    import javafx.scene.paint.Paint;
    import javafx.stage.Stage;
    import javafx.stage.WindowEvent;
    import logger.LogLevel;
    import logger.Logger;
    import tools.Worker;
    
    public class MainController extends AbstractController
    {
        @FXML
        private AnchorPane anchorPane;
        @FXML
        private VBox sidebarVBox;
        @FXML
        private GridPane gridPane;
        @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;
    
        @Override
        protected void initController()
        {
            powerupTextures = new ArrayList<>();
            levelPackWriter = new LevelPackWriter();
            gridPane.setMaxSize(50, 50);
            bricksTextures = new HashMap<>();
            loadPowerupTextures();
            addPowerupsToVBox();
            loadBrickTextures();
            addBricksToVBox();
            fillGridPaneWithAirBricks();
            currentlySelectedBrickImage = bricksTextures.get(BrickType.HARD);
            currentlySelectedPowerupImage = powerupTextures.get(0);
            stage.setOnCloseRequest(new EventHandler<WindowEvent>()
            {
                public void handle(WindowEvent event)
                {
                    Worker.shutdown();
                    System.exit(0);
                }
            });
        }
    
        @FXML
        private void onSaveMenuItemClicked()
        {
            try
            {
                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()
        {
            String fileExt = ".png";
            String rootPath = "de/bricked/resources/textures/powerups/";
            //powerup[0] means no powerup --> set to null
            powerupTextures.add(null);
            for (int i = 1; i < PowerUpType.types.length; i++)
            {
                File powerupPath = new File(rootPath + PowerUpType.types[i].getId() + fileExt);
                try
                {
                    Image image = new Image(powerupPath.getPath());
                    powerupTextures.add(image);
                }
                catch (Exception e)
                {
                    Logger.log(LogLevel.ERROR, Logger.exceptionToString(e));
                }
            }
        }
    
        private void loadBrickTextures()
        {
            String fileExt = ".png";
            String rootPath = "de/bricked/resources/textures/bricks/";
            for (BrickType brickType : brickTypes)
            {
                File brickPath = new File(rootPath + brickType.getTextureIDs()[0] + fileExt);
                System.out.println(brickPath.getAbsolutePath());
                try
                {
                    Image image = new Image(brickPath.getPath());
                    bricksTextures.put(brickType, image);
                }
                catch (Exception e)
                {
                    Logger.log(LogLevel.ERROR, Logger.exceptionToString(e));
                }
            }
        }
    
        private HashMap<Image, BrickType> getReversedBrickHashMap()
        {
            HashMap<Image, BrickType> reversedHashMap = new HashMap<Image, BrickType>();
            for (BrickType key : bricksTextures.keySet())
            {
                reversedHashMap.put(bricksTextures.get(key), key);
            }
            return reversedHashMap;
        }
    
        public ArrayList<Brick> getBrickArrayList()
        {
            ArrayList<Brick> bricks = new ArrayList<>();
            Object[] gridPaneChildren = gridPane.getChildren().toArray();
            for (int i = 0; i < gridPaneChildren.length; i++)
            {
                if (gridPaneChildren[i] instanceof BrickLabel)
                {
                    BrickLabel currentLabel = (BrickLabel) gridPaneChildren[i];
                    Brick brick = new Brick(currentLabel.getBrickType(),
                            PowerUpType.getInstance(currentLabel.getPowerUpType()));
                    bricks.add(brick);
                }
            }
            return bricks;
        }
    
        private void addBricksToVBox()
        {
            for (BrickType brickType : brickTypes)
            {
                Label brickLabel = new Label(brickType.toString());
                brickLabel.setBackground(getBackGroundFromImage(bricksTextures.get(brickType)));
                brickLabel.setOnMouseClicked(new EventHandler<MouseEvent>()
                {
                    @Override
                    public void handle(MouseEvent event)
                    {
                        currentlySelectedBrickImage = bricksTextures.get(brickType);
                        Logger.log(LogLevel.DEBUG, brickType.toString() + " selected");
                    }
                });
                HBox brickHBox = new HBox(brickLabel);
                sidebarVBox.getChildren().add(brickHBox);
            }
        }
    
        private void addPowerupsToVBox()
        {
            for (int i = 1; i < powerupTextures.size(); i++)
            {
                Image powerupImage = powerupTextures.get(i);
                Label powerupLabel = new Label(PowerUpType.types[i].toString());
                powerupLabel.setOnMouseClicked(new EventHandler<MouseEvent>()
                {
                    @Override
                    public void handle(MouseEvent event)
                    {
                        currentlySelectedPowerupImage = powerupImage;
                    }
                });
                powerupLabel.setBackground(getBackGroundFromImage(powerupTextures.get(i)));
                HBox powerupHBox = new HBox(powerupLabel);
                VBox.setMargin(sidebarVBox, new Insets(50, 10, 10, 10));
                sidebarVBox.getChildren().add(powerupHBox);
            }
        }
    
        private Background getBackGroundFromImage(Image image)
        {
            BackgroundImage backgroundImage = new BackgroundImage(image,
                    BackgroundRepeat.NO_REPEAT, BackgroundRepeat.NO_REPEAT,
                    BackgroundPosition.CENTER, BackgroundSize.DEFAULT);
            Background background = new Background(backgroundImage);
            return background;
        }
    
        private void initGrid()
        {
            gridPane.getColumnConstraints().clear();
            double xPercentage = 1.0 / WIDTH;
            for (int i = 0; i < WIDTH; i++)
            {
                ColumnConstraints c = new ColumnConstraints();
                c.setPercentWidth(xPercentage * 100);
                gridPane.getColumnConstraints().add(c);
            }
    
            gridPane.getRowConstraints().clear();
            double yPercentage = 1.0 / HEIGHT;
            for (int i = 0; i < HEIGHT; i++)
            {
                RowConstraints c = new RowConstraints();
                c.setPercentHeight(yPercentage * 100);
                gridPane.getRowConstraints().add(c);
            }
            gridPane.setGridLinesVisible(true);
        }
    
        private void fillGridPaneWithAirBricks()
        {
            initGrid();
            for (int i = 0; i < WIDTH; i++)
            {
                for (int k = 0; k < HEIGHT; k++)
                {
                    BrickType brickType = BrickType.AIR;
                    PowerUpType powerUpType = PowerUpType.NONE;
                    Image image = bricksTextures.get(brickType);
                    BrickLabel label = new BrickLabel(brickType, powerUpType);
                    label.setMinSize(30, 25);
                    label.setBackground(getBackGroundFromImage(image));
                    gridPane.add(label, k, i);
                    label.setAlignment(Pos.CENTER);
                    label.setTextFill(Paint.valueOf("black"));
    
                    label.setOnMouseClicked(new EventHandler<MouseEvent>()
                    {
                        @Override
                        public void handle(MouseEvent event)
                        {
                            label.setBackground(getBackGroundFromImage(currentlySelectedBrickImage));
                            label.setPowerUpType(PowerUpType.values()[powerupTextures.indexOf(currentlySelectedPowerupImage)]);
                            label.setBrickType(getReversedBrickHashMap().get(currentlySelectedBrickImage));
                        }
                    });
                }
            }
        }
    
        public LevelPackWriter getLevelPackWriter()
        {
            return levelPackWriter;
        }
    
        public void about()
        {
            Alert alert = new Alert(AlertType.INFORMATION);
            alert.setTitle("About " + bundle.getString("app.name"));
            alert.setHeaderText(bundle.getString("app.name"));
            alert.setContentText("Version:     " + bundle.getString("version.name") + "\r\nDate:         " + bundle.getString("version.date") + "\r\nAuthors:     " + bundle.getString("author") + "\r\n");
            Stage dialogStage = (Stage) alert.getDialogPane().getScene().getWindow();
            dialogStage.centerOnScreen();
            alert.showAndWait();
        }
    }