Ajouté quelques choses pour l'éditeur
This commit is contained in:
parent
5360aaefe9
commit
d1905acb8e
|
@ -0,0 +1,48 @@
|
||||||
|
package galaxyoyo.unknown.api.editor;
|
||||||
|
|
||||||
|
import galaxyoyo.unknown.api.editor.sprites.Sprite;
|
||||||
|
|
||||||
|
public class Case
|
||||||
|
{
|
||||||
|
private int x;
|
||||||
|
private int y;
|
||||||
|
private Sprite couche1;
|
||||||
|
private Sprite couche2;
|
||||||
|
private Sprite couche3;
|
||||||
|
|
||||||
|
public int getPosX()
|
||||||
|
{
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getPosY()
|
||||||
|
{
|
||||||
|
return y;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Sprite getCoucheOne()
|
||||||
|
{
|
||||||
|
return couche1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Sprite getCoucheTwo()
|
||||||
|
{
|
||||||
|
return couche2;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Sprite getCoucheThree()
|
||||||
|
{
|
||||||
|
return couche3;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Case create(int posX, int posY, Sprite couche1, Sprite couche2, Sprite couche3)
|
||||||
|
{
|
||||||
|
Case c = new Case();
|
||||||
|
c.x = posX;
|
||||||
|
c.y = posY;
|
||||||
|
c.couche1 = couche1;
|
||||||
|
c.couche2 = couche2;
|
||||||
|
c.couche3 = couche3;
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,12 +1,12 @@
|
||||||
package galaxyoyo.unknown.api.editor;
|
package galaxyoyo.unknown.api.editor;
|
||||||
|
|
||||||
import galaxyoyo.unknown.editor.Editor;
|
import galaxyoyo.unknown.editor.Map;
|
||||||
|
|
||||||
import java.io.BufferedInputStream;
|
import java.io.BufferedReader;
|
||||||
import java.io.BufferedOutputStream;
|
import java.io.BufferedWriter;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileInputStream;
|
import java.io.FileReader;
|
||||||
import java.io.FileOutputStream;
|
import java.io.FileWriter;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -14,29 +14,38 @@ import java.util.List;
|
||||||
import javax.swing.JFileChooser;
|
import javax.swing.JFileChooser;
|
||||||
import javax.swing.filechooser.FileNameExtensionFilter;
|
import javax.swing.filechooser.FileNameExtensionFilter;
|
||||||
|
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
import com.google.gson.GsonBuilder;
|
||||||
|
|
||||||
public class EditorAPI
|
public class EditorAPI
|
||||||
{
|
{
|
||||||
public static Byte[] toBytes(int width, int height)
|
public static RawMap toRawMap(int width, int height)
|
||||||
{
|
{
|
||||||
List<Byte> bytes = new ArrayList<Byte>();
|
List<RawCase> cases = new ArrayList<RawCase>();
|
||||||
|
|
||||||
for (int y = 1; y < height; y += 16)
|
for (int y = 1; y < height; y += 16)
|
||||||
{
|
{
|
||||||
for (int x = 1; x < width; x += 16)
|
for (int x = 1; x < width; x += 16)
|
||||||
{
|
{
|
||||||
bytes.add((byte) 0);
|
RawCase c = RawCase.create(x / 16, y / 16, RawSprite.BLANK, RawSprite.BLANK, RawSprite.BLANK);
|
||||||
bytes.add((byte) 0);
|
cases.add(c);
|
||||||
bytes.add((byte) (Byte.MIN_VALUE / 2));
|
|
||||||
}
|
}
|
||||||
bytes.remove(bytes.lastIndexOf((byte) (Byte.MIN_VALUE / 2)));
|
|
||||||
bytes.add(Byte.MIN_VALUE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bytes.remove(bytes.lastIndexOf(Byte.MIN_VALUE));
|
return RawMap.create(cases);
|
||||||
|
|
||||||
return bytes.toArray(new Byte[0]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static Gson createGson()
|
||||||
|
{
|
||||||
|
GsonBuilder builder = new GsonBuilder();
|
||||||
|
|
||||||
|
builder.enableComplexMapKeySerialization();
|
||||||
|
builder.serializeNulls();
|
||||||
|
builder.setPrettyPrinting();
|
||||||
|
|
||||||
|
return builder.create();
|
||||||
|
}
|
||||||
|
|
||||||
public static JFileChooser createJFC()
|
public static JFileChooser createJFC()
|
||||||
{
|
{
|
||||||
JFileChooser jfc = new JFileChooser();
|
JFileChooser jfc = new JFileChooser();
|
||||||
|
@ -51,7 +60,7 @@ public class EditorAPI
|
||||||
return jfc;
|
return jfc;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void saveAs(byte ... bytes)
|
public static void saveAs(RawMap map)
|
||||||
{
|
{
|
||||||
JFileChooser jfc = createJFC();
|
JFileChooser jfc = createJFC();
|
||||||
File file = null;
|
File file = null;
|
||||||
|
@ -66,16 +75,32 @@ public class EditorAPI
|
||||||
file = new File(file.getParentFile(), file.getName() + ".gworld");
|
file = new File(file.getParentFile(), file.getName() + ".gworld");
|
||||||
}
|
}
|
||||||
|
|
||||||
save(file, bytes);
|
save(file, map);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void save(File file, byte ... bytes)
|
public static void save(File file, RawMap map)
|
||||||
{
|
{
|
||||||
|
String json = createGson().toJson(map);
|
||||||
|
String crypted = "";
|
||||||
|
|
||||||
|
for (char c : json.toCharArray())
|
||||||
|
{
|
||||||
|
char ch = c;
|
||||||
|
|
||||||
|
if (c != '\n')
|
||||||
|
{
|
||||||
|
ch = (char) (c * 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
crypted += ch;
|
||||||
|
}
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file));
|
file.createNewFile();
|
||||||
bos.write(bytes);
|
BufferedWriter bw = new BufferedWriter(new FileWriter(file));
|
||||||
bos.close();
|
bw.write(crypted);
|
||||||
|
bw.close();
|
||||||
}
|
}
|
||||||
catch (IOException ex)
|
catch (IOException ex)
|
||||||
{
|
{
|
||||||
|
@ -83,7 +108,7 @@ public class EditorAPI
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Editor open()
|
public static Map open()
|
||||||
{
|
{
|
||||||
JFileChooser jfc = createJFC();
|
JFileChooser jfc = createJFC();
|
||||||
File file = null;
|
File file = null;
|
||||||
|
@ -98,30 +123,46 @@ public class EditorAPI
|
||||||
return open(file);
|
return open(file);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Editor open(File f)
|
public static Map open(File f)
|
||||||
{
|
{
|
||||||
byte[] bytes = null;
|
String json = null;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(f));
|
BufferedReader br = new BufferedReader(new FileReader(f));
|
||||||
bytes = new byte[(int) f.length()];
|
String text = "";
|
||||||
while (bis.read(bytes) != -1);
|
String ln;
|
||||||
for (byte b : bytes)
|
while ((ln = br.readLine()) != null)
|
||||||
{
|
{
|
||||||
System.err.println(b);
|
text += ln + "\n";
|
||||||
|
}
|
||||||
|
br.close();
|
||||||
|
|
||||||
|
json = "";
|
||||||
|
|
||||||
|
for (char c : text.toCharArray())
|
||||||
|
{
|
||||||
|
char ch = c;
|
||||||
|
|
||||||
|
if (c != '\n')
|
||||||
|
{
|
||||||
|
ch = (char) (c / 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
json += ch;
|
||||||
}
|
}
|
||||||
bis.close();
|
|
||||||
}
|
}
|
||||||
catch (IOException e)
|
catch (IOException e)
|
||||||
{
|
{
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|
||||||
return open(bytes);
|
RawMap rm = createGson().fromJson(json, RawMap.class);
|
||||||
|
|
||||||
|
return open(rm);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Editor open(byte[] bytes)
|
public static Map open(RawMap map)
|
||||||
{
|
{
|
||||||
return new Editor(bytes);
|
return new Map(map);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,46 @@
|
||||||
|
package galaxyoyo.unknown.api.editor;
|
||||||
|
|
||||||
|
public class RawCase
|
||||||
|
{
|
||||||
|
private int x;
|
||||||
|
private int y;
|
||||||
|
private RawSprite couche1;
|
||||||
|
private RawSprite couche2;
|
||||||
|
private RawSprite couche3;
|
||||||
|
|
||||||
|
public int getPosX()
|
||||||
|
{
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getPosY()
|
||||||
|
{
|
||||||
|
return y;
|
||||||
|
}
|
||||||
|
|
||||||
|
public RawSprite getCoucheOne()
|
||||||
|
{
|
||||||
|
return couche1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public RawSprite getCoucheTwo()
|
||||||
|
{
|
||||||
|
return couche2;
|
||||||
|
}
|
||||||
|
|
||||||
|
public RawSprite getCoucheThree()
|
||||||
|
{
|
||||||
|
return couche3;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static RawCase create(int posX, int posY, RawSprite couche1, RawSprite couche2, RawSprite couche3)
|
||||||
|
{
|
||||||
|
RawCase c = new RawCase();
|
||||||
|
c.x = posX;
|
||||||
|
c.y = posY;
|
||||||
|
c.couche1 = couche1;
|
||||||
|
c.couche2 = couche2;
|
||||||
|
c.couche3 = couche3;
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,20 @@
|
||||||
|
package galaxyoyo.unknown.api.editor;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class RawMap
|
||||||
|
{
|
||||||
|
private List<RawCase> cases;
|
||||||
|
|
||||||
|
public List<RawCase> getCases()
|
||||||
|
{
|
||||||
|
return cases;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static RawMap create(List<RawCase> cases)
|
||||||
|
{
|
||||||
|
RawMap rm = new RawMap();
|
||||||
|
rm.cases = cases;
|
||||||
|
return rm;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,22 @@
|
||||||
|
package galaxyoyo.unknown.api.editor;
|
||||||
|
|
||||||
|
import com.google.gson.annotations.Expose;
|
||||||
|
|
||||||
|
public class RawSprite
|
||||||
|
{
|
||||||
|
private int primaryIndex = 0;
|
||||||
|
private int secondaryIndex = 0;
|
||||||
|
|
||||||
|
@Expose(serialize = false, deserialize = false)
|
||||||
|
public static final RawSprite BLANK = new RawSprite();
|
||||||
|
|
||||||
|
public int getPrimaryIndex()
|
||||||
|
{
|
||||||
|
return primaryIndex;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getSecondaryIndex()
|
||||||
|
{
|
||||||
|
return secondaryIndex;
|
||||||
|
}
|
||||||
|
}
|
|
@ -4,6 +4,8 @@ import java.awt.image.BufferedImage;
|
||||||
|
|
||||||
public class Sprite
|
public class Sprite
|
||||||
{
|
{
|
||||||
|
public static final Sprite BLANK = new Sprite(new BufferedImage(16, 16, BufferedImage.TYPE_INT_RGB));
|
||||||
|
|
||||||
private final BufferedImage img;
|
private final BufferedImage img;
|
||||||
|
|
||||||
public Sprite(BufferedImage img)
|
public Sprite(BufferedImage img)
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
package galaxyoyo.unknown.client.main;
|
package galaxyoyo.unknown.client.main;
|
||||||
|
|
||||||
import galaxyoyo.unknown.api.editor.EditorAPI;
|
import galaxyoyo.unknown.api.editor.EditorAPI;
|
||||||
|
import galaxyoyo.unknown.api.editor.RawMap;
|
||||||
import galaxyoyo.unknown.api.editor.sprites.SpriteRegister;
|
import galaxyoyo.unknown.api.editor.sprites.SpriteRegister;
|
||||||
import galaxyoyo.unknown.frame.MainFrame;
|
import galaxyoyo.unknown.frame.MainFrame;
|
||||||
|
|
||||||
|
@ -68,8 +69,6 @@ public class Main
|
||||||
LOGGER.addAppender(file);
|
LOGGER.addAppender(file);
|
||||||
LOGGER.setLevel(Level.INFO);
|
LOGGER.setLevel(Level.INFO);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
OptionParser parser = new OptionParser();
|
OptionParser parser = new OptionParser();
|
||||||
|
|
||||||
OptionSpec<String> edit = parser.accepts("edit", "Lancer l'\u00e9diteur de monde").withOptionalArg();
|
OptionSpec<String> edit = parser.accepts("edit", "Lancer l'\u00e9diteur de monde").withOptionalArg();
|
||||||
|
@ -188,18 +187,11 @@ public class Main
|
||||||
g.drawLine(0, y, width, y);
|
g.drawLine(0, y, width, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
Byte[] Bytes = EditorAPI.toBytes(baseWidth, baseHeight);
|
RawMap rm = EditorAPI.toRawMap(baseWidth, baseHeight);
|
||||||
|
|
||||||
byte[] bytes = new byte[Bytes.length];
|
EditorAPI.saveAs(rm);
|
||||||
|
|
||||||
for (int i = 0; i < Bytes.length; ++i)
|
EditorAPI.open(rm);
|
||||||
{
|
|
||||||
bytes[i] = Bytes[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
EditorAPI.saveAs(bytes);
|
|
||||||
|
|
||||||
EditorAPI.open(bytes);
|
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,41 +0,0 @@
|
||||||
package galaxyoyo.unknown.editor;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import galaxyoyo.unknown.api.editor.sprites.Sprite;
|
|
||||||
|
|
||||||
public class Editor
|
|
||||||
{
|
|
||||||
private final EditorFrame frame;
|
|
||||||
private byte[] bytes;
|
|
||||||
private List<List<Sprite>> sprites = new ArrayList<List<Sprite>>();
|
|
||||||
|
|
||||||
public Editor(byte[] bytes)
|
|
||||||
{
|
|
||||||
frame = new EditorFrame(this);
|
|
||||||
this.bytes = bytes;
|
|
||||||
|
|
||||||
getFrame().setVisible(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
public EditorFrame getFrame()
|
|
||||||
{
|
|
||||||
return frame;
|
|
||||||
}
|
|
||||||
|
|
||||||
public byte[] getBytes()
|
|
||||||
{
|
|
||||||
return bytes;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setBytes(byte[] bytes)
|
|
||||||
{
|
|
||||||
this.bytes = bytes;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Sprite getSprite(int x, int y)
|
|
||||||
{
|
|
||||||
return sprites.get(x).get(y);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,16 +1,70 @@
|
||||||
package galaxyoyo.unknown.editor;
|
package galaxyoyo.unknown.editor;
|
||||||
|
|
||||||
|
import java.awt.GridBagConstraints;
|
||||||
|
import java.awt.GridBagLayout;
|
||||||
|
|
||||||
import javax.swing.JFrame;
|
import javax.swing.JFrame;
|
||||||
|
import javax.swing.JPanel;
|
||||||
|
import javax.swing.JTabbedPane;
|
||||||
|
|
||||||
public class EditorFrame extends JFrame
|
public class EditorFrame extends JFrame
|
||||||
{
|
{
|
||||||
private static final long serialVersionUID = -2705122356101556462L;
|
private static final long serialVersionUID = -2705122356101556462L;
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
private final Editor editor;
|
private final Map map;
|
||||||
|
|
||||||
|
private final JPanel content = new JPanel();
|
||||||
|
|
||||||
|
private final JTabbedPane tabs = new JTabbedPane(JTabbedPane.BOTTOM);
|
||||||
|
private final JPanel tabEvents = new JPanel();
|
||||||
|
private final JPanel tabColl = new JPanel();
|
||||||
|
private final JPanel mapPanel = new JPanel();
|
||||||
|
private final JTabbedPane resources = new JTabbedPane();
|
||||||
|
private final JPanel couche1 = new JPanel();
|
||||||
|
private final JPanel couche2 = new JPanel();
|
||||||
|
private final JPanel couche3 = new JPanel();
|
||||||
|
|
||||||
public EditorFrame(Editor editor)
|
public EditorFrame(Map map)
|
||||||
{
|
{
|
||||||
this.editor = editor;
|
this.map = map;
|
||||||
|
this.setSize(600, 600);
|
||||||
|
this.setPreferredSize(getSize());
|
||||||
|
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
|
||||||
|
this.setExtendedState(JFrame.MAXIMIZED_BOTH);
|
||||||
|
this.setLocationRelativeTo(null);
|
||||||
|
this.setLayout(new GridBagLayout());
|
||||||
|
this.setContentPane(content);
|
||||||
|
|
||||||
|
GridBagConstraints c = new GridBagConstraints();
|
||||||
|
|
||||||
|
c.gridx = 0;
|
||||||
|
c.gridy = 0;
|
||||||
|
c.gridwidth = 3;
|
||||||
|
c.gridheight = 1;
|
||||||
|
|
||||||
|
tabs.addTab("Carte", new JPanel());
|
||||||
|
tabs.addTab("\u00c9vennements", tabEvents);
|
||||||
|
tabs.addTab("Collisions", tabColl);
|
||||||
|
|
||||||
|
content.add(tabs, c);
|
||||||
|
|
||||||
|
c.gridx = 0;
|
||||||
|
c.gridy = 1;
|
||||||
|
c.gridwidth = 2;
|
||||||
|
c.gridheight = 3;
|
||||||
|
|
||||||
|
content.add(mapPanel);
|
||||||
|
|
||||||
|
resources.addTab("1", couche1);
|
||||||
|
resources.addTab("2", couche2);
|
||||||
|
resources.addTab("3", couche3);
|
||||||
|
|
||||||
|
c.gridx = 2;
|
||||||
|
c.gridy = 1;
|
||||||
|
c.gridwidth = 1;
|
||||||
|
c.gridheight = 3;
|
||||||
|
|
||||||
|
content.add(resources);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,53 @@
|
||||||
|
package galaxyoyo.unknown.editor;
|
||||||
|
|
||||||
|
import galaxyoyo.unknown.api.editor.Case;
|
||||||
|
import galaxyoyo.unknown.api.editor.RawCase;
|
||||||
|
import galaxyoyo.unknown.api.editor.RawMap;
|
||||||
|
import galaxyoyo.unknown.api.editor.sprites.SpriteRegister;
|
||||||
|
|
||||||
|
import java.awt.Point;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class Map
|
||||||
|
{
|
||||||
|
private final EditorFrame frame;
|
||||||
|
private List<Case> cases = new ArrayList<Case>();
|
||||||
|
private java.util.Map<Point, Case> casesMap = new HashMap<Point, Case>();
|
||||||
|
|
||||||
|
public Map(RawMap raw)
|
||||||
|
{
|
||||||
|
for (RawCase rc : raw.getCases())
|
||||||
|
{
|
||||||
|
cases.add(Case.create(rc.getPosX(), rc.getPosY(), SpriteRegister.getCategory(rc.getCoucheOne().getPrimaryIndex()).get(rc.getCoucheOne().getSecondaryIndex()), SpriteRegister.getCategory(rc.getCoucheTwo().getPrimaryIndex()).get(rc.getCoucheTwo().getSecondaryIndex()), SpriteRegister.getCategory(rc.getCoucheThree().getPrimaryIndex()).get(rc.getCoucheThree().getSecondaryIndex())));
|
||||||
|
}
|
||||||
|
|
||||||
|
frame = new EditorFrame(this);
|
||||||
|
|
||||||
|
getFrame().setVisible(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public EditorFrame getFrame()
|
||||||
|
{
|
||||||
|
return frame;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Case getCase(int x, int y)
|
||||||
|
{
|
||||||
|
if (casesMap.isEmpty())
|
||||||
|
{
|
||||||
|
reorganizeMap();
|
||||||
|
}
|
||||||
|
|
||||||
|
return casesMap.get(new Point(x, y));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void reorganizeMap()
|
||||||
|
{
|
||||||
|
for (Case c : cases)
|
||||||
|
{
|
||||||
|
casesMap.put(new Point(c.getPosX() - c.getPosX() % 16, c.getPosY() - c.getPosY() % 16), c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue