mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-12 00:38:44 +00:00
WaveFunctionCollapse editor
This commit is contained in:
@@ -2,11 +2,7 @@ package forge.adventure;
|
|||||||
|
|
||||||
import com.badlogic.gdx.ApplicationListener;
|
import com.badlogic.gdx.ApplicationListener;
|
||||||
import com.badlogic.gdx.Gdx;
|
import com.badlogic.gdx.Gdx;
|
||||||
import com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application;
|
import com.badlogic.gdx.backends.lwjgl3.*;
|
||||||
import com.badlogic.gdx.backends.lwjgl3.Lwjgl3ApplicationConfiguration;
|
|
||||||
import com.badlogic.gdx.backends.lwjgl3.Lwjgl3Clipboard;
|
|
||||||
import com.badlogic.gdx.backends.lwjgl3.Lwjgl3Window;
|
|
||||||
import com.badlogic.gdx.backends.lwjgl3.Lwjgl3WindowListener;
|
|
||||||
import com.badlogic.gdx.graphics.glutils.HdpiMode;
|
import com.badlogic.gdx.graphics.glutils.HdpiMode;
|
||||||
import forge.Forge;
|
import forge.Forge;
|
||||||
import forge.adventure.util.Config;
|
import forge.adventure.util.Config;
|
||||||
|
|||||||
@@ -46,8 +46,8 @@ public class BiomeEdit extends JComponent {
|
|||||||
center.add(new JLabel("enemies:")); center.add(enemies);
|
center.add(new JLabel("enemies:")); center.add(enemies);
|
||||||
center.add(new JLabel("pointsOfInterest:")); center.add(pointsOfInterest);
|
center.add(new JLabel("pointsOfInterest:")); center.add(pointsOfInterest);
|
||||||
center.add(new JLabel("color:")); center.add(color);
|
center.add(new JLabel("color:")); center.add(color);
|
||||||
center.add(new JLabel("terrain/structures:"));
|
center.add(new JLabel("terrain/structures:"));center.add(new JLabel(""));
|
||||||
BorderLayout layout=new BorderLayout();
|
BoxLayout layout=new BoxLayout(this, BoxLayout.Y_AXIS);
|
||||||
setLayout(layout);
|
setLayout(layout);
|
||||||
add(center,BorderLayout.NORTH);
|
add(center,BorderLayout.NORTH);
|
||||||
add(terrain,BorderLayout.CENTER);
|
add(terrain,BorderLayout.CENTER);
|
||||||
|
|||||||
@@ -0,0 +1,169 @@
|
|||||||
|
package forge.adventure.editor;
|
||||||
|
|
||||||
|
import forge.adventure.data.BiomeStructureData;
|
||||||
|
import forge.adventure.util.Config;
|
||||||
|
import forge.adventure.world.BiomeStructure;
|
||||||
|
|
||||||
|
import javax.swing.*;
|
||||||
|
import java.awt.*;
|
||||||
|
import java.awt.event.ActionListener;
|
||||||
|
|
||||||
|
public class BiomeStructureDataMappingEditor extends JComponent {
|
||||||
|
DefaultListModel<BiomeStructureData.BiomeStructureDataMapping> model = new DefaultListModel<>();
|
||||||
|
JList<BiomeStructureData.BiomeStructureDataMapping> list = new JList<>(model);
|
||||||
|
JToolBar toolBar = new JToolBar("toolbar");
|
||||||
|
BiomeStructureDataMappingEdit edit=new BiomeStructureDataMappingEdit();
|
||||||
|
private BiomeStructureData data;
|
||||||
|
|
||||||
|
public void setCurrent(BiomeStructureData data) {
|
||||||
|
this.data=data;
|
||||||
|
model.clear();
|
||||||
|
for(int i=0;data.mappingInfo!=null&&i<data.mappingInfo.length;i++)
|
||||||
|
model.addElement(data.mappingInfo[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public BiomeStructureData.BiomeStructureDataMapping[] getCurrent()
|
||||||
|
{
|
||||||
|
BiomeStructureData.BiomeStructureDataMapping[] array=new BiomeStructureData.BiomeStructureDataMapping[model.size()];
|
||||||
|
for(int i=0;i<array.length;i++)
|
||||||
|
array[i]=model.get(i);
|
||||||
|
return array;
|
||||||
|
}
|
||||||
|
|
||||||
|
public class BiomeStructureDataMappingRenderer extends DefaultListCellRenderer {
|
||||||
|
private final BiomeStructureDataMappingEditor editor;
|
||||||
|
|
||||||
|
public BiomeStructureDataMappingRenderer(BiomeStructureDataMappingEditor biomeStructureDataMappingEditor) {
|
||||||
|
this.editor=biomeStructureDataMappingEditor;
|
||||||
|
}
|
||||||
|
|
||||||
|
@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 BiomeStructureData.BiomeStructureDataMapping))
|
||||||
|
return label;
|
||||||
|
BiomeStructureData.BiomeStructureDataMapping data=(BiomeStructureData.BiomeStructureDataMapping) value;
|
||||||
|
// Get the renderer component from parent class
|
||||||
|
|
||||||
|
label.setText(data.name);
|
||||||
|
if(editor.data!=null)
|
||||||
|
{
|
||||||
|
SwingAtlas itemAtlas=new SwingAtlas(Config.instance().getFile(editor.data.structureAtlasPath));
|
||||||
|
if(itemAtlas.has(data.name))
|
||||||
|
label.setIcon(itemAtlas.get(data.name));
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ImageIcon img=itemAtlas.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 BiomeStructureDataMappingEditor()
|
||||||
|
{
|
||||||
|
|
||||||
|
list.setCellRenderer(new BiomeStructureDataMappingEditor.BiomeStructureDataMappingRenderer(this));
|
||||||
|
list.addListSelectionListener(e -> BiomeStructureDataMappingEditor.this.updateEdit());
|
||||||
|
addButton("add", e -> BiomeStructureDataMappingEditor.this.add());
|
||||||
|
addButton("remove", e -> BiomeStructureDataMappingEditor.this.remove());
|
||||||
|
addButton("copy", e -> BiomeStructureDataMappingEditor.this.copy());
|
||||||
|
BorderLayout layout=new BorderLayout();
|
||||||
|
setLayout(layout);
|
||||||
|
add(new JScrollPane(list), BorderLayout.WEST);
|
||||||
|
add(toolBar, BorderLayout.NORTH);
|
||||||
|
add(edit,BorderLayout.CENTER);
|
||||||
|
}
|
||||||
|
private void copy() {
|
||||||
|
|
||||||
|
int selected=list.getSelectedIndex();
|
||||||
|
if(selected<0)
|
||||||
|
return;
|
||||||
|
BiomeStructureData.BiomeStructureDataMapping data=new BiomeStructureData.BiomeStructureDataMapping(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 add()
|
||||||
|
{
|
||||||
|
BiomeStructureData.BiomeStructureDataMapping data=new BiomeStructureData.BiomeStructureDataMapping();
|
||||||
|
data.name="Structure "+model.getSize();
|
||||||
|
model.add(model.size(),data);
|
||||||
|
}
|
||||||
|
void remove()
|
||||||
|
{
|
||||||
|
int selected=list.getSelectedIndex();
|
||||||
|
if(selected<0)
|
||||||
|
return;
|
||||||
|
model.remove(selected);
|
||||||
|
}
|
||||||
|
|
||||||
|
private class BiomeStructureDataMappingEdit extends JComponent{
|
||||||
|
BiomeStructureData.BiomeStructureDataMapping currentData;
|
||||||
|
|
||||||
|
|
||||||
|
public JTextField name=new JTextField();
|
||||||
|
public JTextField color=new JTextField();
|
||||||
|
public JCheckBox collision=new JCheckBox();
|
||||||
|
private boolean updating=false;
|
||||||
|
|
||||||
|
public BiomeStructureDataMappingEdit()
|
||||||
|
{
|
||||||
|
|
||||||
|
setLayout(new GridLayout(3,2));
|
||||||
|
|
||||||
|
add(new JLabel("name:")); add(name);
|
||||||
|
add(new JLabel("color:")); add(color);
|
||||||
|
add(new JLabel("collision:")); add(collision);
|
||||||
|
|
||||||
|
name.getDocument().addDocumentListener(new DocumentChangeListener(() -> BiomeStructureDataMappingEdit.this.update()));
|
||||||
|
color.getDocument().addDocumentListener(new DocumentChangeListener(() -> BiomeStructureDataMappingEdit.this.update()));
|
||||||
|
collision.addChangeListener(e -> BiomeStructureDataMappingEdit.this.update());
|
||||||
|
refresh();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void update() {
|
||||||
|
if(currentData==null||updating)
|
||||||
|
return;
|
||||||
|
currentData.name = name.getText();
|
||||||
|
currentData.color = color.getText();
|
||||||
|
currentData.collision = collision.isSelected();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCurrent(BiomeStructureData.BiomeStructureDataMapping data)
|
||||||
|
{
|
||||||
|
currentData=data;
|
||||||
|
refresh();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void refresh() {
|
||||||
|
setEnabled(currentData!=null);
|
||||||
|
if(currentData==null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
updating=true;
|
||||||
|
name.setText(currentData.name);
|
||||||
|
color.setText(currentData.color);
|
||||||
|
collision.setSelected(currentData.collision);
|
||||||
|
updating=false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -7,43 +7,61 @@ import javax.swing.*;
|
|||||||
import javax.swing.event.ChangeEvent;
|
import javax.swing.event.ChangeEvent;
|
||||||
import javax.swing.event.ChangeListener;
|
import javax.swing.event.ChangeListener;
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
|
import java.awt.image.BufferedImage;
|
||||||
|
|
||||||
public class BiomeStructureEdit extends JComponent {
|
public class BiomeStructureEdit extends JComponent {
|
||||||
SwingAtlasPreview preview=new SwingAtlasPreview(128);
|
|
||||||
private boolean updating=false;
|
private boolean updating=false;
|
||||||
BiomeStructureData currentData;
|
BiomeStructureData currentData;
|
||||||
BiomeData currentBiomeData;
|
BiomeData currentBiomeData;
|
||||||
public JTextField structureAtlasPath=new JTextField();
|
public JTextField structureAtlasPath=new JTextField();
|
||||||
public FloatSpinner x= new FloatSpinner();
|
public FloatSpinner x= new FloatSpinner();
|
||||||
public FloatSpinner y= new FloatSpinner();
|
public FloatSpinner y= new FloatSpinner();
|
||||||
public FloatSpinner size= new FloatSpinner();
|
public FloatSpinner width= new FloatSpinner();
|
||||||
|
public FloatSpinner height= new FloatSpinner();
|
||||||
public JCheckBox randomPosition=new JCheckBox();
|
public JCheckBox randomPosition=new JCheckBox();
|
||||||
public JCheckBox collision=new JCheckBox();
|
public IntSpinner N= new IntSpinner();
|
||||||
|
public JTextField sourcePath= new JTextField();
|
||||||
|
public JCheckBox periodicInput= new JCheckBox();
|
||||||
|
public IntSpinner ground= new IntSpinner();
|
||||||
|
public IntSpinner symmetry= new IntSpinner();
|
||||||
|
public JCheckBox periodicOutput= new JCheckBox();
|
||||||
|
public BiomeStructureDataMappingEditor data=new BiomeStructureDataMappingEditor();
|
||||||
public BiomeStructureEdit()
|
public BiomeStructureEdit()
|
||||||
{
|
{
|
||||||
JComponent center=new JComponent() { };
|
JComponent center=new JComponent() { };
|
||||||
center.setLayout(new GridLayout(6,2));
|
center.setLayout(new GridLayout(11,2));
|
||||||
|
|
||||||
center.add(new JLabel("structureAtlasPath:")); center.add(structureAtlasPath);
|
center.add(new JLabel("structureAtlasPath:")); center.add(structureAtlasPath);
|
||||||
center.add(new JLabel("x:")); center.add(x);
|
center.add(new JLabel("x:")); center.add(x);
|
||||||
center.add(new JLabel("y:")); center.add(y);
|
center.add(new JLabel("y:")); center.add(y);
|
||||||
center.add(new JLabel("size:")); center.add(size);
|
center.add(new JLabel("width:")); center.add(width);
|
||||||
center.add(new JLabel("randomPosition:")); center.add(randomPosition);
|
center.add(new JLabel("height:")); center.add(height);
|
||||||
center.add(new JLabel("collision:")); center.add(collision);
|
center.add(new JLabel("N:")); center.add(N);
|
||||||
|
center.add(new JLabel("sourcePath:")); center.add(sourcePath);
|
||||||
|
center.add(new JLabel("periodicInput:")); center.add(periodicInput);
|
||||||
|
center.add(new JLabel("ground:")); center.add(ground);
|
||||||
|
center.add(new JLabel("symmetry:")); center.add(symmetry);
|
||||||
|
center.add(new JLabel("periodicOutput:")); center.add(periodicOutput);
|
||||||
BorderLayout layout=new BorderLayout();
|
BorderLayout layout=new BorderLayout();
|
||||||
setLayout(layout);
|
setLayout(layout);
|
||||||
add(preview,BorderLayout.LINE_START);
|
|
||||||
add(center,BorderLayout.CENTER);
|
add(center,BorderLayout.CENTER);
|
||||||
|
add(data,BorderLayout.SOUTH);
|
||||||
|
|
||||||
structureAtlasPath.getDocument().addDocumentListener(new DocumentChangeListener(() -> BiomeStructureEdit.this.updateStructure()));
|
structureAtlasPath.getDocument().addDocumentListener(new DocumentChangeListener(() -> BiomeStructureEdit.this.updateStructure()));
|
||||||
|
|
||||||
|
|
||||||
x.addChangeListener(e -> BiomeStructureEdit.this.updateStructure());
|
x.addChangeListener(e -> BiomeStructureEdit.this.updateStructure());
|
||||||
y.addChangeListener(e -> BiomeStructureEdit.this.updateStructure());
|
y.addChangeListener(e -> BiomeStructureEdit.this.updateStructure());
|
||||||
size.addChangeListener(e -> BiomeStructureEdit.this.updateStructure());
|
width.addChangeListener(e -> BiomeStructureEdit.this.updateStructure());
|
||||||
|
height.addChangeListener(e -> BiomeStructureEdit.this.updateStructure());
|
||||||
randomPosition.addChangeListener(e -> BiomeStructureEdit.this.updateStructure());
|
randomPosition.addChangeListener(e -> BiomeStructureEdit.this.updateStructure());
|
||||||
collision.addChangeListener(e -> BiomeStructureEdit.this.updateStructure());
|
|
||||||
|
N.addChangeListener(e -> BiomeStructureEdit.this.updateStructure());
|
||||||
|
sourcePath.getDocument().addDocumentListener(new DocumentChangeListener(() -> BiomeStructureEdit.this.updateStructure()));
|
||||||
|
periodicInput.addChangeListener(e -> BiomeStructureEdit.this.updateStructure());
|
||||||
|
ground.addChangeListener(e -> BiomeStructureEdit.this.updateStructure());
|
||||||
|
symmetry.addChangeListener(e -> BiomeStructureEdit.this.updateStructure());
|
||||||
|
periodicOutput.addChangeListener(e -> BiomeStructureEdit.this.updateStructure());
|
||||||
refresh();
|
refresh();
|
||||||
}
|
}
|
||||||
private void refresh() {
|
private void refresh() {
|
||||||
@@ -56,10 +74,17 @@ public class BiomeStructureEdit extends JComponent {
|
|||||||
structureAtlasPath.setText(currentData.structureAtlasPath);
|
structureAtlasPath.setText(currentData.structureAtlasPath);
|
||||||
x.setValue(currentData.x);
|
x.setValue(currentData.x);
|
||||||
y.setValue(currentData.y);
|
y.setValue(currentData.y);
|
||||||
size.setValue(currentData.size);
|
width.setValue(currentData.width);
|
||||||
|
height.setValue(currentData.height);
|
||||||
randomPosition.setSelected(currentData.randomPosition);
|
randomPosition.setSelected(currentData.randomPosition);
|
||||||
collision.setSelected(currentData.collision);
|
N.setValue(currentData.N);
|
||||||
preview.setSpritePath(currentBiomeData.tilesetAtlas,currentData.structureAtlasPath);
|
sourcePath.setText(currentData.sourcePath);
|
||||||
|
periodicInput.setSelected(currentData.periodicInput);
|
||||||
|
ground.setValue(currentData.ground);
|
||||||
|
symmetry.setValue(currentData.symmetry);
|
||||||
|
periodicOutput.setSelected(currentData.periodicOutput);
|
||||||
|
|
||||||
|
data.setCurrent(currentData);
|
||||||
updating=false;
|
updating=false;
|
||||||
}
|
}
|
||||||
public void updateStructure()
|
public void updateStructure()
|
||||||
@@ -71,10 +96,17 @@ public class BiomeStructureEdit extends JComponent {
|
|||||||
|
|
||||||
currentData.x= x.floatValue();
|
currentData.x= x.floatValue();
|
||||||
currentData.y= y.floatValue();
|
currentData.y= y.floatValue();
|
||||||
currentData.size= size.floatValue();
|
currentData.width= width.floatValue();
|
||||||
|
currentData.height= height.floatValue();
|
||||||
currentData.randomPosition=randomPosition.isSelected();
|
currentData.randomPosition=randomPosition.isSelected();
|
||||||
currentData.collision=collision.isSelected();
|
currentData.mappingInfo= data.getCurrent();
|
||||||
preview.setSpritePath(currentBiomeData.tilesetAtlas,currentData.structureAtlasPath);
|
|
||||||
|
currentData.N= N.intValue();
|
||||||
|
currentData.sourcePath= sourcePath.getText();
|
||||||
|
currentData.periodicInput= periodicInput.isSelected();
|
||||||
|
currentData.ground= ground.intValue();
|
||||||
|
currentData.symmetry= symmetry.intValue();
|
||||||
|
currentData.periodicOutput= periodicOutput.isSelected();
|
||||||
emitChanged();
|
emitChanged();
|
||||||
}
|
}
|
||||||
public void setCurrentStructure(BiomeStructureData biomeTerrainData, BiomeData data) {
|
public void setCurrentStructure(BiomeStructureData biomeTerrainData, BiomeData data) {
|
||||||
@@ -95,4 +127,5 @@ public class BiomeStructureEdit extends JComponent {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ public class BiomeTerrainEdit extends JComponent {
|
|||||||
center.add(new JLabel("resolution:")); center.add(resolution);
|
center.add(new JLabel("resolution:")); center.add(resolution);
|
||||||
BorderLayout layout=new BorderLayout();
|
BorderLayout layout=new BorderLayout();
|
||||||
setLayout(layout);
|
setLayout(layout);
|
||||||
add(preview,BorderLayout.LINE_START);
|
add(preview,BorderLayout.WEST);
|
||||||
add(center,BorderLayout.CENTER);
|
add(center,BorderLayout.CENTER);
|
||||||
|
|
||||||
spriteName.getDocument().addDocumentListener(new DocumentChangeListener(() -> BiomeTerrainEdit.this.updateTerrain()));
|
spriteName.getDocument().addDocumentListener(new DocumentChangeListener(() -> BiomeTerrainEdit.this.updateTerrain()));
|
||||||
@@ -52,7 +52,8 @@ public class BiomeTerrainEdit extends JComponent {
|
|||||||
min.setValue(currentData.min);
|
min.setValue(currentData.min);
|
||||||
max.setValue(currentData.max);
|
max.setValue(currentData.max);
|
||||||
resolution.setValue(currentData.resolution);
|
resolution.setValue(currentData.resolution);
|
||||||
preview.setSpritePath(currentBiomeData.tilesetAtlas,currentData.spriteName);
|
if(currentBiomeData!=null&¤tData!= null)
|
||||||
|
preview.setSpritePath(currentBiomeData.tilesetAtlas,currentData.spriteName);
|
||||||
updating=false;
|
updating=false;
|
||||||
}
|
}
|
||||||
public void updateTerrain()
|
public void updateTerrain()
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import java.awt.*;
|
|||||||
* Editor class to edit configuration, maybe moved or removed
|
* Editor class to edit configuration, maybe moved or removed
|
||||||
*/
|
*/
|
||||||
public class EditorMainWindow extends JFrame {
|
public class EditorMainWindow extends JFrame {
|
||||||
|
public final static WorldEditor worldEditor = new WorldEditor();
|
||||||
JTabbedPane tabs =new JTabbedPane();
|
JTabbedPane tabs =new JTabbedPane();
|
||||||
|
|
||||||
public EditorMainWindow()
|
public EditorMainWindow()
|
||||||
@@ -14,7 +15,7 @@ public class EditorMainWindow extends JFrame {
|
|||||||
BorderLayout layout=new BorderLayout();
|
BorderLayout layout=new BorderLayout();
|
||||||
setLayout(layout);
|
setLayout(layout);
|
||||||
add(tabs);
|
add(tabs);
|
||||||
tabs.addTab("World",new WorldEditor());
|
tabs.addTab("World",worldEditor);
|
||||||
tabs.addTab("POI",new PointOfInterestEditor());
|
tabs.addTab("POI",new PointOfInterestEditor());
|
||||||
tabs.addTab("Items",new ItemsEditor());
|
tabs.addTab("Items",new ItemsEditor());
|
||||||
tabs.addTab("Enemies",new EnemyEditor());
|
tabs.addTab("Enemies",new EnemyEditor());
|
||||||
|
|||||||
@@ -2,13 +2,18 @@ package forge.adventure.editor;
|
|||||||
|
|
||||||
import forge.adventure.data.BiomeData;
|
import forge.adventure.data.BiomeData;
|
||||||
import forge.adventure.data.BiomeStructureData;
|
import forge.adventure.data.BiomeStructureData;
|
||||||
import forge.adventure.data.BiomeTerrainData;
|
import forge.adventure.data.WorldData;
|
||||||
|
import forge.adventure.util.Config;
|
||||||
|
import forge.adventure.world.BiomeStructure;
|
||||||
|
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
import javax.swing.event.ChangeEvent;
|
import javax.swing.event.ChangeEvent;
|
||||||
import javax.swing.event.ChangeListener;
|
import javax.swing.event.ChangeListener;
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
import java.awt.event.ActionListener;
|
import java.awt.event.ActionListener;
|
||||||
|
import java.awt.geom.AffineTransform;
|
||||||
|
import java.awt.image.AffineTransformOp;
|
||||||
|
import java.awt.image.BufferedImage;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Editor class to edit configuration, maybe moved or removed
|
* Editor class to edit configuration, maybe moved or removed
|
||||||
@@ -27,14 +32,11 @@ public class StructureEditor extends JComponent{
|
|||||||
JList list, Object value, int index,
|
JList list, Object value, int index,
|
||||||
boolean isSelected, boolean cellHasFocus) {
|
boolean isSelected, boolean cellHasFocus) {
|
||||||
JLabel label = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
|
JLabel label = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
|
||||||
if(!(value instanceof BiomeTerrainData))
|
if(!(value instanceof BiomeStructureData))
|
||||||
return label;
|
return label;
|
||||||
BiomeTerrainData structureData=(BiomeTerrainData) value;
|
BiomeStructureData structureData=(BiomeStructureData) value;
|
||||||
StringBuilder builder=new StringBuilder();
|
label.setText("Structure");
|
||||||
builder.append("Structure");
|
label.setIcon(new ImageIcon(Config.instance().getFilePath(structureData.sourcePath)));
|
||||||
builder.append(" ");
|
|
||||||
builder.append(structureData.spriteName);
|
|
||||||
label.setText(builder.toString());
|
|
||||||
return label;
|
return label;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -54,10 +56,11 @@ public class StructureEditor extends JComponent{
|
|||||||
addButton("add", e -> StructureEditor.this.addStructure());
|
addButton("add", e -> StructureEditor.this.addStructure());
|
||||||
addButton("remove", e -> StructureEditor.this.remove());
|
addButton("remove", e -> StructureEditor.this.remove());
|
||||||
addButton("copy", e -> StructureEditor.this.copy());
|
addButton("copy", e -> StructureEditor.this.copy());
|
||||||
|
addButton("test", e -> StructureEditor.this.test());
|
||||||
BorderLayout layout=new BorderLayout();
|
BorderLayout layout=new BorderLayout();
|
||||||
setLayout(layout);
|
setLayout(layout);
|
||||||
add(list, BorderLayout.LINE_START);
|
add(list, BorderLayout.WEST);
|
||||||
add(toolBar, BorderLayout.PAGE_START);
|
add(toolBar, BorderLayout.NORTH);
|
||||||
add(edit,BorderLayout.CENTER);
|
add(edit,BorderLayout.CENTER);
|
||||||
|
|
||||||
|
|
||||||
@@ -77,6 +80,45 @@ public class StructureEditor extends JComponent{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
private void test() {
|
||||||
|
if (list.isSelectionEmpty())
|
||||||
|
return;
|
||||||
|
BiomeStructureData data = model.get(list.getSelectedIndex());
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
BiomeStructure struct = new BiomeStructure(data, System.currentTimeMillis(),
|
||||||
|
(int) (currentData.width * EditorMainWindow.worldEditor.width.intValue() * data.width),
|
||||||
|
(int) (currentData.width * EditorMainWindow.worldEditor.height.intValue() * data.height));
|
||||||
|
struct.initialize();
|
||||||
|
JLabel label = new JLabel();
|
||||||
|
BufferedImage image = struct.image;
|
||||||
|
if (image.getWidth() < 640 | image.getHeight() < 640) {
|
||||||
|
if (image.getHeight() > image.getWidth()) {
|
||||||
|
BufferedImage nimage = new BufferedImage(640, 640 * (image.getWidth() / image.getHeight()), BufferedImage.TYPE_INT_ARGB);
|
||||||
|
AffineTransform at = new AffineTransform();
|
||||||
|
at.scale(640 / image.getHeight(), 640 / image.getHeight());
|
||||||
|
AffineTransformOp scaleOp = new AffineTransformOp(at, AffineTransformOp.TYPE_NEAREST_NEIGHBOR);
|
||||||
|
image = scaleOp.filter(image, nimage);
|
||||||
|
} else {
|
||||||
|
BufferedImage nimage = new BufferedImage(640 * (image.getHeight() / image.getWidth()), 640, BufferedImage.TYPE_INT_ARGB);
|
||||||
|
AffineTransform at = new AffineTransform();
|
||||||
|
at.scale(640 / image.getWidth(), 640 / image.getWidth());
|
||||||
|
AffineTransformOp scaleOp = new AffineTransformOp(at, AffineTransformOp.TYPE_NEAREST_NEIGHBOR);
|
||||||
|
image = scaleOp.filter(image, nimage);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
label.setIcon(new ImageIcon(image));
|
||||||
|
label.setSize(640, 640);
|
||||||
|
JOptionPane.showMessageDialog(this, label);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
JOptionPane.showMessageDialog(this, "WaveFunctionCollapse was not successful");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
private void copy() {
|
private void copy() {
|
||||||
|
|
||||||
int selected=list.getSelectedIndex();
|
int selected=list.getSelectedIndex();
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import forge.adventure.util.Config;
|
|||||||
import org.apache.commons.lang3.tuple.Pair;
|
import org.apache.commons.lang3.tuple.Pair;
|
||||||
|
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
|
import java.awt.*;
|
||||||
import java.awt.event.ActionEvent;
|
import java.awt.event.ActionEvent;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -40,7 +41,6 @@ public class SwingAtlasPreview extends Box {
|
|||||||
setSpritePath(sprite,null);
|
setSpritePath(sprite,null);
|
||||||
}
|
}
|
||||||
public void setSpritePath(String sprite,String name) {
|
public void setSpritePath(String sprite,String name) {
|
||||||
|
|
||||||
if(this.sprite==null||name==null||sprite==null||(this.sprite.equals(sprite)&&(spriteName==null&&spriteName.equals(name))))
|
if(this.sprite==null||name==null||sprite==null||(this.sprite.equals(sprite)&&(spriteName==null&&spriteName.equals(name))))
|
||||||
return;
|
return;
|
||||||
removeAll();
|
removeAll();
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ import java.awt.*;
|
|||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
|
||||||
public class WorldEditor extends JComponent {
|
public class WorldEditor extends JComponent {
|
||||||
@@ -23,15 +24,15 @@ public class WorldEditor extends JComponent {
|
|||||||
WorldData currentData;
|
WorldData currentData;
|
||||||
|
|
||||||
|
|
||||||
JSpinner width= new JSpinner(new SpinnerNumberModel(0, 0, 100000, 1));
|
IntSpinner width= new IntSpinner( 0, 100000, 1);
|
||||||
JSpinner height= new JSpinner(new SpinnerNumberModel(0, 0, 100000, 1));
|
IntSpinner height= new IntSpinner( 0, 100000, 1);
|
||||||
JSpinner playerStartPosX= new JSpinner(new SpinnerNumberModel(0, 0, 1, .1));
|
FloatSpinner playerStartPosX= new FloatSpinner( 0, 1, .1f);
|
||||||
JSpinner playerStartPosY= new JSpinner(new SpinnerNumberModel(0, 0, 1, .1));
|
FloatSpinner playerStartPosY= new FloatSpinner(0, 1, .1f);
|
||||||
JSpinner noiseZoomBiome= new JSpinner(new SpinnerNumberModel(0, 0, 1000f, 1f));
|
FloatSpinner noiseZoomBiome= new FloatSpinner( 0, 1000f, 1f);
|
||||||
JSpinner tileSize= new JSpinner(new SpinnerNumberModel(0, 0, 100000, 1));
|
IntSpinner tileSize= new IntSpinner( 0, 100000, 1);
|
||||||
|
|
||||||
JTextField biomesSprites = new JTextField();
|
JTextField biomesSprites = new JTextField();
|
||||||
JSpinner maxRoadDistance = new JSpinner(new SpinnerNumberModel(0, 0, 100000f, 1f));
|
FloatSpinner maxRoadDistance = new FloatSpinner( 0, 100000f, 1f);
|
||||||
TextListEdit biomesNames = new TextListEdit();
|
TextListEdit biomesNames = new TextListEdit();
|
||||||
|
|
||||||
DefaultListModel<BiomeData> model = new DefaultListModel<>();
|
DefaultListModel<BiomeData> model = new DefaultListModel<>();
|
||||||
@@ -92,7 +93,7 @@ public class WorldEditor extends JComponent {
|
|||||||
setLayout(layout);
|
setLayout(layout);
|
||||||
add(tabs);
|
add(tabs);
|
||||||
JPanel worldPanel=new JPanel();
|
JPanel worldPanel=new JPanel();
|
||||||
JPanel biomeData=new JPanel();
|
JSplitPane biomeData=new JSplitPane();
|
||||||
tabs.addTab("BiomeData", biomeData);
|
tabs.addTab("BiomeData", biomeData);
|
||||||
tabs.addTab("WorldData", worldPanel);
|
tabs.addTab("WorldData", worldPanel);
|
||||||
|
|
||||||
@@ -116,8 +117,8 @@ public class WorldEditor extends JComponent {
|
|||||||
worldPanel.add(new Box.Filler(new Dimension(0,0),new Dimension(0,Integer.MAX_VALUE),new Dimension(0,Integer.MAX_VALUE)));
|
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)) ;
|
JScrollPane pane = new JScrollPane(edit);
|
||||||
biomeData.add(list); biomeData.add(edit);
|
biomeData.setLeftComponent(list); biomeData.setRightComponent(pane);
|
||||||
|
|
||||||
load();
|
load();
|
||||||
|
|
||||||
@@ -166,6 +167,16 @@ public class WorldEditor extends JComponent {
|
|||||||
|
|
||||||
void save()
|
void save()
|
||||||
{
|
{
|
||||||
|
currentData.width=width.intValue();
|
||||||
|
currentData.height=height.intValue();
|
||||||
|
currentData.playerStartPosX=playerStartPosX.floatValue();
|
||||||
|
currentData.playerStartPosY=playerStartPosY.floatValue();
|
||||||
|
currentData.noiseZoomBiome=noiseZoomBiome.floatValue();
|
||||||
|
currentData.tileSize=tileSize.intValue();
|
||||||
|
currentData.biomesSprites=biomesSprites.getText();
|
||||||
|
currentData.maxRoadDistance=maxRoadDistance.floatValue();
|
||||||
|
currentData.biomesNames= Arrays.asList(biomesNames.getList());
|
||||||
|
|
||||||
Json json = new Json(JsonWriter.OutputType.json);
|
Json json = new Json(JsonWriter.OutputType.json);
|
||||||
FileHandle handle = Config.instance().getFile(Paths.WORLD);
|
FileHandle handle = Config.instance().getFile(Paths.WORLD);
|
||||||
handle.writeString(json.prettyPrint(json.toJson(currentData,Array.class, WorldData.class)),false);
|
handle.writeString(json.prettyPrint(json.toJson(currentData,Array.class, WorldData.class)),false);
|
||||||
@@ -173,6 +184,9 @@ public class WorldEditor extends JComponent {
|
|||||||
}
|
}
|
||||||
void load()
|
void load()
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
model.clear();
|
model.clear();
|
||||||
Json json = new Json();
|
Json json = new Json();
|
||||||
FileHandle handle = Config.instance().getFile(Paths.WORLD);
|
FileHandle handle = Config.instance().getFile(Paths.WORLD);
|
||||||
|
|||||||
@@ -888,6 +888,8 @@ public class Forge implements ApplicationListener {
|
|||||||
//check if sentry is enabled, if not it will call the gui interface but here we end the graphics so we only send it via sentry..
|
//check if sentry is enabled, if not it will call the gui interface but here we end the graphics so we only send it via sentry..
|
||||||
if (BugReporter.isSentryEnabled())
|
if (BugReporter.isSentryEnabled())
|
||||||
BugReporter.reportException(ex);
|
BugReporter.reportException(ex);
|
||||||
|
else
|
||||||
|
ex.printStackTrace();
|
||||||
}
|
}
|
||||||
if (showFPS)
|
if (showFPS)
|
||||||
frameRate.render();
|
frameRate.render();
|
||||||
|
|||||||
@@ -1,34 +1,62 @@
|
|||||||
package forge.adventure.data;
|
package forge.adventure.data;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
|
|
||||||
public class BiomeStructureData {
|
public class BiomeStructureData {
|
||||||
|
|
||||||
|
static public class BiomeStructureDataMapping
|
||||||
|
{
|
||||||
|
public int getColor() {
|
||||||
|
return 0xff000000 |(Integer.parseInt(color,16));
|
||||||
|
}
|
||||||
|
public String name;
|
||||||
|
public String color;
|
||||||
|
public boolean collision;
|
||||||
|
|
||||||
|
public BiomeStructureDataMapping() {
|
||||||
|
|
||||||
|
}
|
||||||
|
public BiomeStructureDataMapping(BiomeStructureDataMapping biomeStructureDataMapping) {
|
||||||
|
this.name=biomeStructureDataMapping.name;
|
||||||
|
this.color=biomeStructureDataMapping.color;
|
||||||
|
this.collision=biomeStructureDataMapping.collision;
|
||||||
|
}
|
||||||
|
}
|
||||||
public int N = 3;
|
public int N = 3;
|
||||||
public float x;
|
public float x;
|
||||||
public float y;
|
public float y;
|
||||||
public float size;
|
|
||||||
public boolean randomPosition;
|
public boolean randomPosition;
|
||||||
public boolean collision;
|
|
||||||
|
|
||||||
public String structureAtlasPath;
|
public String structureAtlasPath;
|
||||||
public boolean periodicInput;
|
public String sourcePath;
|
||||||
|
public boolean periodicInput=true;
|
||||||
public float height;
|
public float height;
|
||||||
public float width;
|
public float width;
|
||||||
public int ground;
|
public int ground;
|
||||||
public int symmetry;
|
public int symmetry=2;
|
||||||
public boolean periodicOutput;
|
public boolean periodicOutput=true;
|
||||||
|
public BiomeStructureDataMapping[] mappingInfo;
|
||||||
|
|
||||||
public BiomeStructureData( )
|
public BiomeStructureData( ) {
|
||||||
{
|
|
||||||
|
|
||||||
}
|
}
|
||||||
public BiomeStructureData(BiomeStructureData biomeStructureData) {
|
public BiomeStructureData(BiomeStructureData biomeStructureData) {
|
||||||
this.structureAtlasPath=biomeStructureData.structureAtlasPath;
|
this.structureAtlasPath=biomeStructureData.structureAtlasPath;
|
||||||
|
this.sourcePath=biomeStructureData.sourcePath;
|
||||||
this.x=biomeStructureData.x;
|
this.x=biomeStructureData.x;
|
||||||
this.y=biomeStructureData.y;
|
this.y=biomeStructureData.y;
|
||||||
this.size=biomeStructureData.size;
|
this.width=biomeStructureData.width;
|
||||||
|
this.height=biomeStructureData.height;
|
||||||
this.randomPosition=biomeStructureData.randomPosition;
|
this.randomPosition=biomeStructureData.randomPosition;
|
||||||
this.collision=biomeStructureData.collision;
|
if(biomeStructureData.mappingInfo!=null)
|
||||||
|
{
|
||||||
|
this.mappingInfo=new BiomeStructureDataMapping[ biomeStructureData.mappingInfo.length];
|
||||||
|
for(int i=0;i<biomeStructureData.mappingInfo.length;i++)
|
||||||
|
this.mappingInfo[i]=new BiomeStructureDataMapping(biomeStructureData.mappingInfo[i]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
this.mappingInfo=null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public BufferedImage sourceImage() {
|
public BufferedImage sourceImage() {
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package forge.adventure.data;
|
|||||||
import com.badlogic.gdx.files.FileHandle;
|
import com.badlogic.gdx.files.FileHandle;
|
||||||
import com.badlogic.gdx.utils.Array;
|
import com.badlogic.gdx.utils.Array;
|
||||||
import com.badlogic.gdx.utils.Json;
|
import com.badlogic.gdx.utils.Json;
|
||||||
|
import com.badlogic.gdx.utils.SerializationException;
|
||||||
import forge.adventure.util.Config;
|
import forge.adventure.util.Config;
|
||||||
import forge.adventure.util.Paths;
|
import forge.adventure.util.Paths;
|
||||||
import forge.adventure.world.BiomeSprites;
|
import forge.adventure.world.BiomeSprites;
|
||||||
@@ -80,10 +81,16 @@ public class WorldData implements Serializable {
|
|||||||
|
|
||||||
public List<BiomeData> GetBiomes() {
|
public List<BiomeData> GetBiomes() {
|
||||||
if (biomes == null) {
|
if (biomes == null) {
|
||||||
biomes = new ArrayList<BiomeData>();
|
try
|
||||||
Json json = new Json();
|
{
|
||||||
for (String name : biomesNames) {
|
biomes = new ArrayList<BiomeData>();
|
||||||
biomes.add(json.fromJson(BiomeData.class, Config.instance().getFile(name)));
|
Json json = new Json();
|
||||||
|
for (String name : biomesNames) {
|
||||||
|
biomes.add(json.fromJson(BiomeData.class, Config.instance().getFile(name)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (SerializationException ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return biomes;
|
return biomes;
|
||||||
|
|||||||
@@ -20,6 +20,8 @@ public class BiomeStructure {
|
|||||||
private int dataMap[][];
|
private int dataMap[][];
|
||||||
boolean init=false;
|
boolean init=false;
|
||||||
private TextureAtlas structureAtlas;
|
private TextureAtlas structureAtlas;
|
||||||
|
public BufferedImage image;
|
||||||
|
|
||||||
public BiomeStructure(BiomeStructureData data,long seed,int width,int height)
|
public BiomeStructure(BiomeStructureData data,long seed,int width,int height)
|
||||||
{
|
{
|
||||||
this.data=data;
|
this.data=data;
|
||||||
@@ -35,59 +37,42 @@ public class BiomeStructure {
|
|||||||
return structureAtlas;
|
return structureAtlas;
|
||||||
}
|
}
|
||||||
public int structureObjectCount() {
|
public int structureObjectCount() {
|
||||||
int count=0;
|
return data.mappingInfo.length;
|
||||||
for(TextureAtlas.AtlasRegion region:atlas ().getRegions())
|
|
||||||
{
|
|
||||||
if(region.name.startsWith("structure"))
|
|
||||||
{
|
|
||||||
count++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return count;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public int objectID(int x, int y) {
|
public int objectID(int x, int y) {
|
||||||
|
|
||||||
if(!init)
|
if(!init)
|
||||||
{
|
{
|
||||||
init=true;
|
|
||||||
initialize();
|
initialize();
|
||||||
}
|
}
|
||||||
if(x>biomeWidth*data.width)
|
if(x>=dataMap.length||x<0||y<0||y>=dataMap[0].length)
|
||||||
return -1;
|
|
||||||
if(y>biomeHeight*data.height)
|
|
||||||
return -1;
|
|
||||||
if(x<biomeWidth*data.x)
|
|
||||||
return -1;
|
|
||||||
if(y<biomeHeight*data.y)
|
|
||||||
return -1;
|
return -1;
|
||||||
return dataMap[x][y];
|
return dataMap[x][y];
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initialize() {
|
public void initialize() {
|
||||||
|
init=true;
|
||||||
OverlappingModel model= new OverlappingModel(sourceImage(),data.N, (int) (data.width* biomeWidth), (int) (data.height*biomeHeight),data.periodicInput,data.periodicOutput,data.symmetry,data.ground);
|
OverlappingModel model= new OverlappingModel(sourceImage(),data.N, (int) (data.width* biomeWidth), (int) (data.height*biomeHeight),data.periodicInput,data.periodicOutput,data.symmetry,data.ground);
|
||||||
HashMap<Integer,Integer> colorIdMap=new HashMap<>();
|
HashMap<Integer,Integer> colorIdMap=new HashMap<>();
|
||||||
int counter=0;
|
for(int i=0;i<data.mappingInfo.length;i++)
|
||||||
for(TextureAtlas.AtlasRegion region:atlas ().getRegions())
|
|
||||||
{
|
{
|
||||||
if(region.name.startsWith("structure"))
|
colorIdMap.put(Integer.parseInt(data.mappingInfo[i].color,16),i);
|
||||||
{
|
|
||||||
String[] split= region.name.split("_");
|
|
||||||
if(split.length<2)
|
|
||||||
continue;
|
|
||||||
int rgb=Integer.parseInt(split[1],16);
|
|
||||||
colorIdMap.put(rgb,counter);
|
|
||||||
counter++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
BufferedImage image=model.graphics();
|
boolean suc=model.run((int) seed,0);
|
||||||
|
if(!suc)
|
||||||
|
{
|
||||||
|
dataMap=new int[(int) (data.width* biomeWidth)][ (int) (data.height*biomeHeight)];
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
image=model.graphics();
|
||||||
dataMap=new int[image.getWidth()][image.getHeight()];
|
dataMap=new int[image.getWidth()][image.getHeight()];
|
||||||
for(int x=0;x<image.getWidth();x++)
|
for(int x=0;x<image.getWidth();x++)
|
||||||
{
|
{
|
||||||
|
|
||||||
for(int y=0;y<image.getHeight();y++)
|
for(int y=0;y<image.getHeight();y++)
|
||||||
{
|
{
|
||||||
int rgb=image.getRGB(x,y);
|
int rgb=image.getRGB(x,y) & 0xffffff;
|
||||||
if(!colorIdMap.containsKey(rgb))
|
if(!colorIdMap.containsKey(rgb))
|
||||||
{
|
{
|
||||||
dataMap[x][y]=-1;
|
dataMap[x][y]=-1;
|
||||||
@@ -101,14 +86,24 @@ public class BiomeStructure {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private BufferedImage sourceImage() {
|
private BufferedImage sourceImage() {
|
||||||
TextureAtlas.AtlasRegion region=atlas().findRegion("Source");
|
|
||||||
if(region==null)
|
|
||||||
return null;
|
|
||||||
try {
|
try {
|
||||||
return ImageIO.read(new File(Config.instance().getFilePath(data.structureAtlasPath))).getSubimage((int) region.offsetX, (int) region.offsetY,region.originalWidth,region.originalHeight);
|
return ImageIO.read(new File(Config.instance().getFilePath(data.sourcePath)));
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int x() {
|
||||||
|
return (int) ((data.x*biomeWidth)-(data.width*biomeWidth)/2);
|
||||||
|
}
|
||||||
|
public int y() {
|
||||||
|
return (int) ((data.y*biomeHeight)-(data.height*biomeHeight)/2);
|
||||||
|
}
|
||||||
|
|
||||||
|
public BiomeStructureData.BiomeStructureDataMapping[] mapping() {
|
||||||
|
return data.mappingInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -95,13 +95,12 @@ public class BiomeTexture implements Serializable {
|
|||||||
for(BiomeStructureData structureData:data.structures)
|
for(BiomeStructureData structureData:data.structures)
|
||||||
{
|
{
|
||||||
BiomeStructure structure=new BiomeStructure(structureData,0,0,0);
|
BiomeStructure structure=new BiomeStructure(structureData,0,0,0);
|
||||||
for(TextureAtlas.AtlasRegion region:structure.atlas ().getRegions())
|
TextureAtlas atlas=structure.atlas ();
|
||||||
|
for(BiomeStructureData.BiomeStructureDataMapping mapping:structure.mapping())
|
||||||
{
|
{
|
||||||
if(region.name.startsWith("structure"))
|
|
||||||
{
|
regions.add(atlas.findRegion(mapping.name));
|
||||||
regions.add(region);
|
source.add(atlas);
|
||||||
source.add(structure.atlas());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -327,9 +327,15 @@ public class World implements Disposable, SaveFileContent {
|
|||||||
structureDataMap.put(data,new BiomeStructure(data,seed,biomeWidth,biomeHeight));
|
structureDataMap.put(data,new BiomeStructure(data,seed,biomeWidth,biomeHeight));
|
||||||
}
|
}
|
||||||
structure=structureDataMap.get(data);
|
structure=structureDataMap.get(data);
|
||||||
int structureIndex=structure.objectID(x-biomeXStart,y-biomeYStart);
|
int structureXStart= structure.x()+beginX;
|
||||||
|
int structureYStart= structure.y()+beginY;
|
||||||
|
int structureIndex=structure.objectID(x-structureXStart,y-structureYStart);
|
||||||
if(structureIndex>=0)
|
if(structureIndex>=0)
|
||||||
|
{
|
||||||
|
pix.setColor(data.mappingInfo[structureIndex].getColor());
|
||||||
|
pix.drawPixel(x, y);
|
||||||
terrainMap[x][y]=terrainCounter+structureIndex;
|
terrainMap[x][y]=terrainCounter+structureIndex;
|
||||||
|
}
|
||||||
|
|
||||||
terrainCounter+=structure.structureObjectCount();
|
terrainCounter+=structure.structureObjectCount();
|
||||||
}
|
}
|
||||||
@@ -395,6 +401,9 @@ public class World implements Disposable, SaveFileContent {
|
|||||||
foundSolution=true;
|
foundSolution=true;
|
||||||
x=x+xi*data.tileSize;
|
x=x+xi*data.tileSize;
|
||||||
y=y+yi*data.tileSize;
|
y=y+yi*data.tileSize;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -67,6 +67,12 @@
|
|||||||
<version>5.2.2</version>
|
<version>5.2.2</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.github.jetopto1.cling</groupId>
|
||||||
|
<artifactId>cling-core</artifactId>
|
||||||
|
<version>1.0.0</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
|
|||||||
@@ -21,10 +21,18 @@
|
|||||||
],
|
],
|
||||||
"structures":[
|
"structures":[
|
||||||
{
|
{
|
||||||
"structureAtlasPath":"world/tilesets/forest.atlas",
|
"sourcePath" : "world/tilesets/forestSource.png",
|
||||||
|
"structureAtlasPath":"world/tilesets/structures.atlas",
|
||||||
|
"mappingInfo":[
|
||||||
|
{
|
||||||
|
"name":"Forest",
|
||||||
|
"color":"007000"
|
||||||
|
}
|
||||||
|
],
|
||||||
"x": 0.5,
|
"x": 0.5,
|
||||||
"y": 0.5,
|
"y": 0.5,
|
||||||
"size": 0.3
|
"width": 0.3 ,
|
||||||
|
"height": 0.3
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"width": 0.7,
|
"width": 0.7,
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 16 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 8.7 KiB |
@@ -1,19 +1,12 @@
|
|||||||
|
|
||||||
forest.png
|
structures.png
|
||||||
size: 96,64
|
size: 96,64
|
||||||
format: RGBA8888
|
format: RGBA8888
|
||||||
filter: Nearest,Nearest
|
filter: Nearest,Nearest
|
||||||
repeat: none
|
repeat: none
|
||||||
Source
|
Forest
|
||||||
rotate: false
|
rotate: false
|
||||||
xy: 0, 0
|
xy: 0, 0
|
||||||
size: 16, 16
|
|
||||||
orig: 0, 0
|
|
||||||
offset: 0, 0
|
|
||||||
index: 0
|
|
||||||
structure_000000
|
|
||||||
rotate: false
|
|
||||||
xy: 48, 0
|
|
||||||
size: 48, 64
|
size: 48, 64
|
||||||
orig: 0, 0
|
orig: 0, 0
|
||||||
offset: 0, 0
|
offset: 0, 0
|
||||||
BIN
forge-gui/res/adventure/Shandalar/world/tilesets/structures.png
Normal file
BIN
forge-gui/res/adventure/Shandalar/world/tilesets/structures.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 10 KiB |
Reference in New Issue
Block a user