229 lines
6.8 KiB
Java
229 lines
6.8 KiB
Java
package fr.enssat.BoulderDash.views;
|
|
|
|
import javax.swing.*;
|
|
import java.awt.*;
|
|
import java.util.Observable;
|
|
import java.util.Observer;
|
|
|
|
import fr.enssat.BoulderDash.helpers.LevelLoadHelper;
|
|
import fr.enssat.BoulderDash.helpers.LevelSelectorHelper;
|
|
import fr.enssat.BoulderDash.controllers.LevelEditorController;
|
|
import fr.enssat.BoulderDash.controllers.NavigationBetweenViewController;
|
|
import fr.enssat.BoulderDash.models.LevelModel;
|
|
import fr.enssat.BoulderDash.views.LevelEditorGroundView;
|
|
import fr.enssat.BoulderDash.views.AssetsLevelEditorComponent;
|
|
import fr.enssat.BoulderDash.views.MenuLevelSelector;
|
|
|
|
|
|
/**
|
|
* LevelEditorView
|
|
*
|
|
* Specifies the level editor view.
|
|
*
|
|
* @author Colin Leverger <me@colinleverger.fr>
|
|
* @since 2015-06-19
|
|
*/
|
|
public class LevelEditorView extends JFrame implements Observer {
|
|
private LevelEditorGroundView fieldPanel;
|
|
private JPanel selectPanel;
|
|
private AssetsLevelEditorComponent assetsComponent;
|
|
private JPanel actionsComponent;
|
|
private String selectedLevel;
|
|
private MenuLevelSelector menuLevelSelector;
|
|
private NavigationBetweenViewController nav;
|
|
|
|
private LevelEditorController levelEditorController;
|
|
private LevelModel levelModel;
|
|
|
|
private String pickedBlockValue;
|
|
|
|
/**
|
|
* Class constructor
|
|
*/
|
|
public LevelEditorView(LevelEditorController levelEditorController, LevelModel levelModel, NavigationBetweenViewController nav) {
|
|
this.levelEditorController = levelEditorController;
|
|
this.levelModel = levelModel;
|
|
this.nav = nav;
|
|
|
|
this.levelModel.addObserver(this);
|
|
|
|
this.initializeView();
|
|
this.createLayout();
|
|
|
|
this.fieldPanel.grabFocus();
|
|
}
|
|
|
|
/**
|
|
* Initializes the view layout
|
|
*/
|
|
private void initializeView() {
|
|
this.setFocusable(true);
|
|
this.setVisible(false);
|
|
this.setResizable(false);
|
|
|
|
// UI parameters
|
|
this.setSize(984, 454);
|
|
this.setLocationRelativeTo(null);
|
|
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
|
|
|
|
// App parameters
|
|
this.setTitle("Boulder Dash | Level Editor");
|
|
|
|
Image appIcon = Toolkit.getDefaultToolkit().getImage("./res/app/app_icon.png");
|
|
this.setIconImage(appIcon);
|
|
}
|
|
|
|
/**
|
|
* Creates the view layout
|
|
*/
|
|
private void createLayout() {
|
|
// List of levels
|
|
LevelSelectorHelper levelSelectorHelper = new LevelSelectorHelper(true, this);
|
|
this.menuLevelSelector = levelSelectorHelper.createLevelList();
|
|
|
|
// Field + select panels
|
|
this.fieldPanel = new LevelEditorGroundView(this.levelModel, this);
|
|
this.selectPanel = new JPanel();
|
|
|
|
this.assetsComponent = new AssetsLevelEditorComponent(this);
|
|
this.actionsComponent = new JPanel();
|
|
|
|
// Add actions
|
|
this.actionsComponent.add(this.menuLevelSelector);
|
|
this.actionsComponent.add(this.createButton("save", "Save"));
|
|
this.actionsComponent.add(this.createButton("delete", "Delete"));
|
|
this.actionsComponent.add(this.createButton("new", "New level"));
|
|
this.actionsComponent.add(this.createButton("menu", "Menu"));
|
|
this.actionsComponent.add(this.createButton("help", "Help"));
|
|
|
|
// Add select panel subcomponents
|
|
this.selectPanel.setLayout(new BoxLayout(this.selectPanel, BoxLayout.Y_AXIS));
|
|
|
|
this.selectPanel.add(this.assetsComponent);
|
|
this.selectPanel.add(this.actionsComponent);
|
|
|
|
// Add top components
|
|
this.add(this.fieldPanel, BorderLayout.CENTER);
|
|
this.add(this.selectPanel, BorderLayout.WEST);
|
|
}
|
|
|
|
/**
|
|
* Creates the given button
|
|
*
|
|
* @param id Button identifier
|
|
* @param name Button name
|
|
* @return Created button
|
|
*/
|
|
public JButton createButton(String id, String name) {
|
|
JButton button = new JButton(name);
|
|
button.addActionListener(this.levelEditorController);
|
|
button.setActionCommand(id);
|
|
|
|
return button;
|
|
}
|
|
|
|
/**
|
|
* Gets the level editor field view
|
|
*
|
|
* @return Level editor field view
|
|
*/
|
|
public LevelEditorGroundView getLevelEditorGroundView() {
|
|
return this.fieldPanel;
|
|
}
|
|
|
|
/**
|
|
* Gets picked block value
|
|
*
|
|
* @return Picked block value
|
|
*/
|
|
public String getPickedBlockValue() {
|
|
return this.pickedBlockValue;
|
|
}
|
|
|
|
/**
|
|
* Sets picked block value
|
|
*
|
|
* @param pickedBlockValue Picked block value
|
|
*/
|
|
public void setPickedBlockValue(String pickedBlockValue) {
|
|
this.pickedBlockValue = pickedBlockValue;
|
|
}
|
|
|
|
/**
|
|
* Updates the view
|
|
*
|
|
* @param obs Observable item
|
|
* @param obj Object item
|
|
*/
|
|
@Override
|
|
public void update(Observable obs, Object obj) {
|
|
// Nothing done.
|
|
}
|
|
|
|
/**
|
|
* Change opened level
|
|
*
|
|
* @param selectedLevelValue Selected level value
|
|
*/
|
|
public void openedLevelChange(String selectedLevelValue) {
|
|
LevelModel pickedLevelModel;
|
|
|
|
if(selectedLevelValue != null && !selectedLevelValue.isEmpty()) {
|
|
// Load existing model
|
|
pickedLevelModel = new LevelModel(new LevelLoadHelper(selectedLevelValue), this.nav.getAudioLoadHelper(), "editor");
|
|
} else {
|
|
// New blank model for editor
|
|
pickedLevelModel = new LevelModel(this.nav.getAudioLoadHelper());
|
|
}
|
|
|
|
pickedLevelModel.setShowCursor(true);
|
|
pickedLevelModel.setMode("editor");
|
|
this.levelModel = pickedLevelModel;
|
|
|
|
// Hide old view
|
|
this.levelEditorController.getLevelEditorView().dispose();
|
|
|
|
this.levelEditorController = new LevelEditorController(this.levelModel, this.nav);
|
|
|
|
this.levelEditorController.getLevelEditorView().setSelectedLevel(selectedLevelValue);
|
|
this.levelEditorController.getLevelEditorView().setVisible(true);
|
|
this.levelEditorController.getLevelEditorView().getLevelEditorGroundView().grabFocus();
|
|
|
|
this.levelEditorController.getLevelEditorView().menuLevelSelector.setChoiceValue(selectedLevelValue);
|
|
this.levelEditorController.getLevelEditorView().menuLevelSelector.setSelectedValue(selectedLevelValue);
|
|
}
|
|
|
|
/**
|
|
* Menu level selector change handler
|
|
*
|
|
* @param changedSelector Changed selector
|
|
*/
|
|
public void menuLevelSelectorChanged(MenuLevelSelector changedSelector) {
|
|
String selectedLevelValue = changedSelector.getChoiceValue().toString();
|
|
|
|
// Value didn't change?
|
|
if(selectedLevelValue.equals(this.getSelectedLevel())) {
|
|
return;
|
|
}
|
|
|
|
this.openedLevelChange(selectedLevelValue);
|
|
}
|
|
|
|
/**
|
|
* Gets selected level
|
|
*
|
|
* @return Selected level
|
|
*/
|
|
public String getSelectedLevel() {
|
|
return this.selectedLevel;
|
|
}
|
|
|
|
/**
|
|
* Sets selected level
|
|
*
|
|
* @param level Selected level
|
|
*/
|
|
public void setSelectedLevel(String level) {
|
|
this.selectedLevel = level;
|
|
}
|
|
} |