mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-14 01:38:13 +00:00
AdventureEditor: added editors
This commit is contained in:
@@ -17,7 +17,7 @@
|
||||
</repository>
|
||||
</repositories>
|
||||
<build>
|
||||
<sourceDirectory>src</sourceDirectory>
|
||||
<sourceDirectory>src/main/java</sourceDirectory>
|
||||
<resources>
|
||||
<resource>
|
||||
<directory>${project.basedir}</directory>
|
||||
|
||||
@@ -0,0 +1,122 @@
|
||||
package forge.adventure.editor;
|
||||
|
||||
import forge.adventure.data.BiomeData;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.util.Arrays;
|
||||
|
||||
public class BiomeEdit extends JComponent {
|
||||
BiomeData currentData;
|
||||
|
||||
public JSpinner startPointX= new JSpinner(new SpinnerNumberModel(0.0f, 0.f, 1f, 0.1f));
|
||||
public JSpinner startPointY= new JSpinner(new SpinnerNumberModel(0.0f, 0.f, 1f, 0.1f));
|
||||
public JSpinner noiseWeight= new JSpinner(new SpinnerNumberModel(0.0f, 0.f, 1f, 0.1f));
|
||||
public JSpinner distWeight= new JSpinner(new SpinnerNumberModel(0.0f, 0.f, 1f, 0.1f));
|
||||
public JTextField name=new JTextField();
|
||||
public FilePicker tilesetAtlas=new FilePicker(new String[]{"atlas"});
|
||||
public JTextField tilesetName=new JTextField();
|
||||
public JSpinner width= new JSpinner(new SpinnerNumberModel(0.0f, 0.f, 1f, 0.1f));
|
||||
public JSpinner height= new JSpinner(new SpinnerNumberModel(0.0f, 0.f, 1f, 0.1f));
|
||||
public JTextField color=new JTextField();
|
||||
public TextListEdit spriteNames =new TextListEdit();
|
||||
public TextListEdit enemies =new TextListEdit();
|
||||
public TextListEdit pointsOfInterest =new TextListEdit();
|
||||
|
||||
public TerrainsEditor terrain =new TerrainsEditor();
|
||||
|
||||
private boolean updating=false;
|
||||
|
||||
public BiomeEdit()
|
||||
{
|
||||
|
||||
JComponent center=new JComponent() { };
|
||||
center.setLayout(new GridLayout(14,2));
|
||||
|
||||
center.add(new JLabel("startPointX:")); center.add(startPointX);
|
||||
center.add(new JLabel("startPointY:")); center.add(startPointY);
|
||||
center.add(new JLabel("noiseWeight:")); center.add(noiseWeight);
|
||||
center.add(new JLabel("distWeight:")); center.add(distWeight);
|
||||
center.add(new JLabel("name:")); center.add(name);
|
||||
center.add(new JLabel("tilesetAtlas:")); center.add(tilesetAtlas);
|
||||
center.add(new JLabel("tilesetName:")); center.add(tilesetName);
|
||||
center.add(new JLabel("width:")); center.add(width);
|
||||
center.add(new JLabel("height:")); center.add(height);
|
||||
center.add(new JLabel("spriteNames:")); center.add(spriteNames);
|
||||
center.add(new JLabel("enemies:")); center.add(enemies);
|
||||
center.add(new JLabel("pointsOfInterest:")); center.add(pointsOfInterest);
|
||||
center.add(new JLabel("color:")); center.add(color);
|
||||
center.add(new JLabel("terrain:")); center.add(terrain);
|
||||
BorderLayout layout=new BorderLayout();
|
||||
setLayout(layout);
|
||||
add(center,BorderLayout.PAGE_START);
|
||||
add(terrain,BorderLayout.CENTER);
|
||||
|
||||
name.getDocument().addDocumentListener(new DocumentChangeListener(() -> BiomeEdit.this.updateTerrain()));
|
||||
tilesetName.getDocument().addDocumentListener(new DocumentChangeListener(() -> BiomeEdit.this.updateTerrain()));
|
||||
color.getDocument().addDocumentListener(new DocumentChangeListener(() -> BiomeEdit.this.updateTerrain()));
|
||||
spriteNames.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(() -> BiomeEdit.this.updateTerrain()));
|
||||
enemies.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(() -> BiomeEdit.this.updateTerrain()));
|
||||
terrain.addChangeListener(e -> BiomeEdit.this.updateTerrain());
|
||||
|
||||
|
||||
startPointX.addChangeListener(e -> BiomeEdit.this.updateTerrain());
|
||||
startPointY.addChangeListener(e -> BiomeEdit.this.updateTerrain());
|
||||
noiseWeight.addChangeListener(e -> BiomeEdit.this.updateTerrain());
|
||||
distWeight.addChangeListener(e -> BiomeEdit.this.updateTerrain());
|
||||
tilesetAtlas.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(() -> BiomeEdit.this.updateTerrain()));
|
||||
width.addChangeListener(e -> BiomeEdit.this.updateTerrain());
|
||||
height.addChangeListener(e -> BiomeEdit.this.updateTerrain());
|
||||
refresh();
|
||||
}
|
||||
|
||||
private void updateTerrain() {
|
||||
if(currentData==null||updating)
|
||||
return;
|
||||
currentData.startPointX = (Float) startPointX.getValue();
|
||||
currentData.startPointY = (Float) startPointY.getValue();
|
||||
currentData.noiseWeight = (Float) noiseWeight.getValue();
|
||||
currentData.distWeight = (Float)distWeight.getValue();
|
||||
currentData.name = name.getText();
|
||||
currentData.tilesetAtlas = tilesetAtlas.edit.getText();
|
||||
currentData.tilesetName = tilesetName.getName();
|
||||
currentData.terrain = terrain.getBiomeTerrainData();
|
||||
currentData.width = (Float) width.getValue();
|
||||
currentData.height = (Float) height.getValue();
|
||||
currentData.color = color.getText();
|
||||
currentData.spriteNames = spriteNames.getList();
|
||||
currentData.enemies = Arrays.asList(enemies.getList());
|
||||
currentData.pointsOfInterest = Arrays.asList(pointsOfInterest.getList());
|
||||
}
|
||||
|
||||
public void setCurrentBiome(BiomeData data)
|
||||
{
|
||||
currentData=data;
|
||||
refresh();
|
||||
}
|
||||
|
||||
private void refresh() {
|
||||
setEnabled(currentData!=null);
|
||||
if(currentData==null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
updating=true;
|
||||
startPointX.setValue(currentData.startPointX);
|
||||
startPointY.setValue(currentData.startPointY);
|
||||
noiseWeight.setValue(currentData.noiseWeight);
|
||||
distWeight.setValue(currentData.distWeight);
|
||||
name.setText(currentData.name);
|
||||
tilesetAtlas.edit.setText( currentData.tilesetAtlas);
|
||||
tilesetName.setText(currentData.tilesetName);
|
||||
terrain.setTerrains(currentData.terrain);
|
||||
width.setValue(currentData.width);
|
||||
height.setValue(currentData.height);
|
||||
color.setText(currentData.color);
|
||||
spriteNames.setText(currentData.spriteNames);
|
||||
enemies.setText(currentData.enemies);
|
||||
color.setText(currentData.color);
|
||||
pointsOfInterest.setText(currentData.pointsOfInterest);
|
||||
updating=false;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package forge.adventure.editor;
|
||||
|
||||
import forge.adventure.data.BiomeTerrainData;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.event.ChangeListener;
|
||||
|
||||
public class BiomeTerrainEdit extends JComponent {
|
||||
public void setCurrentTerrain(BiomeTerrainData biomeTerrainData) {
|
||||
}
|
||||
public void addChangeListener(ChangeListener listener) {
|
||||
|
||||
}
|
||||
}
|
||||
@@ -10,8 +10,6 @@ import java.awt.*;
|
||||
*/
|
||||
public class ItemEdit extends JComponent {
|
||||
ItemData currentData;
|
||||
|
||||
|
||||
JTextField nameField=new JTextField();
|
||||
JTextField equipmentSlot=new JTextField();
|
||||
JTextField iconName=new JTextField();
|
||||
@@ -39,6 +37,7 @@ public class ItemEdit extends JComponent {
|
||||
|
||||
add(parameters);
|
||||
add(effect);
|
||||
add(new Box.Filler(new Dimension(0,0),new Dimension(0,Integer.MAX_VALUE),new Dimension(0,Integer.MAX_VALUE)));
|
||||
|
||||
nameField.getDocument().addDocumentListener(new DocumentChangeListener(() -> ItemEdit.this.updateItem()));
|
||||
equipmentSlot.getDocument().addDocumentListener(new DocumentChangeListener(() -> ItemEdit.this.updateItem()));
|
||||
|
||||
@@ -0,0 +1,88 @@
|
||||
package forge.adventure.editor;
|
||||
|
||||
import forge.adventure.data.PointOfInterestData;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
|
||||
public class PointOfInterestEdit extends JComponent {
|
||||
|
||||
PointOfInterestData currentData;
|
||||
|
||||
|
||||
JTextField name = new JTextField();
|
||||
JTextField type = new JTextField();
|
||||
JSpinner count = new JSpinner(new SpinnerNumberModel(0, 0, 1000, 1));
|
||||
FilePicker spriteAtlas = new FilePicker(new String[]{"atlas"});
|
||||
JTextField sprite = new JTextField();
|
||||
FilePicker map = new FilePicker(new String[]{"tmx"});
|
||||
JSpinner radiusFactor= new JSpinner(new SpinnerNumberModel(0.0f, 0.0f, 2.0f, 0.1f));
|
||||
|
||||
|
||||
private boolean updating=false;
|
||||
|
||||
public PointOfInterestEdit()
|
||||
{
|
||||
|
||||
setLayout(new BoxLayout(this,BoxLayout.Y_AXIS));
|
||||
JPanel parameters=new JPanel();
|
||||
parameters.setBorder(BorderFactory.createTitledBorder("Parameter"));
|
||||
parameters.setLayout(new GridLayout(7,2)) ;
|
||||
|
||||
parameters.add(new JLabel("Name:")); parameters.add(name);
|
||||
parameters.add(new JLabel("Type:")); parameters.add(type);
|
||||
parameters.add(new JLabel("Count:")); parameters.add(count);
|
||||
parameters.add(new JLabel("Sprite atlas:")); parameters.add(spriteAtlas);
|
||||
parameters.add(new JLabel("Sprite:")); parameters.add(sprite);
|
||||
parameters.add(new JLabel("Map:")); parameters.add(map);
|
||||
parameters.add(new JLabel("Radius factor:")); parameters.add(radiusFactor);
|
||||
|
||||
add(parameters);
|
||||
add(new Box.Filler(new Dimension(0,0),new Dimension(0,Integer.MAX_VALUE),new Dimension(0,Integer.MAX_VALUE)));
|
||||
|
||||
name.getDocument().addDocumentListener(new DocumentChangeListener(() -> PointOfInterestEdit.this.updateItem()));
|
||||
type.getDocument().addDocumentListener(new DocumentChangeListener(() -> PointOfInterestEdit.this.updateItem()));
|
||||
count.addChangeListener(e -> PointOfInterestEdit.this.updateItem());
|
||||
spriteAtlas.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(() -> PointOfInterestEdit.this.updateItem()));
|
||||
sprite.getDocument().addDocumentListener(new DocumentChangeListener(() -> PointOfInterestEdit.this.updateItem()));
|
||||
map.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(() -> PointOfInterestEdit.this.updateItem()));
|
||||
radiusFactor.addChangeListener(e -> PointOfInterestEdit.this.updateItem());
|
||||
refresh();
|
||||
}
|
||||
|
||||
private void updateItem() {
|
||||
if(currentData==null||updating)
|
||||
return;
|
||||
currentData.name=name.getText();
|
||||
currentData.type= type.getText();
|
||||
currentData.count= ((Integer) count.getValue()).intValue();
|
||||
currentData.spriteAtlas=spriteAtlas.getEdit().getText();
|
||||
currentData.sprite=sprite.getText();
|
||||
currentData.map=map.getEdit().getText();
|
||||
currentData.radiusFactor=((Float) radiusFactor.getValue()).floatValue();
|
||||
}
|
||||
|
||||
public void setCurrent(PointOfInterestData data)
|
||||
{
|
||||
currentData=data;
|
||||
refresh();
|
||||
}
|
||||
|
||||
private void refresh() {
|
||||
setEnabled(currentData!=null);
|
||||
if(currentData==null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
updating=true;
|
||||
name.setText(currentData.name);
|
||||
type.setText(currentData.type);
|
||||
count.setValue(currentData.count);
|
||||
spriteAtlas.getEdit().setText(currentData.spriteAtlas);
|
||||
sprite.setText(currentData.sprite);
|
||||
map.getEdit().setText(currentData.map);
|
||||
radiusFactor.setValue(currentData.radiusFactor);
|
||||
|
||||
updating=false;
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,131 @@
|
||||
package forge.adventure.editor;
|
||||
|
||||
import java.awt.*;
|
||||
import com.badlogic.gdx.files.FileHandle;
|
||||
import com.badlogic.gdx.utils.Array;
|
||||
import com.badlogic.gdx.utils.Json;
|
||||
import com.badlogic.gdx.utils.JsonWriter;
|
||||
import forge.adventure.data.PointOfInterestData;
|
||||
import forge.adventure.util.Config;
|
||||
import forge.adventure.util.Paths;
|
||||
|
||||
public class PointOfInterestEditor extends Component {
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.util.HashMap;
|
||||
|
||||
public class PointOfInterestEditor extends JComponent {
|
||||
DefaultListModel<PointOfInterestData> model = new DefaultListModel<>();
|
||||
JList<PointOfInterestData> list = new JList<>(model);
|
||||
JToolBar toolBar = new JToolBar("toolbar");
|
||||
PointOfInterestEdit edit=new PointOfInterestEdit();
|
||||
static HashMap<String,SwingAtlas> atlas=new HashMap<>();
|
||||
|
||||
|
||||
|
||||
public class PointOfInterestRenderer extends DefaultListCellRenderer {
|
||||
@Override
|
||||
public Component getListCellRendererComponent(
|
||||
JList list, Object value, int index,
|
||||
boolean isSelected, boolean cellHasFocus) {
|
||||
JLabel label = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
|
||||
if(!(value instanceof PointOfInterestData))
|
||||
return label;
|
||||
PointOfInterestData poi=(PointOfInterestData) value;
|
||||
// Get the renderer component from parent class
|
||||
|
||||
label.setText(poi.name);
|
||||
if(!atlas.containsKey(poi.spriteAtlas))
|
||||
atlas.put(poi.spriteAtlas,new SwingAtlas(Config.instance().getFile(poi.spriteAtlas)));
|
||||
|
||||
SwingAtlas poiAtlas = atlas.get(poi.spriteAtlas);
|
||||
|
||||
if(poiAtlas.has(poi.sprite))
|
||||
label.setIcon(poiAtlas.get(poi.sprite));
|
||||
else
|
||||
{
|
||||
ImageIcon img=poiAtlas.getAny();
|
||||
if(img!=null)
|
||||
label.setIcon(img);
|
||||
}
|
||||
return label;
|
||||
}
|
||||
}
|
||||
public void addButton(String name, ActionListener action)
|
||||
{
|
||||
JButton newButton=new JButton(name);
|
||||
newButton.addActionListener(action);
|
||||
toolBar.add(newButton);
|
||||
|
||||
}
|
||||
public PointOfInterestEditor()
|
||||
{
|
||||
|
||||
list.setCellRenderer(new PointOfInterestEditor.PointOfInterestRenderer());
|
||||
list.addListSelectionListener(e -> PointOfInterestEditor.this.updateEdit());
|
||||
addButton("add", e -> PointOfInterestEditor.this.addItem());
|
||||
addButton("remove", e -> PointOfInterestEditor.this.remove());
|
||||
addButton("copy", e -> PointOfInterestEditor.this.copy());
|
||||
addButton("load", e -> PointOfInterestEditor.this.load());
|
||||
addButton("save", e -> PointOfInterestEditor.this.save());
|
||||
BorderLayout layout=new BorderLayout();
|
||||
setLayout(layout);
|
||||
add(new JScrollPane(list), BorderLayout.LINE_START);
|
||||
add(toolBar, BorderLayout.PAGE_START);
|
||||
add(edit,BorderLayout.CENTER);
|
||||
load();
|
||||
}
|
||||
private void copy() {
|
||||
|
||||
int selected=list.getSelectedIndex();
|
||||
if(selected<0)
|
||||
return;
|
||||
PointOfInterestData data=new PointOfInterestData(model.get(selected));
|
||||
model.add(model.size(),data);
|
||||
}
|
||||
private void updateEdit() {
|
||||
|
||||
int selected=list.getSelectedIndex();
|
||||
if(selected<0)
|
||||
return;
|
||||
edit.setCurrent(model.get(selected));
|
||||
}
|
||||
|
||||
void save()
|
||||
{
|
||||
Array<PointOfInterestData> allEnemies=new Array<>();
|
||||
for(int i=0;i<model.getSize();i++)
|
||||
allEnemies.add(model.get(i));
|
||||
Json json = new Json(JsonWriter.OutputType.json);
|
||||
FileHandle handle = Config.instance().getFile(Paths.POINTS_OF_INTEREST);
|
||||
handle.writeString(json.prettyPrint(json.toJson(allEnemies,Array.class, PointOfInterestData.class)),false);
|
||||
|
||||
}
|
||||
void load()
|
||||
{
|
||||
model.clear();
|
||||
Array<PointOfInterestData> allEnemies=new Array<>();
|
||||
Json json = new Json();
|
||||
FileHandle handle = Config.instance().getFile(Paths.POINTS_OF_INTEREST);
|
||||
if (handle.exists())
|
||||
{
|
||||
Array readEnemies=json.fromJson(Array.class, PointOfInterestData.class, handle);
|
||||
allEnemies = readEnemies;
|
||||
}
|
||||
for (int i=0;i<allEnemies.size;i++) {
|
||||
model.add(i,allEnemies.get(i));
|
||||
}
|
||||
}
|
||||
void addItem()
|
||||
{
|
||||
PointOfInterestData data=new PointOfInterestData();
|
||||
data.name="PoI "+model.getSize();
|
||||
model.add(model.size(),data);
|
||||
}
|
||||
void remove()
|
||||
{
|
||||
int selected=list.getSelectedIndex();
|
||||
if(selected<0)
|
||||
return;
|
||||
model.remove(selected);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,8 +8,6 @@ import javax.swing.*;
|
||||
import javax.swing.event.ChangeEvent;
|
||||
import javax.swing.event.ChangeListener;
|
||||
import java.awt.*;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.util.Arrays;
|
||||
|
||||
/**
|
||||
@@ -58,102 +56,22 @@ public class RewardEdit extends JComponent {
|
||||
add(new JLabel("cardText:")); add(cardText);
|
||||
|
||||
|
||||
typeField.addActionListener((new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
RewardEdit.this.updateReward();
|
||||
}
|
||||
}));
|
||||
probability.addChangeListener(new ChangeListener() {
|
||||
@Override
|
||||
public void stateChanged(ChangeEvent e) {
|
||||
RewardEdit.this.updateReward();
|
||||
}
|
||||
});
|
||||
count.addChangeListener(new ChangeListener() {
|
||||
@Override
|
||||
public void stateChanged(ChangeEvent e) {
|
||||
RewardEdit.this.updateReward();
|
||||
}
|
||||
});
|
||||
addMaxCount.addChangeListener(new ChangeListener() {
|
||||
@Override
|
||||
public void stateChanged(ChangeEvent e) {
|
||||
RewardEdit.this.updateReward();
|
||||
}
|
||||
});
|
||||
cardName.getDocument().addDocumentListener(new DocumentChangeListener(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
RewardEdit.this.updateReward();
|
||||
}
|
||||
}));
|
||||
itemName.getDocument().addDocumentListener(new DocumentChangeListener(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
RewardEdit.this.updateReward();
|
||||
}
|
||||
}));
|
||||
editions.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
RewardEdit.this.updateReward();
|
||||
}
|
||||
}));
|
||||
colors.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
RewardEdit.this.updateReward();
|
||||
}
|
||||
}));
|
||||
rarity.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
RewardEdit.this.updateReward();
|
||||
}
|
||||
}));
|
||||
subTypes.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
RewardEdit.this.updateReward();
|
||||
}
|
||||
}));
|
||||
cardTypes.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
RewardEdit.this.updateReward();
|
||||
}
|
||||
}));
|
||||
superTypes.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
RewardEdit.this.updateReward();
|
||||
}
|
||||
}));
|
||||
manaCosts.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
RewardEdit.this.updateReward();
|
||||
}
|
||||
}));
|
||||
keyWords.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
RewardEdit.this.updateReward();
|
||||
}
|
||||
}));
|
||||
colorType.addActionListener((new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
RewardEdit.this.updateReward();
|
||||
}
|
||||
}));
|
||||
cardText.getDocument().addDocumentListener(new DocumentChangeListener(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
RewardEdit.this.updateReward();
|
||||
}
|
||||
}));
|
||||
typeField.addActionListener((e -> RewardEdit.this.updateReward()));
|
||||
probability.addChangeListener(e -> RewardEdit.this.updateReward());
|
||||
count.addChangeListener(e -> RewardEdit.this.updateReward());
|
||||
addMaxCount.addChangeListener(e -> RewardEdit.this.updateReward());
|
||||
cardName.getDocument().addDocumentListener(new DocumentChangeListener(() -> RewardEdit.this.updateReward()));
|
||||
itemName.getDocument().addDocumentListener(new DocumentChangeListener(() -> RewardEdit.this.updateReward()));
|
||||
editions.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(() -> RewardEdit.this.updateReward()));
|
||||
colors.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(() -> RewardEdit.this.updateReward()));
|
||||
rarity.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(() -> RewardEdit.this.updateReward()));
|
||||
subTypes.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(() -> RewardEdit.this.updateReward()));
|
||||
cardTypes.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(() -> RewardEdit.this.updateReward()));
|
||||
superTypes.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(() -> RewardEdit.this.updateReward()));
|
||||
manaCosts.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(() -> RewardEdit.this.updateReward()));
|
||||
keyWords.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(() -> RewardEdit.this.updateReward()));
|
||||
colorType.addActionListener((e -> RewardEdit.this.updateReward()));
|
||||
cardText.getDocument().addDocumentListener(new DocumentChangeListener(() -> RewardEdit.this.updateReward()));
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -5,10 +5,7 @@ import forge.adventure.data.RewardData;
|
||||
import javax.swing.*;
|
||||
import javax.swing.event.ChangeEvent;
|
||||
import javax.swing.event.ChangeListener;
|
||||
import javax.swing.event.ListSelectionEvent;
|
||||
import javax.swing.event.ListSelectionListener;
|
||||
import java.awt.*;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
|
||||
/**
|
||||
@@ -59,30 +56,10 @@ public class RewardsEditor extends JComponent{
|
||||
{
|
||||
|
||||
list.setCellRenderer(new RewardDataRenderer());
|
||||
list.addListSelectionListener(new ListSelectionListener() {
|
||||
@Override
|
||||
public void valueChanged(ListSelectionEvent e) {
|
||||
RewardsEditor.this.updateEdit();
|
||||
}
|
||||
});
|
||||
addButton("add", new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
RewardsEditor.this.addReward();
|
||||
}
|
||||
});
|
||||
addButton("remove", new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
RewardsEditor.this.remove();
|
||||
}
|
||||
});
|
||||
addButton("copy", new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
RewardsEditor.this.copy();
|
||||
}
|
||||
});
|
||||
list.addListSelectionListener(e -> RewardsEditor.this.updateEdit());
|
||||
addButton("add", e -> RewardsEditor.this.addReward());
|
||||
addButton("remove", e -> RewardsEditor.this.remove());
|
||||
addButton("copy", e -> RewardsEditor.this.copy());
|
||||
BorderLayout layout=new BorderLayout();
|
||||
setLayout(layout);
|
||||
add(list, BorderLayout.LINE_START);
|
||||
|
||||
@@ -0,0 +1,138 @@
|
||||
package forge.adventure.editor;
|
||||
|
||||
import forge.adventure.data.BiomeTerrainData;
|
||||
import forge.adventure.data.RewardData;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.event.ChangeEvent;
|
||||
import javax.swing.event.ChangeListener;
|
||||
import java.awt.*;
|
||||
import java.awt.event.ActionListener;
|
||||
|
||||
/**
|
||||
* Editor class to edit configuration, maybe moved or removed
|
||||
*/
|
||||
public class TerrainsEditor extends JComponent{
|
||||
DefaultListModel<BiomeTerrainData> model = new DefaultListModel<>();
|
||||
JList<BiomeTerrainData> list = new JList<>(model);
|
||||
JToolBar toolBar = new JToolBar("toolbar");
|
||||
BiomeTerrainEdit edit=new BiomeTerrainEdit();
|
||||
|
||||
|
||||
|
||||
public class TerrainDataRenderer extends DefaultListCellRenderer {
|
||||
@Override
|
||||
public Component getListCellRendererComponent(
|
||||
JList list, Object value, int index,
|
||||
boolean isSelected, boolean cellHasFocus) {
|
||||
JLabel label = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
|
||||
if(!(value instanceof RewardData))
|
||||
return label;
|
||||
RewardData reward=(RewardData) value;
|
||||
StringBuilder builder=new StringBuilder();
|
||||
if(reward.type==null||reward.type.isEmpty())
|
||||
builder.append("Terrain");
|
||||
else
|
||||
builder.append(reward.type);
|
||||
builder.append(" ");
|
||||
builder.append(reward.count);
|
||||
if(reward.addMaxCount>0)
|
||||
{
|
||||
builder.append("-");
|
||||
builder.append(reward.count+reward.addMaxCount);
|
||||
}
|
||||
label.setText(builder.toString());
|
||||
return label;
|
||||
}
|
||||
}
|
||||
public void addButton(String name, ActionListener action)
|
||||
{
|
||||
JButton newButton=new JButton(name);
|
||||
newButton.addActionListener(action);
|
||||
toolBar.add(newButton);
|
||||
|
||||
}
|
||||
|
||||
public TerrainsEditor()
|
||||
{
|
||||
|
||||
list.setCellRenderer(new TerrainDataRenderer());
|
||||
list.addListSelectionListener(e -> TerrainsEditor.this.updateEdit());
|
||||
addButton("add", e -> TerrainsEditor.this.addReward());
|
||||
addButton("remove", e -> TerrainsEditor.this.remove());
|
||||
addButton("copy", e -> TerrainsEditor.this.copy());
|
||||
BorderLayout layout=new BorderLayout();
|
||||
setLayout(layout);
|
||||
add(list, BorderLayout.LINE_START);
|
||||
add(toolBar, BorderLayout.PAGE_START);
|
||||
add(edit,BorderLayout.CENTER);
|
||||
|
||||
|
||||
edit.addChangeListener(new ChangeListener() {
|
||||
@Override
|
||||
public void stateChanged(ChangeEvent e) {
|
||||
emitChanged();
|
||||
}
|
||||
});
|
||||
}
|
||||
protected void emitChanged() {
|
||||
ChangeListener[] listeners = listenerList.getListeners(ChangeListener.class);
|
||||
if (listeners != null && listeners.length > 0) {
|
||||
ChangeEvent evt = new ChangeEvent(this);
|
||||
for (ChangeListener listener : listeners) {
|
||||
listener.stateChanged(evt);
|
||||
}
|
||||
}
|
||||
}
|
||||
private void copy() {
|
||||
|
||||
int selected=list.getSelectedIndex();
|
||||
if(selected<0)
|
||||
return;
|
||||
BiomeTerrainData data=new BiomeTerrainData(model.get(selected));
|
||||
model.add(model.size(),data);
|
||||
}
|
||||
|
||||
private void updateEdit() {
|
||||
|
||||
int selected=list.getSelectedIndex();
|
||||
if(selected<0)
|
||||
return;
|
||||
edit.setCurrentTerrain(model.get(selected));
|
||||
}
|
||||
|
||||
void addReward()
|
||||
{
|
||||
BiomeTerrainData data=new BiomeTerrainData();
|
||||
model.add(model.size(),data);
|
||||
}
|
||||
void remove()
|
||||
{
|
||||
int selected=list.getSelectedIndex();
|
||||
if(selected<0)
|
||||
return;
|
||||
model.remove(selected);
|
||||
}
|
||||
public void setTerrains(BiomeTerrainData[] terrain) {
|
||||
|
||||
model.clear();
|
||||
if(terrain==null)
|
||||
return;
|
||||
for (int i=0;i<terrain.length;i++) {
|
||||
model.add(i,terrain[i]);
|
||||
}
|
||||
}
|
||||
|
||||
public BiomeTerrainData[] getBiomeTerrainData() {
|
||||
|
||||
BiomeTerrainData[] rewards= new BiomeTerrainData[model.getSize()];
|
||||
for(int i=0;i<model.getSize();i++)
|
||||
{
|
||||
rewards[i]=model.get(i);
|
||||
}
|
||||
return rewards;
|
||||
}
|
||||
public void addChangeListener(ChangeListener listener) {
|
||||
listenerList.add(ChangeListener.class, listener);
|
||||
}
|
||||
}
|
||||
@@ -7,6 +7,7 @@ import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Editor class to edit configuration, maybe moved or removed
|
||||
@@ -59,6 +60,12 @@ public class TextListEdit extends Box {
|
||||
}
|
||||
}
|
||||
|
||||
public void setText(List<String> itemNames) {
|
||||
if(itemNames==null)
|
||||
edit.setText("");
|
||||
else
|
||||
edit.setText(String.join(";",itemNames));
|
||||
}
|
||||
public void setText(String[] itemName) {
|
||||
if(itemName==null)
|
||||
edit.setText("");
|
||||
|
||||
@@ -1,6 +1,153 @@
|
||||
package forge.adventure.editor;
|
||||
|
||||
import java.awt.*;
|
||||
import com.badlogic.gdx.files.FileHandle;
|
||||
import com.badlogic.gdx.utils.Array;
|
||||
import com.badlogic.gdx.utils.Json;
|
||||
import com.badlogic.gdx.utils.JsonWriter;
|
||||
import forge.adventure.data.BiomeData;
|
||||
import forge.adventure.data.WorldData;
|
||||
import forge.adventure.util.Config;
|
||||
import forge.adventure.util.Paths;
|
||||
|
||||
public class WorldEditor extends Component {
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.util.HashMap;
|
||||
|
||||
public class WorldEditor extends JComponent {
|
||||
|
||||
WorldData currentData;
|
||||
|
||||
|
||||
JSpinner width= new JSpinner(new SpinnerNumberModel(0, 0, 100000, 1));
|
||||
JSpinner height= new JSpinner(new SpinnerNumberModel(0, 0, 100000, 1));
|
||||
JSpinner playerStartPosX= new JSpinner(new SpinnerNumberModel(0, 0, 1, .1));
|
||||
JSpinner playerStartPosY= new JSpinner(new SpinnerNumberModel(0, 0, 1, .1));
|
||||
JSpinner noiseZoomBiome= new JSpinner(new SpinnerNumberModel(0, 0, 1000f, 1f));
|
||||
JSpinner tileSize= new JSpinner(new SpinnerNumberModel(0, 0, 100000, 1));
|
||||
|
||||
JTextField biomesSprites = new JTextField();
|
||||
JSpinner maxRoadDistance = new JSpinner(new SpinnerNumberModel(0, 0, 100000f, 1f));
|
||||
TextListEdit biomesNames = new TextListEdit();
|
||||
|
||||
DefaultListModel<BiomeData> model = new DefaultListModel<>();
|
||||
JList<BiomeData> list = new JList<>(model);
|
||||
BiomeEdit edit=new BiomeEdit();
|
||||
JTabbedPane tabs =new JTabbedPane();
|
||||
static HashMap<String,SwingAtlas> atlas=new HashMap<>();
|
||||
|
||||
public class BiomeDataRenderer extends DefaultListCellRenderer {
|
||||
@Override
|
||||
public Component getListCellRendererComponent(
|
||||
JList list, Object value, int index,
|
||||
boolean isSelected, boolean cellHasFocus) {
|
||||
JLabel label = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
|
||||
if(!(value instanceof BiomeData))
|
||||
return label;
|
||||
BiomeData biome=(BiomeData) value;
|
||||
// Get the renderer component from parent class
|
||||
|
||||
label.setText(biome.name);
|
||||
if(!atlas.containsKey(biome.tilesetAtlas))
|
||||
atlas.put(biome.tilesetAtlas,new SwingAtlas(Config.instance().getFile(biome.tilesetAtlas)));
|
||||
|
||||
SwingAtlas poiAtlas = atlas.get(biome.tilesetAtlas);
|
||||
|
||||
if(poiAtlas.has(biome.tilesetName))
|
||||
label.setIcon(poiAtlas.get(biome.tilesetName));
|
||||
else
|
||||
{
|
||||
ImageIcon img=poiAtlas.getAny();
|
||||
if(img!=null)
|
||||
label.setIcon(img);
|
||||
}
|
||||
return label;
|
||||
}
|
||||
}
|
||||
public WorldEditor() {
|
||||
list.setCellRenderer(new BiomeDataRenderer());
|
||||
BorderLayout layout = new BorderLayout();
|
||||
setLayout(layout);
|
||||
add(tabs);
|
||||
JPanel worldPanel=new JPanel();
|
||||
JPanel biomeData=new JPanel();
|
||||
tabs.addTab("BiomeData", biomeData);
|
||||
tabs.addTab("WorldData", worldPanel);
|
||||
|
||||
|
||||
JPanel worldData=new JPanel();
|
||||
worldData.setLayout(new GridLayout(9,2)) ;
|
||||
|
||||
worldData.add(new JLabel("width:")); worldData.add(width);
|
||||
worldData.add(new JLabel("height:")); worldData.add(height);
|
||||
worldData.add(new JLabel("playerStartPosX:")); worldData.add(playerStartPosX);
|
||||
worldData.add(new JLabel("playerStartPosY:")); worldData.add(playerStartPosY);
|
||||
worldData.add(new JLabel("noiseZoomBiome:")); worldData.add(noiseZoomBiome);
|
||||
worldData.add(new JLabel("tileSize:")); worldData.add(tileSize);
|
||||
worldData.add(new JLabel("biomesSprites:")); worldData.add(biomesSprites);
|
||||
worldData.add(new JLabel("maxRoadDistance:")); worldData.add(maxRoadDistance);
|
||||
worldData.add(new JLabel("biomesNames:")); worldData.add(biomesNames);
|
||||
|
||||
|
||||
worldPanel.setLayout(new BoxLayout(worldPanel,BoxLayout.Y_AXIS));
|
||||
worldPanel.add(worldData);
|
||||
worldPanel.add(new Box.Filler(new Dimension(0,0),new Dimension(0,Integer.MAX_VALUE),new Dimension(0,Integer.MAX_VALUE)));
|
||||
|
||||
|
||||
biomeData.setLayout(new GridLayout(1,2)) ;
|
||||
biomeData.add(list); biomeData.add(edit);
|
||||
|
||||
load();
|
||||
|
||||
JToolBar toolBar = new JToolBar("toolbar");
|
||||
add(toolBar, BorderLayout.PAGE_START);
|
||||
JButton newButton=new JButton("save");
|
||||
newButton.addActionListener(e -> WorldEditor.this.save());
|
||||
toolBar.add(newButton);
|
||||
newButton=new JButton("load");
|
||||
newButton.addActionListener(e -> WorldEditor.this.load());
|
||||
toolBar.add(newButton);
|
||||
}
|
||||
|
||||
void save()
|
||||
{
|
||||
Json json = new Json(JsonWriter.OutputType.json);
|
||||
FileHandle handle = Config.instance().getFile(Paths.WORLD);
|
||||
handle.writeString(json.prettyPrint(json.toJson(currentData,Array.class, WorldData.class)),false);
|
||||
|
||||
}
|
||||
void load()
|
||||
{
|
||||
model.clear();
|
||||
Json json = new Json();
|
||||
FileHandle handle = Config.instance().getFile(Paths.WORLD);
|
||||
if (handle.exists())
|
||||
{
|
||||
currentData=json.fromJson(WorldData.class, WorldData.class, handle);
|
||||
}
|
||||
update();
|
||||
}
|
||||
|
||||
private void update() {
|
||||
width.setValue(currentData.width);
|
||||
height.setValue(currentData.height);
|
||||
playerStartPosX.setValue(currentData.playerStartPosX);
|
||||
playerStartPosY.setValue(currentData.playerStartPosY);
|
||||
noiseZoomBiome.setValue(currentData.noiseZoomBiome);
|
||||
tileSize.setValue(currentData.tileSize);
|
||||
biomesSprites.setText(currentData.biomesSprites);
|
||||
maxRoadDistance.setValue(currentData.maxRoadDistance);
|
||||
biomesNames.setText(currentData.biomesNames);
|
||||
|
||||
for(String path:currentData.biomesNames)
|
||||
{
|
||||
Json json = new Json();
|
||||
FileHandle handle = Config.instance().getFile(path);
|
||||
if (handle.exists())
|
||||
{
|
||||
BiomeData data=json.fromJson(BiomeData.class, BiomeData.class, handle);
|
||||
model.addElement(data);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,7 +15,6 @@ import java.util.Random;
|
||||
* contains the information for the biomes
|
||||
*/
|
||||
public class BiomeData implements Serializable {
|
||||
private final Random rand = MyRandom.getRandom();
|
||||
public float startPointX;
|
||||
public float startPointY;
|
||||
public float noiseWeight;
|
||||
@@ -35,6 +34,7 @@ public class BiomeData implements Serializable {
|
||||
private ArrayList<EnemyData> enemyList;
|
||||
private ArrayList<PointOfInterestData> pointOfInterestList;
|
||||
|
||||
private final Random rand = MyRandom.getRandom();
|
||||
public Color GetColor() {
|
||||
return Color.valueOf(color);
|
||||
}
|
||||
|
||||
@@ -16,4 +16,16 @@ public class BiomeTerrainData {
|
||||
// factor for the noise resolution
|
||||
public float resolution;
|
||||
|
||||
public BiomeTerrainData()
|
||||
{
|
||||
|
||||
}
|
||||
public BiomeTerrainData(BiomeTerrainData other)
|
||||
{
|
||||
spriteName=other.spriteName;
|
||||
min=other.min;
|
||||
max=other.max;
|
||||
resolution=other.resolution;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -42,4 +42,18 @@ public class PointOfInterestData {
|
||||
}
|
||||
return null;
|
||||
}
|
||||
public PointOfInterestData()
|
||||
{
|
||||
|
||||
}
|
||||
public PointOfInterestData(PointOfInterestData other)
|
||||
{
|
||||
name=other.name;
|
||||
type=other.type;
|
||||
count=other.count;
|
||||
spriteAtlas=other.spriteAtlas;
|
||||
sprite=other.sprite;
|
||||
map=other.map;
|
||||
radiusFactor=other.radiusFactor;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,19 +17,22 @@ import java.util.List;
|
||||
*/
|
||||
public class WorldData implements Serializable {
|
||||
|
||||
static Array<EnemyData> allEnemies;
|
||||
public int width;
|
||||
public int height;
|
||||
public float playerStartPosX;
|
||||
public float playerStartPosY;
|
||||
public float noiseZoomBiome;
|
||||
public int tileSize;
|
||||
public List<String> biomesNames;
|
||||
public BiomeData roadTileset;
|
||||
public String biomesSprites;
|
||||
public float maxRoadDistance;
|
||||
public List<String> biomesNames;
|
||||
|
||||
|
||||
private BiomeSprites sprites;
|
||||
private List<BiomeData> biomes;
|
||||
|
||||
private static Array<EnemyData> allEnemies;
|
||||
private static Array<ShopData> shopList;
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user