Java tutorial
/* * Copyright (C) 2014 Helix Engine Developers (http://github.com/fauu/HelixEngine) * * This software is licensed under the GNU General Public License * (version 3 or later). See the COPYING file in this distribution. * * You should have received a copy of the GNU Library General Public License * along with this software. If not, see <http://www.gnu.org/licenses/>. * * Authored by: Piotr Grabowski <fau999@gmail.com> */ package com.github.fauu.helix.editor.ui; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.files.FileHandle; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.g2d.TextureAtlas; import com.github.fauu.helix.core.Direction; import com.github.fauu.helix.core.Geometry; import com.github.fauu.helix.core.MapRegion; import com.github.fauu.helix.core.Tile; import com.github.fauu.helix.editor.EditorFrame; import com.github.fauu.helix.editor.model.*; import net.miginfocom.swing.MigLayout; import javax.swing.*; import java.awt.*; public class Sidebar extends JPanel { private EditorFrame editorFrame; private DefaultListModel geometryListModel; private DefaultListModel objectListModel; private DefaultListModel textureListModel; private EditorModePicker editorModePicker; private JPanel geometryPickerPanel; private GeometryPicker geometryPicker; private JPanel texturePickerPanel; private TexturePicker texturePicker; private JPanel objectPickerPanel; private ObjectPicker objectPicker; private JPanel facingPickerPanel; private FacingPicker facingPicker; private JPanel elevationPickerPanel; private ElevationPicker elevationPicker; public Sidebar(EditorFrame editorFrame) { this.editorFrame = editorFrame; setPreferredSize(new Dimension(150, 500)); setLayout(new MigLayout("fillx, hidemode 3")); /* EditorMode Picker */ final DefaultComboBoxModel editorModeListModel = new DefaultComboBoxModel(); editorModeListModel.addElement(new EditorMode(EditorMode.Type.TILE_GENERAL, "Tile general")); editorModeListModel.addElement(new EditorMode(EditorMode.Type.TILE_TYPE, "Tile type")); editorModeListModel.addElement(new EditorMode(EditorMode.Type.OBJECT, "Object")); editorModePicker = new EditorModePicker(this, editorModeListModel); add(new JLabel("Mode:"), "wrap"); add(editorModePicker, "growx, wrap, gapbottom 3"); add(new JSeparator(), "growx, wrap"); /* Geometry Picker */ geometryListModel = new DefaultListModel(); geometryPicker = new GeometryPicker(geometryListModel); final JScrollPane geometryPickerContainer = new JScrollPane(geometryPicker); geometryPickerPanel = new JPanel(new MigLayout("fillx, insets 0")); geometryPickerPanel.add(new JLabel("Geometry:"), "growx, wrap"); geometryPickerPanel.add(geometryPickerContainer, "growx, wrap"); add(geometryPickerPanel, "growx, wrap"); /* Texture Picker */ textureListModel = new DefaultListModel(); texturePicker = new TexturePicker(textureListModel); final JScrollPane texturePickerContainer = new JScrollPane(texturePicker); texturePickerPanel = new JPanel(new MigLayout("fillx, insets 0")); texturePickerPanel.add(new JLabel("Texture:"), "growx, wrap"); texturePickerPanel.add(texturePickerContainer, "growx, wrap"); add(texturePickerPanel, "growx, wrap"); /* Object Picker */ objectListModel = new DefaultListModel(); objectPicker = new ObjectPicker(objectListModel); final JScrollPane objectPickerContainer = new JScrollPane(objectPicker); objectPickerPanel = new JPanel(new MigLayout("fillx, insets 0")); objectPickerPanel.add(new JLabel("Object:"), "growx, wrap"); objectPickerPanel.add(objectPickerContainer, "growx, wrap"); add(objectPickerPanel, "growx, wrap"); /* Facing Picker */ final DefaultComboBoxModel facingModel = new DefaultComboBoxModel(); facingModel.addElement(new FacingWrapper(Direction.NORTH, "North / Northwest")); facingModel.addElement(new FacingWrapper(Direction.SOUTH, "South / Southeast")); facingModel.addElement(new FacingWrapper(Direction.WEST, "West / Southwest")); facingModel.addElement(new FacingWrapper(Direction.EAST, "East / Northeast")); facingPicker = new FacingPicker(facingModel); facingPickerPanel = new JPanel(new MigLayout("fillx, insets 0")); facingPickerPanel.add(new JLabel("Facing:"), "growx, wrap"); facingPickerPanel.add(facingPicker, "growx, wrap"); add(facingPickerPanel, "growx, wrap"); /* Elevation Picker */ final SpinnerNumberModel elevationModel = new SpinnerNumberModel(0, -10, 10, 1); elevationPicker = new ElevationPicker(elevationModel); elevationPickerPanel = new JPanel(new MigLayout("fillx, insets 0")); elevationPickerPanel.add(new JLabel("Elevation: "), "growx, wrap"); elevationPickerPanel.add(elevationPicker, "growx, wrap"); add(elevationPickerPanel, "growx, wrap"); } public void updateModel(MapRegion mapRegion) { setEditorMode(EditorMode.Type.TILE_GENERAL); for (Geometry geometry : mapRegion.getGeometrySet().getGeometries()) { geometryListModel.addElement( new GeometryWrapper(geometry.getId(), geometry.getId() + ": " + geometry.getName())); geometryPicker.setSelectedIndex(0); } final FileHandle objectDirHandle = Gdx.files.internal("assets/objects/"); int objectModelFileCount = 0; for (FileHandle entry : objectDirHandle.list()) { if (entry.extension().compareToIgnoreCase("g3db") == 0) { objectListModel.addElement(new ObjectWrapper(objectModelFileCount, objectModelFileCount + ": " + entry.nameWithoutExtension(), entry.nameWithoutExtension())); objectModelFileCount += 1; } } for (TextureAtlas.AtlasRegion texture : mapRegion.getTextureAtlas().getRegions()) { textureListModel.addElement(new TextureWrapper(texture.index, texture.index + ": " + texture.name)); texturePicker.setSelectedIndex(0); } } public void setEditorMode(EditorMode.Type type) { final Tile[] tiles = editorFrame.getMapRegion().getTiles(); switch (type) { case TILE_GENERAL: geometryPickerPanel.setVisible(true); texturePickerPanel.setVisible(true); objectPickerPanel.setVisible(false); facingPickerPanel.setVisible(true); elevationPickerPanel.setVisible(true); for (Tile tile : tiles) { tile.setColor(new Color(1, 1, 1, 1)); } break; case TILE_TYPE: geometryPickerPanel.setVisible(false); texturePickerPanel.setVisible(false); objectPickerPanel.setVisible(false); facingPickerPanel.setVisible(false); elevationPickerPanel.setVisible(false); final Color nonWalkableColor = new Color(1, 0, 0, 1); final Color walkableColor = new Color(0, 1, 0, 1); for (Tile tile : tiles) { switch (tile.getType()) { case DEFAULT_NONWALKABLE: tile.setColor(nonWalkableColor); break; case DEFAULT_WALKABLE: tile.setColor(walkableColor); break; } } break; case OBJECT: geometryPickerPanel.setVisible(false); texturePickerPanel.setVisible(false); objectPickerPanel.setVisible(true); facingPickerPanel.setVisible(true); elevationPickerPanel.setVisible(true); for (Tile tile : tiles) { tile.setColor(new Color(1, 1, 1, 1)); } break; default: } editorFrame.getMapRegion().getMesh().update(); } public EditorModePicker getEditorModePicker() { return editorModePicker; } public GeometryPicker getGeometryPicker() { return geometryPicker; } public TexturePicker getTexturePicker() { return texturePicker; } public ObjectPicker getObjectPicker() { return objectPicker; } public FacingPicker getFacingPicker() { return facingPicker; } public ElevationPicker getElevationPicker() { return elevationPicker; } }