diff --git a/src/main/java/fr/ynerant/leveleditor/api/editor/EditorAPI.java b/src/main/java/fr/ynerant/leveleditor/api/editor/EditorAPI.java index d50c72b..b91f1ee 100644 --- a/src/main/java/fr/ynerant/leveleditor/api/editor/EditorAPI.java +++ b/src/main/java/fr/ynerant/leveleditor/api/editor/EditorAPI.java @@ -109,7 +109,7 @@ public class EditorAPI { return open(file); } - public static Map open(File f) { + public static RawMap getRawMap(File f) { String json = null; try { GZIPInputStream gis = new GZIPInputStream(new BufferedInputStream(new FileInputStream(f))); @@ -126,9 +126,11 @@ public class EditorAPI { e.printStackTrace(); } - RawMap rm = createGson().fromJson(json, RawMap.class); + return createGson().fromJson(json, RawMap.class); + } - return open(rm); + public static Map open(File f) { + return open(getRawMap(f)); } public static Map open(RawMap map) { diff --git a/src/main/java/fr/ynerant/leveleditor/client/main/Main.java b/src/main/java/fr/ynerant/leveleditor/client/main/Main.java index f9d3960..61de694 100644 --- a/src/main/java/fr/ynerant/leveleditor/client/main/Main.java +++ b/src/main/java/fr/ynerant/leveleditor/client/main/Main.java @@ -4,6 +4,7 @@ import fr.ynerant.leveleditor.api.editor.EditorAPI; import fr.ynerant.leveleditor.api.editor.RawMap; import fr.ynerant.leveleditor.api.editor.sprites.SpriteRegister; import fr.ynerant.leveleditor.frame.MainFrame; +import fr.ynerant.leveleditor.game.GameFrame; import joptsimple.OptionParser; import joptsimple.OptionSet; import joptsimple.OptionSpec; @@ -210,6 +211,21 @@ public class Main { return true; } + public static boolean launchGameMode() { + System.out.println("Lancement du jeu ..."); + JFileChooser jfc = EditorAPI.createJFC(); + jfc.showOpenDialog(MainFrame.getInstance()); + if (jfc.getSelectedFile() == null) + return false; + + RawMap map = EditorAPI.getRawMap(jfc.getSelectedFile()); + System.out.println(map); + + new GameFrame(map); + + return true; + } + /** * Accesseur disant si le jeu est lancé en développement ou non. * diff --git a/src/main/java/fr/ynerant/leveleditor/editor/CollidPanel.java b/src/main/java/fr/ynerant/leveleditor/editor/CollidPanel.java index b8ef8c5..c786fc7 100644 --- a/src/main/java/fr/ynerant/leveleditor/editor/CollidPanel.java +++ b/src/main/java/fr/ynerant/leveleditor/editor/CollidPanel.java @@ -69,7 +69,7 @@ public class CollidPanel extends JPanel { } } - private boolean isEmpty(BufferedImage image) { + public static boolean isEmpty(BufferedImage image) { int allrgba = 0; for (int x = 0; x < image.getWidth(); ++x) { diff --git a/src/main/java/fr/ynerant/leveleditor/frame/MainFrame.java b/src/main/java/fr/ynerant/leveleditor/frame/MainFrame.java index 1e1ec4e..b1e26a5 100644 --- a/src/main/java/fr/ynerant/leveleditor/frame/MainFrame.java +++ b/src/main/java/fr/ynerant/leveleditor/frame/MainFrame.java @@ -1,6 +1,8 @@ package fr.ynerant.leveleditor.frame; +import fr.ynerant.leveleditor.api.editor.EditorAPI; import fr.ynerant.leveleditor.client.main.Main; +import fr.ynerant.leveleditor.editor.EditorFrame; import fr.ynerant.leveleditor.frame.listeners.ChangeLAFListener; import fr.ynerant.leveleditor.frame.listeners.CreateMapListener; import fr.ynerant.leveleditor.frame.listeners.OpenMapListener; @@ -9,6 +11,8 @@ import org.apache.logging.log4j.core.Logger; import javax.swing.*; import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; import java.awt.event.KeyEvent; /** @@ -86,6 +90,16 @@ public class MainFrame extends JFrame { menuBar.add(display); this.setJMenuBar(menuBar); + + JButton start = new JButton("Commencer la partie !"); + start.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent actionEvent) { + if (Main.launchGameMode()) + getInstance().dispose(); + } + }); + this.setContentPane(start); } /** diff --git a/src/main/java/fr/ynerant/leveleditor/game/GameFrame.java b/src/main/java/fr/ynerant/leveleditor/game/GameFrame.java new file mode 100644 index 0000000..90c85f6 --- /dev/null +++ b/src/main/java/fr/ynerant/leveleditor/game/GameFrame.java @@ -0,0 +1,89 @@ +package fr.ynerant.leveleditor.game; + +import fr.ynerant.leveleditor.api.editor.RawCase; +import fr.ynerant.leveleditor.api.editor.RawMap; +import fr.ynerant.leveleditor.api.editor.sprites.Sprite; +import fr.ynerant.leveleditor.api.editor.sprites.SpriteRegister; +import fr.ynerant.leveleditor.editor.CollidPanel; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.WindowEvent; +import java.awt.event.WindowListener; + +public class GameFrame extends JFrame implements WindowListener { + private final RawMap map; + + public GameFrame(RawMap map) { + super("Jeu"); + + 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.addWindowListener(this); + this.setContentPane(new Grid()); + + setVisible(true); + + repaint(); + } + + public RawMap getMap() { + return map; + } + + private class Grid extends JPanel { + @Override + protected void paintComponent(Graphics _g) { + Graphics2D g = (Graphics2D) _g; + + if (getMap().getFont() != null) + g.drawImage(getMap().getFont(), null, null); + + SpriteRegister.refreshAllSprites(); + int SPRITE_SIZE = 32; + for (RawCase c : getMap().getCases()) { + Sprite s1 = SpriteRegister.getCategory(c.getCoucheOne().getCategory()).getSprites().get(c.getCoucheOne().getIndex()); + Sprite s2 = SpriteRegister.getCategory(c.getCoucheTwo().getCategory()).getSprites().get(c.getCoucheTwo().getIndex()); + Sprite s3 = SpriteRegister.getCategory(c.getCoucheThree().getCategory()).getSprites().get(c.getCoucheThree().getIndex()); + g.drawImage(s1.getImage(), SPRITE_SIZE * c.getPosX(), SPRITE_SIZE * c.getPosY(), SPRITE_SIZE, SPRITE_SIZE, Color.white, null); + if (!CollidPanel.isEmpty(s2.getImage())) + g.drawImage(s2.getImage(), SPRITE_SIZE * c.getPosX(), SPRITE_SIZE * c.getPosY(), SPRITE_SIZE, SPRITE_SIZE, null, null); + if (!CollidPanel.isEmpty(s3.getImage())) + g.drawImage(s3.getImage(), SPRITE_SIZE * c.getPosX(), SPRITE_SIZE * c.getPosY(), SPRITE_SIZE, SPRITE_SIZE, null, null); + } + } + } + + @Override + public void windowActivated(WindowEvent event) { + } + + @Override + public void windowClosed(WindowEvent event) { + } + + @Override + public void windowClosing(WindowEvent event) { + dispose(); + } + + @Override + public void windowDeactivated(WindowEvent event) { + } + + @Override + public void windowDeiconified(WindowEvent event) { + } + + @Override + public void windowIconified(WindowEvent event) { + } + + @Override + public void windowOpened(WindowEvent event) { + } +}