[BIG UPDATE] Terminée fenêtre d'édition de carte
This commit is contained in:
parent
64f4875705
commit
543d12ff2e
|
@ -12,5 +12,6 @@
|
||||||
hs_err_pid*
|
hs_err_pid*
|
||||||
/target/
|
/target/
|
||||||
*.log
|
*.log
|
||||||
*.png
|
img.png
|
||||||
|
image.png
|
||||||
/maps/
|
/maps/
|
||||||
|
|
|
@ -52,4 +52,10 @@ public class Case
|
||||||
c.collision = collision;
|
c.collision = collision;
|
||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString()
|
||||||
|
{
|
||||||
|
return "{Case x=" + x + " y=" + y + " couche1=" + couche1 + " couche2=" + couche2 + " couche3=" + couche3 + " collision=" + collision.name().toUpperCase() + "}\n";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,6 +22,8 @@ import com.google.gson.GsonBuilder;
|
||||||
|
|
||||||
public class EditorAPI
|
public class EditorAPI
|
||||||
{
|
{
|
||||||
|
private static File LAST_FILE;
|
||||||
|
|
||||||
public static RawMap toRawMap(int width, int height)
|
public static RawMap toRawMap(int width, int height)
|
||||||
{
|
{
|
||||||
List<RawCase> cases = new ArrayList<RawCase>();
|
List<RawCase> cases = new ArrayList<RawCase>();
|
||||||
|
@ -38,7 +40,7 @@ public class EditorAPI
|
||||||
return RawMap.create(cases, width, height);
|
return RawMap.create(cases, width, height);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Gson createGson()
|
public static Gson createGson()
|
||||||
{
|
{
|
||||||
GsonBuilder builder = new GsonBuilder();
|
GsonBuilder builder = new GsonBuilder();
|
||||||
|
|
||||||
|
@ -66,20 +68,30 @@ public class EditorAPI
|
||||||
{
|
{
|
||||||
JFileChooser jfc = createJFC();
|
JFileChooser jfc = createJFC();
|
||||||
File file = null;
|
File file = null;
|
||||||
while (file == null)
|
|
||||||
{
|
|
||||||
jfc.showSaveDialog(null);
|
jfc.showSaveDialog(null);
|
||||||
file = jfc.getSelectedFile();
|
file = jfc.getSelectedFile();
|
||||||
}
|
|
||||||
|
if (file == null)
|
||||||
|
return;
|
||||||
|
|
||||||
if (!file.getName().toLowerCase().endsWith(".gmap") && !file.getName().toLowerCase().endsWith(".dat"))
|
if (!file.getName().toLowerCase().endsWith(".gmap") && !file.getName().toLowerCase().endsWith(".dat"))
|
||||||
{
|
{
|
||||||
file = new File(file.getParentFile(), file.getName() + ".gmap");
|
file = new File(file.getParentFile(), file.getName() + ".gmap");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LAST_FILE = file;
|
||||||
|
|
||||||
save(file, map);
|
save(file, map);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void save(RawMap map)
|
||||||
|
{
|
||||||
|
if (LAST_FILE != null)
|
||||||
|
save(LAST_FILE, map);
|
||||||
|
else
|
||||||
|
saveAs(map);
|
||||||
|
}
|
||||||
|
|
||||||
public static void save(File file, RawMap map)
|
public static void save(File file, RawMap map)
|
||||||
{
|
{
|
||||||
String json = createGson().toJson(map);
|
String json = createGson().toJson(map);
|
||||||
|
@ -111,11 +123,13 @@ public class EditorAPI
|
||||||
JFileChooser jfc = createJFC();
|
JFileChooser jfc = createJFC();
|
||||||
File file = null;
|
File file = null;
|
||||||
|
|
||||||
while (file == null)
|
|
||||||
{
|
|
||||||
jfc.showOpenDialog(null);
|
jfc.showOpenDialog(null);
|
||||||
file = jfc.getSelectedFile();
|
file = jfc.getSelectedFile();
|
||||||
}
|
|
||||||
|
if (file == null)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
LAST_FILE = file;
|
||||||
|
|
||||||
return open(file);
|
return open(file);
|
||||||
}
|
}
|
||||||
|
@ -181,6 +195,8 @@ public class EditorAPI
|
||||||
{
|
{
|
||||||
g.drawLine(0, y, width, y);
|
g.drawLine(0, y, width, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
map.setFont(image);
|
||||||
}
|
}
|
||||||
|
|
||||||
return new Map(map);
|
return new Map(map);
|
||||||
|
|
|
@ -50,4 +50,16 @@ public class RawCase
|
||||||
c.collision = collision;;
|
c.collision = collision;;
|
||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static RawCase create(Case c)
|
||||||
|
{
|
||||||
|
RawCase raw = new RawCase();
|
||||||
|
raw.x = c.getPosX();
|
||||||
|
raw.y = c.getPosY();
|
||||||
|
raw.couche1 = RawSprite.create(c.getCoucheOne());
|
||||||
|
raw.couche2 = RawSprite.create(c.getCoucheTwo());
|
||||||
|
raw.couche3 = RawSprite.create(c.getCoucheThree());
|
||||||
|
raw.collision = c.getCollision();
|
||||||
|
return raw;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,9 @@
|
||||||
package galaxyoyo.unknown.api.editor;
|
package galaxyoyo.unknown.api.editor;
|
||||||
|
|
||||||
|
import galaxyoyo.unknown.editor.Map;
|
||||||
|
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class RawMap
|
public class RawMap
|
||||||
|
@ -43,4 +46,18 @@ public class RawMap
|
||||||
{
|
{
|
||||||
this.font = font;
|
this.font = font;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static RawMap create(Map map)
|
||||||
|
{
|
||||||
|
RawMap raw = new RawMap();
|
||||||
|
raw.width = map.getWidth();
|
||||||
|
raw.height = map.getHeight();
|
||||||
|
raw.cases = new ArrayList<RawCase>();
|
||||||
|
for (Case c : map.getAllCases())
|
||||||
|
{
|
||||||
|
RawCase rc = RawCase.create(c);
|
||||||
|
raw.cases.add(rc);
|
||||||
|
}
|
||||||
|
return raw;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,22 +1,29 @@
|
||||||
package galaxyoyo.unknown.api.editor;
|
package galaxyoyo.unknown.api.editor;
|
||||||
|
|
||||||
import com.google.gson.annotations.Expose;
|
import galaxyoyo.unknown.api.editor.sprites.Sprite;
|
||||||
|
|
||||||
public class RawSprite
|
public class RawSprite
|
||||||
{
|
{
|
||||||
private int primaryIndex = 0;
|
private String category = "blank";
|
||||||
private int secondaryIndex = 0;
|
private int index = 0;
|
||||||
|
|
||||||
@Expose(serialize = false, deserialize = false)
|
public static transient final RawSprite BLANK = new RawSprite();
|
||||||
public static final RawSprite BLANK = new RawSprite();
|
|
||||||
|
|
||||||
public int getPrimaryIndex()
|
public String getCategory()
|
||||||
{
|
{
|
||||||
return primaryIndex;
|
return category;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getSecondaryIndex()
|
public int getIndex()
|
||||||
{
|
{
|
||||||
return secondaryIndex;
|
return index;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static RawSprite create(Sprite spr)
|
||||||
|
{
|
||||||
|
RawSprite raw = new RawSprite();
|
||||||
|
raw.category = spr.getCategory().getName();
|
||||||
|
raw.index = spr.getIndex();
|
||||||
|
return raw;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,19 +1,32 @@
|
||||||
package galaxyoyo.unknown.api.editor.sprites;
|
package galaxyoyo.unknown.api.editor.sprites;
|
||||||
|
|
||||||
|
import java.awt.AlphaComposite;
|
||||||
|
import java.awt.Color;
|
||||||
|
import java.awt.Graphics2D;
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
public class Sprite
|
public class Sprite
|
||||||
{
|
{
|
||||||
public static final Sprite BLANK = new Sprite(new BufferedImage(16, 16, BufferedImage.TYPE_INT_ARGB), Category.create("blank", 0, new ArrayList<Sprite>()));
|
public static final Sprite BLANK = new Sprite(new BufferedImage(16, 16, BufferedImage.TYPE_INT_ARGB), Category.create("blank", 0, new ArrayList<Sprite>()), 0);
|
||||||
private Category cat;
|
|
||||||
|
|
||||||
|
static
|
||||||
|
{
|
||||||
|
Graphics2D g = BLANK.getImage().createGraphics();
|
||||||
|
g.setComposite(AlphaComposite.Clear);
|
||||||
|
g.setColor(new Color(0, true));
|
||||||
|
g.fillRect(0, 0, 16, 16);
|
||||||
|
}
|
||||||
|
|
||||||
|
private final Category cat;
|
||||||
private final BufferedImage img;
|
private final BufferedImage img;
|
||||||
|
private final int index;
|
||||||
|
|
||||||
public Sprite(BufferedImage img, Category cat)
|
public Sprite(BufferedImage img, Category cat, int index)
|
||||||
{
|
{
|
||||||
this.img = img;
|
this.img = img;
|
||||||
this.cat = cat;
|
this.cat = cat;
|
||||||
|
this.index = index;
|
||||||
|
|
||||||
if (!this.cat.getSprites().contains(this))
|
if (!this.cat.getSprites().contains(this))
|
||||||
this.cat.getSprites().add(this);
|
this.cat.getSprites().add(this);
|
||||||
|
@ -28,4 +41,32 @@ public class Sprite
|
||||||
{
|
{
|
||||||
return cat;
|
return cat;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getIndex()
|
||||||
|
{
|
||||||
|
return index;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode()
|
||||||
|
{
|
||||||
|
return cat.hashCode() ^ getIndex();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o)
|
||||||
|
{
|
||||||
|
if (!(o instanceof Sprite))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
Sprite other = (Sprite) o;
|
||||||
|
|
||||||
|
return hashCode() == other.hashCode();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString()
|
||||||
|
{
|
||||||
|
return "{Sprite img=" + img + " cat=" + cat.getName() + "}";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -48,7 +48,7 @@ public class SpriteRegister
|
||||||
int x = list.get(0).intValue();
|
int x = list.get(0).intValue();
|
||||||
int y = list.get(1).intValue();
|
int y = list.get(1).intValue();
|
||||||
BufferedImage child = img.getSubimage(x, y, 16, 16);
|
BufferedImage child = img.getSubimage(x, y, 16, 16);
|
||||||
new Sprite(child, cat);
|
new Sprite(child, cat, nameToCoords.get(key).indexOf(list));
|
||||||
}
|
}
|
||||||
|
|
||||||
sprites.put(key, cat);
|
sprites.put(key, cat);
|
||||||
|
|
|
@ -12,6 +12,7 @@ import java.awt.Color;
|
||||||
import java.awt.Graphics2D;
|
import java.awt.Graphics2D;
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
import javax.swing.JOptionPane;
|
import javax.swing.JOptionPane;
|
||||||
|
|
||||||
|
@ -56,6 +57,8 @@ public class Main
|
||||||
*/
|
*/
|
||||||
public static void main(String ... args)
|
public static void main(String ... args)
|
||||||
{
|
{
|
||||||
|
Locale.setDefault(Locale.FRANCE);
|
||||||
|
|
||||||
DEV = Main.class.getResource("/META-INF/MANIFEST.MF") == null;
|
DEV = Main.class.getResource("/META-INF/MANIFEST.MF") == null;
|
||||||
|
|
||||||
Logger LOGGER = (Logger) LogManager.getRootLogger();
|
Logger LOGGER = (Logger) LogManager.getRootLogger();
|
||||||
|
@ -128,7 +131,7 @@ public class Main
|
||||||
* @see #launchFrame()
|
* @see #launchFrame()
|
||||||
* @since 0.1-aplha
|
* @since 0.1-aplha
|
||||||
*/
|
*/
|
||||||
private static void launchEditMode()
|
public static void launchEditMode()
|
||||||
{
|
{
|
||||||
System.out.println("Lancement de l'\u00e9diteur de monde ...");
|
System.out.println("Lancement de l'\u00e9diteur de monde ...");
|
||||||
int baseWidth;
|
int baseWidth;
|
||||||
|
@ -139,9 +142,11 @@ public class Main
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
baseWidth = Integer.parseInt(JOptionPane.showInputDialog("Veuillez entrez le nombre de cases longueur de votre carte :")) * 16;
|
baseWidth = Integer.parseInt(JOptionPane.showInputDialog("Veuillez entrez le nombre de cases longueur de votre carte (0 pour annuler) :")) * 16;
|
||||||
if (baseWidth <= 0)
|
if (baseWidth < 0)
|
||||||
throw new NumberFormatException();
|
throw new NumberFormatException();
|
||||||
|
if (baseWidth == 0)
|
||||||
|
return;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
catch (NumberFormatException ex)
|
catch (NumberFormatException ex)
|
||||||
|
@ -154,9 +159,11 @@ public class Main
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
baseHeight = Integer.parseInt(JOptionPane.showInputDialog("Veuillez entrez le nombre de cases hauteur de votre carte :")) * 16;
|
baseHeight = Integer.parseInt(JOptionPane.showInputDialog("Veuillez entrez le nombre de cases hauteur de votre carte (0 pour annuler) :")) * 16;
|
||||||
if (baseHeight <= 0)
|
if (baseHeight < 0)
|
||||||
throw new NumberFormatException();
|
throw new NumberFormatException();
|
||||||
|
if (baseHeight == 0)
|
||||||
|
return;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
catch (NumberFormatException ex)
|
catch (NumberFormatException ex)
|
||||||
|
|
|
@ -1,25 +1,37 @@
|
||||||
package galaxyoyo.unknown.editor;
|
package galaxyoyo.unknown.editor;
|
||||||
|
|
||||||
|
import galaxyoyo.unknown.api.editor.EditorAPI;
|
||||||
|
import galaxyoyo.unknown.api.editor.RawMap;
|
||||||
import galaxyoyo.unknown.api.editor.sprites.Category;
|
import galaxyoyo.unknown.api.editor.sprites.Category;
|
||||||
import galaxyoyo.unknown.api.editor.sprites.Sprite;
|
import galaxyoyo.unknown.api.editor.sprites.Sprite;
|
||||||
import galaxyoyo.unknown.api.editor.sprites.SpriteRegister;
|
import galaxyoyo.unknown.api.editor.sprites.SpriteRegister;
|
||||||
|
import galaxyoyo.unknown.frame.listeners.CreateMapListener;
|
||||||
|
import galaxyoyo.unknown.frame.listeners.MapMouseListener;
|
||||||
|
import galaxyoyo.unknown.frame.listeners.OpenMapListener;
|
||||||
|
import galaxyoyo.unknown.frame.listeners.SpriteMouseListener;
|
||||||
|
|
||||||
import java.awt.BorderLayout;
|
import java.awt.BorderLayout;
|
||||||
|
import java.awt.Color;
|
||||||
import java.awt.Dimension;
|
import java.awt.Dimension;
|
||||||
import java.awt.event.ComponentEvent;
|
import java.awt.event.ActionEvent;
|
||||||
import java.awt.event.ComponentListener;
|
import java.awt.event.ActionListener;
|
||||||
import java.awt.event.MouseEvent;
|
import java.awt.event.KeyEvent;
|
||||||
import java.awt.event.MouseListener;
|
import java.awt.event.WindowEvent;
|
||||||
|
import java.awt.event.WindowListener;
|
||||||
|
|
||||||
import javax.swing.ImageIcon;
|
import javax.swing.ImageIcon;
|
||||||
import javax.swing.JFrame;
|
import javax.swing.JFrame;
|
||||||
|
import javax.swing.JMenu;
|
||||||
|
import javax.swing.JMenuBar;
|
||||||
|
import javax.swing.JMenuItem;
|
||||||
|
import javax.swing.JOptionPane;
|
||||||
import javax.swing.JPanel;
|
import javax.swing.JPanel;
|
||||||
import javax.swing.JScrollPane;
|
import javax.swing.JScrollPane;
|
||||||
import javax.swing.JTabbedPane;
|
import javax.swing.JTabbedPane;
|
||||||
import javax.swing.event.ChangeEvent;
|
import javax.swing.event.ChangeEvent;
|
||||||
import javax.swing.event.ChangeListener;
|
import javax.swing.event.ChangeListener;
|
||||||
|
|
||||||
public class EditorFrame extends JFrame implements ComponentListener, MouseListener, ChangeListener
|
public class EditorFrame extends JFrame implements ChangeListener, ActionListener, WindowListener
|
||||||
{
|
{
|
||||||
private static final long serialVersionUID = -2705122356101556462L;
|
private static final long serialVersionUID = -2705122356101556462L;
|
||||||
|
|
||||||
|
@ -27,14 +39,22 @@ public class EditorFrame extends JFrame implements ComponentListener, MouseListe
|
||||||
|
|
||||||
private final JPanel content = new JPanel();
|
private final JPanel content = new JPanel();
|
||||||
|
|
||||||
|
private JMenuBar menuBar = new JMenuBar();
|
||||||
|
private JMenu fichier = new JMenu("Fichier");
|
||||||
|
private JMenuItem nouveau = new JMenuItem("Nouveau");
|
||||||
|
private JMenuItem open = new JMenuItem("Ouvrir");
|
||||||
|
private JMenuItem save = new JMenuItem("Sauvegarder");
|
||||||
|
private JMenuItem saveAs = new JMenuItem("Sauvegarder sous ...");
|
||||||
|
private JMenuItem exit = new JMenuItem("Quitter");
|
||||||
private final JTabbedPane tabs = new JTabbedPane();
|
private final JTabbedPane tabs = new JTabbedPane();
|
||||||
private final JPanel tabEvents = new JPanel();
|
private final JPanel tabEvents = new JPanel();
|
||||||
private final JPanel tabColl = new JPanel();
|
private final JPanel tabColl = new JPanel();
|
||||||
private final JPanel mapPanel = new JPanel();
|
private final MapPanel mapPanel = new MapPanel(this);
|
||||||
private final JTabbedPane resources = new JTabbedPane();
|
private final JTabbedPane resources = new JTabbedPane();
|
||||||
private final JPanel couche1 = new JPanel();
|
private final JPanel couche1 = new JPanel();
|
||||||
private final JPanel couche2 = new JPanel();
|
private final JPanel couche2 = new JPanel();
|
||||||
private final JPanel couche3 = new JPanel();
|
private final JPanel couche3 = new JPanel();
|
||||||
|
private SpriteComp selectedSprite;
|
||||||
|
|
||||||
public EditorFrame(Map map)
|
public EditorFrame(Map map)
|
||||||
{
|
{
|
||||||
|
@ -46,15 +66,43 @@ public class EditorFrame extends JFrame implements ComponentListener, MouseListe
|
||||||
this.setLocationRelativeTo(null);
|
this.setLocationRelativeTo(null);
|
||||||
content.setLayout(new BorderLayout());
|
content.setLayout(new BorderLayout());
|
||||||
this.setContentPane(content);
|
this.setContentPane(content);
|
||||||
this.addComponentListener(this);
|
|
||||||
this.setVisible(true);
|
this.setVisible(true);
|
||||||
this.setVisible(false);
|
this.setVisible(false);
|
||||||
|
|
||||||
tabs.addTab("Carte", mapPanel);
|
nouveau.setMnemonic(KeyEvent.CTRL_DOWN_MASK + KeyEvent.VK_N);
|
||||||
tabs.addTab("\u00c9vennments", tabEvents);
|
nouveau.addActionListener(new CreateMapListener());
|
||||||
tabs.addTab("Collisions", tabColl);
|
fichier.add(nouveau);
|
||||||
tabs.addMouseListener(this);
|
|
||||||
tabs.addChangeListener(this);
|
open.setMnemonic(KeyEvent.CTRL_DOWN_MASK + KeyEvent.VK_O);
|
||||||
|
open.addActionListener(new OpenMapListener());
|
||||||
|
fichier.add(open);
|
||||||
|
|
||||||
|
fichier.addSeparator();
|
||||||
|
|
||||||
|
save.setMnemonic(KeyEvent.CTRL_DOWN_MASK + KeyEvent.VK_S);
|
||||||
|
save.addActionListener(this);
|
||||||
|
fichier.add(save);
|
||||||
|
|
||||||
|
saveAs.setMnemonic(KeyEvent.CTRL_DOWN_MASK + KeyEvent.SHIFT_MASK + KeyEvent.VK_S);
|
||||||
|
saveAs.addActionListener(this);
|
||||||
|
fichier.add(saveAs);
|
||||||
|
|
||||||
|
fichier.addSeparator();
|
||||||
|
|
||||||
|
exit.setMnemonic(KeyEvent.CTRL_DOWN_MASK + KeyEvent.VK_Q);
|
||||||
|
exit.addActionListener(this);
|
||||||
|
fichier.add(exit);
|
||||||
|
|
||||||
|
menuBar.add(fichier);
|
||||||
|
|
||||||
|
this.setJMenuBar(menuBar);
|
||||||
|
|
||||||
|
mapPanel.addMouseListener(new MapMouseListener(mapPanel, this));
|
||||||
|
mapPanel.addMouseMotionListener(new MapMouseListener(mapPanel, this));
|
||||||
|
|
||||||
|
tabs.addTab("Carte", new JScrollPane(mapPanel, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED));
|
||||||
|
tabs.addTab("\u00c9vennments", new JScrollPane(tabEvents));
|
||||||
|
tabs.addTab("Collisions", new JScrollPane(tabColl));
|
||||||
|
|
||||||
content.add(tabs, BorderLayout.CENTER);
|
content.add(tabs, BorderLayout.CENTER);
|
||||||
|
|
||||||
|
@ -73,37 +121,23 @@ public class EditorFrame extends JFrame implements ComponentListener, MouseListe
|
||||||
resources.addTab("", new ImageIcon(getClass().getResource("/assets/unknown/textures/layer 1.png")), scroll1);
|
resources.addTab("", new ImageIcon(getClass().getResource("/assets/unknown/textures/layer 1.png")), scroll1);
|
||||||
resources.addTab("", new ImageIcon(getClass().getResource("/assets/unknown/textures/layer 2.png")), scroll2);
|
resources.addTab("", new ImageIcon(getClass().getResource("/assets/unknown/textures/layer 2.png")), scroll2);
|
||||||
resources.addTab("", new ImageIcon(getClass().getResource("/assets/unknown/textures/layer 3.png")), scroll3);
|
resources.addTab("", new ImageIcon(getClass().getResource("/assets/unknown/textures/layer 3.png")), scroll3);
|
||||||
resources.addMouseListener(this);
|
|
||||||
resources.addChangeListener(this);
|
resources.addChangeListener(this);
|
||||||
|
resources.setBackgroundAt(0, Color.white);
|
||||||
|
resources.setBackgroundAt(1, Color.white);
|
||||||
|
resources.setBackgroundAt(2, Color.white);
|
||||||
|
|
||||||
content.add(resources, BorderLayout.EAST);
|
content.add(resources, BorderLayout.EAST);
|
||||||
|
|
||||||
this.componentResized(null);
|
|
||||||
resize();
|
resize();
|
||||||
|
|
||||||
drawResources();
|
drawResources();
|
||||||
|
|
||||||
drawMap();
|
revalidate();
|
||||||
}
|
|
||||||
|
|
||||||
private void drawMap()
|
|
||||||
{
|
|
||||||
if (mapPanel.getGraphics() == null)
|
|
||||||
{
|
|
||||||
mapPanel.repaint();
|
|
||||||
}
|
|
||||||
|
|
||||||
mapPanel.getGraphics().drawImage(map.getFont(), 0, 0, null);
|
|
||||||
mapPanel.revalidate();
|
|
||||||
mapPanel.repaint();
|
|
||||||
repaint();
|
repaint();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void drawResources()
|
private void drawResources()
|
||||||
{
|
{
|
||||||
int x = 0;
|
|
||||||
int y = 0;
|
|
||||||
|
|
||||||
couche1.removeAll();
|
couche1.removeAll();
|
||||||
couche2.removeAll();
|
couche2.removeAll();
|
||||||
couche3.removeAll();
|
couche3.removeAll();
|
||||||
|
@ -124,22 +158,15 @@ public class EditorFrame extends JFrame implements ComponentListener, MouseListe
|
||||||
{
|
{
|
||||||
for (Sprite spr : cat.getSprites())
|
for (Sprite spr : cat.getSprites())
|
||||||
{
|
{
|
||||||
SpriteComp sprc1 = new SpriteComp(spr, 1);
|
SpriteComp sprc1 = new SpriteComp(spr, 0);
|
||||||
SpriteComp sprc2 = new SpriteComp(spr, 2);
|
SpriteComp sprc2 = new SpriteComp(spr, 1);
|
||||||
SpriteComp sprc3 = new SpriteComp(spr, 3);
|
SpriteComp sprc3 = new SpriteComp(spr, 2);
|
||||||
sprc1.setLocation(x, y);
|
sprc1.addMouseListener(new SpriteMouseListener(sprc1, this));
|
||||||
sprc2.setLocation(x, y);
|
sprc2.addMouseListener(new SpriteMouseListener(sprc2, this));
|
||||||
sprc3.setLocation(x, y);
|
sprc3.addMouseListener(new SpriteMouseListener(sprc3, this));
|
||||||
couche1.add(sprc1);
|
couche1.add(sprc1);
|
||||||
couche2.add(sprc2);
|
couche2.add(sprc2);
|
||||||
couche3.add(sprc3);
|
couche3.add(sprc3);
|
||||||
|
|
||||||
x += 48;
|
|
||||||
if (couche1.getWidth() - x < 48)
|
|
||||||
{
|
|
||||||
x = 0;
|
|
||||||
y += 48;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -150,22 +177,6 @@ public class EditorFrame extends JFrame implements ComponentListener, MouseListe
|
||||||
couche2.repaint();
|
couche2.repaint();
|
||||||
couche3.repaint();
|
couche3.repaint();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void componentHidden(ComponentEvent paramComponentEvent)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void componentMoved(ComponentEvent paramComponentEvent)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void componentResized(ComponentEvent paramComponentEvent)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public void resize()
|
public void resize()
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -190,44 +201,120 @@ public class EditorFrame extends JFrame implements ComponentListener, MouseListe
|
||||||
((JScrollPane) resources.getSelectedComponent()).getVerticalScrollBar().setValue(cursorPos);
|
((JScrollPane) resources.getSelectedComponent()).getVerticalScrollBar().setValue(cursorPos);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Map getMap()
|
||||||
|
{
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SpriteComp getSelectedSprite()
|
||||||
|
{
|
||||||
|
return selectedSprite;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSelectedSprite(SpriteComp sprite)
|
||||||
|
{
|
||||||
|
this.selectedSprite = sprite;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void componentShown(ComponentEvent paramComponentEvent)
|
public void stateChanged(ChangeEvent event)
|
||||||
|
{
|
||||||
|
if (event.getSource() == resources)
|
||||||
|
{
|
||||||
|
if (getSelectedLayerIndex() == 0)
|
||||||
|
{
|
||||||
|
resources.setBackgroundAt(0, Color.white);
|
||||||
|
resources.setBackgroundAt(1, Color.white);
|
||||||
|
resources.setBackgroundAt(2, Color.white);
|
||||||
|
}
|
||||||
|
else if (getSelectedLayerIndex() == 1)
|
||||||
|
{
|
||||||
|
resources.setBackgroundAt(0, Color.black);
|
||||||
|
resources.setBackgroundAt(1, Color.white);
|
||||||
|
resources.setBackgroundAt(2, Color.white);
|
||||||
|
}
|
||||||
|
else if (getSelectedLayerIndex() == 2)
|
||||||
|
{
|
||||||
|
resources.setBackgroundAt(0, Color.black);
|
||||||
|
resources.setBackgroundAt(1, Color.black);
|
||||||
|
resources.setBackgroundAt(2, Color.white);
|
||||||
|
}
|
||||||
|
|
||||||
|
repaint();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getSelectedLayerIndex()
|
||||||
|
{
|
||||||
|
return resources.getSelectedIndex();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent event)
|
||||||
|
{
|
||||||
|
if (event.getSource() == save)
|
||||||
|
{
|
||||||
|
EditorAPI.save(RawMap.create(map));
|
||||||
|
}
|
||||||
|
else if (event.getSource() == saveAs)
|
||||||
|
{
|
||||||
|
EditorAPI.saveAs(RawMap.create(map));
|
||||||
|
}
|
||||||
|
else if (event.getSource() == exit)
|
||||||
|
{
|
||||||
|
int result = JOptionPane.showConfirmDialog(null, "Voulez-vous sauvegarder votre carte avant de quitter ? Toute modification sera perdue", "Confirmation", JOptionPane.YES_NO_CANCEL_OPTION);
|
||||||
|
|
||||||
|
if (result == 0)
|
||||||
|
save.doClick();
|
||||||
|
|
||||||
|
if (result != 2)
|
||||||
|
dispose();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void windowActivated(WindowEvent event)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void mouseClicked(MouseEvent paramMouseEvent)
|
public void windowClosed(WindowEvent event)
|
||||||
{
|
{
|
||||||
this.componentResized(null);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void mouseEntered(MouseEvent paramMouseEvent)
|
public void windowClosing(WindowEvent event)
|
||||||
{
|
{
|
||||||
this.componentResized(null);
|
int result = JOptionPane.showConfirmDialog(null, "Voulez-vous sauvegarder avant de quitter ?", "Confirmation", JOptionPane.YES_NO_CANCEL_OPTION);
|
||||||
|
|
||||||
|
if (result == 0)
|
||||||
|
{
|
||||||
|
EditorAPI.save(RawMap.create(map));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (result != 2)
|
||||||
|
{
|
||||||
|
dispose();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void mouseExited(MouseEvent paramMouseEvent)
|
public void windowDeactivated(WindowEvent event)
|
||||||
{
|
{
|
||||||
this.componentResized(null);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void mousePressed(MouseEvent paramMouseEvent)
|
public void windowDeiconified(WindowEvent event)
|
||||||
{
|
{
|
||||||
this.componentResized(null);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void mouseReleased(MouseEvent paramMouseEvent)
|
public void windowIconified(WindowEvent event)
|
||||||
{
|
{
|
||||||
this.componentResized(null);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void stateChanged(ChangeEvent paramChangeEvent)
|
public void windowOpened(WindowEvent event)
|
||||||
{
|
{
|
||||||
this.componentResized(null);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,7 +5,6 @@ import galaxyoyo.unknown.api.editor.RawCase;
|
||||||
import galaxyoyo.unknown.api.editor.RawMap;
|
import galaxyoyo.unknown.api.editor.RawMap;
|
||||||
import galaxyoyo.unknown.api.editor.sprites.SpriteRegister;
|
import galaxyoyo.unknown.api.editor.sprites.SpriteRegister;
|
||||||
|
|
||||||
import java.awt.Point;
|
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
@ -13,24 +12,28 @@ import java.util.List;
|
||||||
|
|
||||||
public class Map
|
public class Map
|
||||||
{
|
{
|
||||||
|
@Deprecated
|
||||||
|
private static List<Case> cases;
|
||||||
private final EditorFrame frame;
|
private final EditorFrame frame;
|
||||||
private int width;
|
private int width;
|
||||||
private int height;
|
private int height;
|
||||||
private List<Case> cases = new ArrayList<Case>();
|
private java.util.Map<Integer, java.util.Map<Integer, Case>> casesMap = new HashMap<Integer, java.util.Map<Integer, Case>>();
|
||||||
private java.util.Map<Point, Case> casesMap = new HashMap<Point, Case>();
|
|
||||||
private transient BufferedImage font;
|
private transient BufferedImage font;
|
||||||
|
|
||||||
public Map(RawMap raw)
|
public Map(RawMap raw)
|
||||||
{
|
{
|
||||||
|
cases = new ArrayList<Case>();
|
||||||
this.width = raw.getWidth();
|
this.width = raw.getWidth();
|
||||||
this.height = raw.getHeight();
|
this.height = raw.getHeight();
|
||||||
this.font = raw.getFont();
|
this.font = raw.getFont();
|
||||||
|
|
||||||
for (RawCase rc : raw.getCases())
|
for (RawCase rc : raw.getCases())
|
||||||
{
|
{
|
||||||
cases.add(Case.create(rc.getPosX(), rc.getPosY(), SpriteRegister.getCategory(rc.getCoucheOne().getPrimaryIndex()).getSprites().get(rc.getCoucheOne().getSecondaryIndex()), SpriteRegister.getCategory(rc.getCoucheTwo().getPrimaryIndex()).getSprites().get(rc.getCoucheTwo().getSecondaryIndex()), SpriteRegister.getCategory(rc.getCoucheThree().getPrimaryIndex()).getSprites().get(rc.getCoucheThree().getSecondaryIndex()), rc.getCollision()));
|
cases.add(Case.create(rc.getPosX(), rc.getPosY(), SpriteRegister.getCategory(rc.getCoucheOne().getCategory()).getSprites().get(rc.getCoucheOne().getIndex()), SpriteRegister.getCategory(rc.getCoucheTwo().getCategory()).getSprites().get(rc.getCoucheTwo().getIndex()), SpriteRegister.getCategory(rc.getCoucheThree().getCategory()).getSprites().get(rc.getCoucheThree().getIndex()), rc.getCollision()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
reorganizeMap();
|
||||||
|
|
||||||
frame = new EditorFrame(this);
|
frame = new EditorFrame(this);
|
||||||
|
|
||||||
getFrame().setVisible(true);
|
getFrame().setVisible(true);
|
||||||
|
@ -53,12 +56,12 @@ public class Map
|
||||||
|
|
||||||
public Case getCase(int x, int y)
|
public Case getCase(int x, int y)
|
||||||
{
|
{
|
||||||
if (casesMap.isEmpty())
|
return casesMap.getOrDefault(x, new HashMap<Integer, Case>()).get(y);
|
||||||
{
|
|
||||||
reorganizeMap();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return casesMap.get(new Point(x, y));
|
public void setCase(int x, int y, Case c)
|
||||||
|
{
|
||||||
|
casesMap.get(x).put(y, c);
|
||||||
}
|
}
|
||||||
|
|
||||||
public BufferedImage getFont()
|
public BufferedImage getFont()
|
||||||
|
@ -73,9 +76,26 @@ public class Map
|
||||||
|
|
||||||
private void reorganizeMap()
|
private void reorganizeMap()
|
||||||
{
|
{
|
||||||
|
for (int i = 0; i < width; ++i)
|
||||||
|
{
|
||||||
|
casesMap.put(i, new HashMap<Integer, Case>());
|
||||||
|
}
|
||||||
|
|
||||||
for (Case c : cases)
|
for (Case c : cases)
|
||||||
{
|
{
|
||||||
casesMap.put(new Point(c.getPosX() - c.getPosX() % 16, c.getPosY() - c.getPosY() % 16), c);
|
setCase(c.getPosX(), c.getPosY(), c);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<Case> getAllCases()
|
||||||
|
{
|
||||||
|
List<Case> list = new ArrayList<Case>();
|
||||||
|
|
||||||
|
for (java.util.Map<Integer, Case> l : casesMap.values())
|
||||||
|
{
|
||||||
|
list.addAll(l.values());
|
||||||
|
}
|
||||||
|
|
||||||
|
return list;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,118 @@
|
||||||
|
package galaxyoyo.unknown.editor;
|
||||||
|
|
||||||
|
import galaxyoyo.unknown.api.editor.Case;
|
||||||
|
|
||||||
|
import java.awt.Color;
|
||||||
|
import java.awt.Graphics;
|
||||||
|
import java.awt.Graphics2D;
|
||||||
|
import java.awt.image.BufferedImage;
|
||||||
|
|
||||||
|
import javax.swing.JPanel;
|
||||||
|
|
||||||
|
public class MapPanel extends JPanel
|
||||||
|
{
|
||||||
|
private static final long serialVersionUID = 2629019576253690557L;
|
||||||
|
|
||||||
|
private final EditorFrame frame;
|
||||||
|
|
||||||
|
public MapPanel(EditorFrame frame)
|
||||||
|
{
|
||||||
|
super ();
|
||||||
|
this.frame = frame;
|
||||||
|
}
|
||||||
|
|
||||||
|
public EditorFrame getFrame()
|
||||||
|
{
|
||||||
|
return frame;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map getMap()
|
||||||
|
{
|
||||||
|
return frame.getMap();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void paintComponent(Graphics g)
|
||||||
|
{
|
||||||
|
g.fillRect(0, 0, getWidth(), getHeight());
|
||||||
|
BufferedImage img = getMap().getFont();
|
||||||
|
int x = getWidth() / 2 - img.getWidth();
|
||||||
|
int y = getHeight() / 2 - img.getHeight();
|
||||||
|
int width = img.getWidth() * 2;
|
||||||
|
int height = img.getHeight() * 2;
|
||||||
|
g.drawImage(getMap().getFont(), x, y, width, height, null);
|
||||||
|
|
||||||
|
for (Case c : getMap().getAllCases())
|
||||||
|
{
|
||||||
|
if (isEmpty(c.getCoucheOne().getImage()))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
BufferedImage image;
|
||||||
|
|
||||||
|
g.drawImage(c.getCoucheOne().getImage(), x + c.getPosX() * 34 + 2, y + c.getPosY() * 34 + 2, 32, 32, null);
|
||||||
|
if (frame.getSelectedLayerIndex() != 0)
|
||||||
|
{
|
||||||
|
image = recalculateAplha(c.getCoucheOne().getImage(), 0);
|
||||||
|
g.drawImage(image, x + c.getPosX() * 34 + 2, y + c.getPosY() * 34 + 2, 32, 32, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isEmpty(c.getCoucheTwo().getImage()) || (frame.getSelectedLayerIndex() != 1 && frame.getSelectedLayerIndex() != 2))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
g.drawImage(c.getCoucheTwo().getImage(), x + c.getPosX() * 34 + 2, y + c.getPosY() * 34 + 2, 32, 32, null);
|
||||||
|
if (frame.getSelectedLayerIndex() != 1)
|
||||||
|
{
|
||||||
|
image = recalculateAplha(c.getCoucheTwo().getImage(), 1);
|
||||||
|
g.drawImage(image, x + c.getPosX() * 34 + 2, y + c.getPosY() * 34 + 2, 32, 32, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isEmpty(c.getCoucheThree().getImage()) || frame.getSelectedLayerIndex() != 2)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
g.drawImage(c.getCoucheThree().getImage(), x + c.getPosX() * 34 + 2, y + c.getPosY() * 34 + 2, 32, 32, null);
|
||||||
|
if (frame.getSelectedLayerIndex() != 2)
|
||||||
|
{
|
||||||
|
image = recalculateAplha(c.getCoucheThree().getImage(), 2);
|
||||||
|
g.drawImage(image, x + c.getPosX() * 34 + 2, y + c.getPosY() * 34 + 2, 32, 32, null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private BufferedImage recalculateAplha(BufferedImage image, int couche)
|
||||||
|
{
|
||||||
|
BufferedImage img = new BufferedImage(16, 16, BufferedImage.TYPE_INT_ARGB);
|
||||||
|
|
||||||
|
for (int x = 0; x < image.getWidth(); ++x)
|
||||||
|
{
|
||||||
|
for (int y = 0; y < image.getHeight(); ++y)
|
||||||
|
{
|
||||||
|
Color ref = new Color(image.getRGB(x, y));
|
||||||
|
int red = ref.getRed() / 2;
|
||||||
|
int green = ref.getGreen() / 2;
|
||||||
|
int blue = ref.getBlue() / 2;
|
||||||
|
if (image.getRGB(x, y) == 0xFFFFFF)
|
||||||
|
continue;
|
||||||
|
Graphics2D g = img.createGraphics();
|
||||||
|
g.setColor(new Color(red / 3 * couche == 2 ? 1 : 2, green / 3 * couche == 2 ? 1 : 2, blue / 3 * couche == 2 ? 1 : 2, 100));
|
||||||
|
g.drawLine(x, y, x, y);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return img;
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isEmpty(BufferedImage image)
|
||||||
|
{
|
||||||
|
int allrgba = 0;
|
||||||
|
|
||||||
|
for (int x = 0; x < image.getWidth(); ++x)
|
||||||
|
{
|
||||||
|
for (int y = 0; y < image.getHeight(); ++y)
|
||||||
|
{
|
||||||
|
allrgba += image.getRGB(x, y) + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return allrgba == 0;
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,40 +0,0 @@
|
||||||
package galaxyoyo.unknown.editor;
|
|
||||||
|
|
||||||
import galaxyoyo.unknown.api.editor.sprites.Category;
|
|
||||||
import galaxyoyo.unknown.api.editor.sprites.Sprite;
|
|
||||||
import galaxyoyo.unknown.api.editor.sprites.SpriteRegister;
|
|
||||||
|
|
||||||
import java.awt.Color;
|
|
||||||
import java.awt.Graphics;
|
|
||||||
|
|
||||||
import javax.swing.JPanel;
|
|
||||||
|
|
||||||
public class ResourcePanel extends JPanel
|
|
||||||
{
|
|
||||||
private static final long serialVersionUID = -5616765551654915921L;
|
|
||||||
|
|
||||||
public void paintComponent(Graphics g)
|
|
||||||
{
|
|
||||||
g.setColor(Color.white);
|
|
||||||
g.fillRect(0, 0, getWidth(), getHeight());
|
|
||||||
|
|
||||||
int x = 0;
|
|
||||||
int y = 0;
|
|
||||||
|
|
||||||
for (Category cat : SpriteRegister.getAllCategories())
|
|
||||||
{
|
|
||||||
for (Sprite spr : cat.getSprites())
|
|
||||||
{
|
|
||||||
g.drawImage(spr.getImage(), x, y, 64, 64, Color.black, null);
|
|
||||||
|
|
||||||
x += 80;
|
|
||||||
|
|
||||||
if (getWidth()- x < 80)
|
|
||||||
{
|
|
||||||
x = 0;
|
|
||||||
y += 80;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -14,6 +14,7 @@ public class SpriteComp extends JComponent
|
||||||
|
|
||||||
private final Sprite sprite;
|
private final Sprite sprite;
|
||||||
private final int couche;
|
private final int couche;
|
||||||
|
private boolean selected;
|
||||||
|
|
||||||
public SpriteComp(Sprite sprite, int couche)
|
public SpriteComp(Sprite sprite, int couche)
|
||||||
{
|
{
|
||||||
|
@ -38,6 +39,16 @@ public class SpriteComp extends JComponent
|
||||||
return couche;
|
return couche;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isSelected()
|
||||||
|
{
|
||||||
|
return selected;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSelected(boolean selected)
|
||||||
|
{
|
||||||
|
this.selected = selected;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void paintComponent(Graphics g)
|
public void paintComponent(Graphics g)
|
||||||
{
|
{
|
||||||
|
@ -46,5 +57,14 @@ public class SpriteComp extends JComponent
|
||||||
g.setColor(Color.white);
|
g.setColor(Color.white);
|
||||||
g.fillRect(0, 0, getWidth(), getHeight());
|
g.fillRect(0, 0, getWidth(), getHeight());
|
||||||
g.drawImage(sprite.getImage(), 0, 0, 32, 32, Color.white, null);
|
g.drawImage(sprite.getImage(), 0, 0, 32, 32, Color.white, null);
|
||||||
|
|
||||||
|
if (isSelected())
|
||||||
|
{
|
||||||
|
g.setColor(Color.black);
|
||||||
|
g.drawLine(0, 0, getWidth() - 1, 0);
|
||||||
|
g.drawLine(0, 0, 0, getHeight() - 1);
|
||||||
|
g.drawLine(0, getHeight() - 1, getWidth() - 1, getHeight() - 1);
|
||||||
|
g.drawLine(getWidth() - 1, 0, getWidth() - 1, getHeight() - 1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,77 @@
|
||||||
|
package galaxyoyo.unknown.frame.listeners;
|
||||||
|
|
||||||
|
import galaxyoyo.unknown.api.editor.Case;
|
||||||
|
import galaxyoyo.unknown.editor.EditorFrame;
|
||||||
|
import galaxyoyo.unknown.editor.Map;
|
||||||
|
import galaxyoyo.unknown.editor.MapPanel;
|
||||||
|
|
||||||
|
import java.awt.Cursor;
|
||||||
|
import java.awt.event.MouseAdapter;
|
||||||
|
import java.awt.event.MouseEvent;
|
||||||
|
|
||||||
|
public class MapMouseListener extends MouseAdapter
|
||||||
|
{
|
||||||
|
private final EditorFrame frame;
|
||||||
|
private final MapPanel panel;
|
||||||
|
|
||||||
|
public MapMouseListener(MapPanel panel, EditorFrame frame)
|
||||||
|
{
|
||||||
|
this.frame = frame;
|
||||||
|
this.panel = panel;
|
||||||
|
}
|
||||||
|
|
||||||
|
public EditorFrame getFrame()
|
||||||
|
{
|
||||||
|
return frame;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void mouseMoved(MouseEvent event)
|
||||||
|
{
|
||||||
|
Map map = getFrame().getMap();
|
||||||
|
|
||||||
|
int x = panel.getWidth() / 2 - map.getFont().getWidth();
|
||||||
|
int y = panel.getHeight() / 2 - map.getFont().getHeight();
|
||||||
|
|
||||||
|
if (map.getCase((event.getX() - x - 2) / 34, (event.getY() - y - 2) / 34) != null && event.getX() - x >= 2 && event.getY() - y >= 2)
|
||||||
|
{
|
||||||
|
getFrame().setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
getFrame().setCursor(Cursor.getDefaultCursor());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void mouseReleased(MouseEvent event)
|
||||||
|
{
|
||||||
|
Map map = getFrame().getMap();
|
||||||
|
|
||||||
|
int x = panel.getWidth() / 2 - map.getFont().getWidth();
|
||||||
|
int y = panel.getHeight() / 2 - map.getFont().getHeight();
|
||||||
|
Case c = null;
|
||||||
|
|
||||||
|
if ((c = map.getCase((event.getX() - x + 2) / 34, (event.getY() - y + 2) / 34)) != null && event.getX() - x >= 2 && event.getY() - y >= 2)
|
||||||
|
{
|
||||||
|
if (getFrame().getSelectedSprite() != null)
|
||||||
|
{
|
||||||
|
if (getFrame().getSelectedSprite().getCouche() - 1 > getFrame().getSelectedLayerIndex())
|
||||||
|
return;
|
||||||
|
|
||||||
|
Case n;
|
||||||
|
|
||||||
|
switch (getFrame().getSelectedSprite().getCouche())
|
||||||
|
{
|
||||||
|
case 0 : n = Case.create(c.getPosX(), c.getPosY(), getFrame().getSelectedSprite().getSprite(), c.getCoucheTwo(), c.getCoucheThree(), c.getCollision()); break;
|
||||||
|
case 1 : n = Case.create(c.getPosX(), c.getPosY(), c.getCoucheOne(), getFrame().getSelectedSprite().getSprite(), c.getCoucheThree(), c.getCollision()); break;
|
||||||
|
case 2 : n = Case.create(c.getPosX(), c.getPosY(), c.getCoucheOne(), c.getCoucheTwo(), getFrame().getSelectedSprite().getSprite(), c.getCollision()); break;
|
||||||
|
default : n = c; break;
|
||||||
|
}
|
||||||
|
|
||||||
|
map.setCase((event.getX() - x + 2) / 34, (event.getY() - y + 2) / 34, n);
|
||||||
|
panel.repaint();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,32 @@
|
||||||
|
package galaxyoyo.unknown.frame.listeners;
|
||||||
|
|
||||||
|
import galaxyoyo.unknown.editor.EditorFrame;
|
||||||
|
import galaxyoyo.unknown.editor.SpriteComp;
|
||||||
|
|
||||||
|
import java.awt.event.MouseAdapter;
|
||||||
|
import java.awt.event.MouseEvent;
|
||||||
|
|
||||||
|
public class SpriteMouseListener extends MouseAdapter
|
||||||
|
{
|
||||||
|
private final SpriteComp sprite;
|
||||||
|
private final EditorFrame frame;
|
||||||
|
|
||||||
|
public SpriteMouseListener(SpriteComp sprc, EditorFrame frame)
|
||||||
|
{
|
||||||
|
this.sprite = sprc;
|
||||||
|
this.frame = frame;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void mouseReleased(MouseEvent event)
|
||||||
|
{
|
||||||
|
if (frame.getSelectedSprite() != null)
|
||||||
|
{
|
||||||
|
frame.getSelectedSprite().setSelected(false);
|
||||||
|
frame.getSelectedSprite().repaint();
|
||||||
|
}
|
||||||
|
frame.setSelectedSprite(sprite);
|
||||||
|
sprite.setSelected(true);
|
||||||
|
sprite.repaint();
|
||||||
|
}
|
||||||
|
}
|
Binary file not shown.
After Width: | Height: | Size: 2.4 KiB |
Binary file not shown.
After Width: | Height: | Size: 2.6 KiB |
Binary file not shown.
After Width: | Height: | Size: 2.8 KiB |
Binary file not shown.
After Width: | Height: | Size: 187 B |
|
@ -1,4 +1,7 @@
|
||||||
{
|
{
|
||||||
|
"blank": [
|
||||||
|
[0,0]
|
||||||
|
],
|
||||||
"gazon": [
|
"gazon": [
|
||||||
[0,0],
|
[0,0],
|
||||||
[0,16],
|
[0,16],
|
||||||
|
|
Loading…
Reference in New Issue