From 37f0b663fcdc9655bcec2b69faefed1a0c2d51f1 Mon Sep 17 00:00:00 2001 From: Yohann D'ANELLO Date: Sun, 5 Apr 2020 01:41:10 +0200 Subject: [PATCH] Fixed collisions in editor and sample map --- samples/Test.gmap | Bin 1872 -> 1953 bytes .../leveleditor/api/editor/EditorAPI.scala | 2 +- .../leveleditor/editor/CollidPanel.scala | 17 ++++++----------- .../ynerant/leveleditor/editor/MapPanel.scala | 17 ++--------------- .../listeners/CollidMapMouseListener.scala | 9 +++++++-- .../ynerant/leveleditor/game/GameFrame.scala | 2 -- 6 files changed, 16 insertions(+), 31 deletions(-) diff --git a/samples/Test.gmap b/samples/Test.gmap index 966847eb18822edd9a44f343bc80b8eb5bb0f6ec..eb7a7d819444b5751df0d64123e89f0973a11eda 100644 GIT binary patch literal 1953 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 { - if (!CollidPanel.isEmpty(c.getCoucheOne.getImage)) { - g.drawImage(c.getCoucheOne.getImage, x + c.getPosX * 34 + 2, y + c.getPosY * 34 + 2, 32, 32, null) - if (!CollidPanel.isEmpty(c.getCoucheTwo.getImage)) { - g.drawImage(c.getCoucheTwo.getImage, x + c.getPosX * 34 + 2, y + c.getPosY * 34 + 2, 32, 32, null) - if (!CollidPanel.isEmpty(c.getCoucheThree.getImage)) - g.drawImage(c.getCoucheThree.getImage, x + c.getPosX * 34 + 2, y + c.getPosY * 34 + 2, 32, 32, null) - } - } + if (!CollidPanel.isEmpty(c.getCoucheOne.getImage)) g.drawImage(c.getCoucheOne.getImage, x + c.getPosX * 34 + 2, y + c.getPosY * 34 + 2, 32, 32, null) + if (!CollidPanel.isEmpty(c.getCoucheTwo.getImage)) g.drawImage(c.getCoucheTwo.getImage, x + c.getPosX * 34 + 2, y + c.getPosY * 34 + 2, 32, 32, null) + if (!CollidPanel.isEmpty(c.getCoucheThree.getImage)) g.drawImage(c.getCoucheThree.getImage, x + c.getPosX * 34 + 2, y + c.getPosY * 34 + 2, 32, 32, null) }) getMap.getAllCases.foreach(c => { - if (c.getCollision.equals(Collision.ANY)) { + if (!c.getCollision.equals(Collision.ANY)) { val alpha = new BufferedImage(16, 16, BufferedImage.TYPE_INT_ARGB) - if (c.getCollision eq Collision.FULL) { + if (c.getCollision.equals(Collision.FULL)) { val grap = alpha.createGraphics grap.setColor(new Color(0, 0, 0, 100)) grap.fillRect(0, 0, 16, 16) grap.dispose() } - else if (c.getCollision eq Collision.PARTIAL) { + else if (c.getCollision.equals(Collision.PARTIAL)) { val grap = alpha.createGraphics grap.setColor(new Color(255, 0, 255, 70)) grap.fillRect(0, 0, 16, 16) diff --git a/src/main/scala/fr/ynerant/leveleditor/editor/MapPanel.scala b/src/main/scala/fr/ynerant/leveleditor/editor/MapPanel.scala index 5146e49..732dcaa 100644 --- a/src/main/scala/fr/ynerant/leveleditor/editor/MapPanel.scala +++ b/src/main/scala/fr/ynerant/leveleditor/editor/MapPanel.scala @@ -18,21 +18,8 @@ class MapPanel(val frame: EditorFrame) extends JPanel { g.drawImage(getMap.getFont, x, y, width, height, null) getMap.getAllCases.foreach(c => { // BufferedImage image; if (!isEmpty(c.getCoucheOne.getImage)) 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) 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) 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); - }*/ + if (!isEmpty(c.getCoucheTwo.getImage) && frame.getSelectedLayerIndex >= 1) g.drawImage(c.getCoucheTwo.getImage, x + c.getPosX * 34 + 2, y + c.getPosY * 34 + 2, 32, 32, null) + if (!isEmpty(c.getCoucheThree.getImage) && frame.getSelectedLayerIndex == 2) g.drawImage(c.getCoucheThree.getImage, x + c.getPosX * 34 + 2, y + c.getPosY * 34 + 2, 32, 32, null) }) } diff --git a/src/main/scala/fr/ynerant/leveleditor/frame/listeners/CollidMapMouseListener.scala b/src/main/scala/fr/ynerant/leveleditor/frame/listeners/CollidMapMouseListener.scala index 84b2b5e..1082122 100644 --- a/src/main/scala/fr/ynerant/leveleditor/frame/listeners/CollidMapMouseListener.scala +++ b/src/main/scala/fr/ynerant/leveleditor/frame/listeners/CollidMapMouseListener.scala @@ -2,7 +2,7 @@ package fr.ynerant.leveleditor.frame.listeners import java.awt.event.{MouseAdapter, MouseEvent} -import fr.ynerant.leveleditor.api.editor.Case +import fr.ynerant.leveleditor.api.editor.{Case, Collision} import fr.ynerant.leveleditor.editor.{CollidPanel, EditorFrame} @@ -15,7 +15,12 @@ class CollidMapMouseListener(val panel: CollidPanel, val frame: EditorFrame) ext val y = panel.getHeight / 2 - map.getFont.getHeight val c = map.getCase((event.getX - x + 2) / 34, (event.getY - y + 2) / 34) if (c != null && event.getX - x >= 2 && event.getY - y >= 2) { - val n = Case.create(c.getPosX, c.getPosY, c.getCoucheOne, c.getCoucheTwo, c.getCoucheThree, c.getCollision) + val col = c.getCollision match { + case Collision.ANY => Collision.PARTIAL + case Collision.PARTIAL => Collision.FULL + case Collision.FULL => Collision.ANY + } + val n = Case.create(c.getPosX, c.getPosY, c.getCoucheOne, c.getCoucheTwo, c.getCoucheThree, col) map.setCase((event.getX - x + 2) / 34, (event.getY - y + 2) / 34, n) panel.repaint() } diff --git a/src/main/scala/fr/ynerant/leveleditor/game/GameFrame.scala b/src/main/scala/fr/ynerant/leveleditor/game/GameFrame.scala index 5923b26..b7b50e4 100644 --- a/src/main/scala/fr/ynerant/leveleditor/game/GameFrame.scala +++ b/src/main/scala/fr/ynerant/leveleditor/game/GameFrame.scala @@ -161,8 +161,6 @@ class GameFrame(val map: RawMap) extends JFrame("Jeu") { val accessible = getMap.getCases.filter(c => !Collision.FULL.equals(c.getCollision)) if (accessible.exists(c => c.getPosX > 0 && pathFinder.nextPos(c.getPosX, c.getPosY) == null) || !accessible.exists(c => c.getPosX == 0 && !c.getCollision.equals(Collision.FULL))) { - println(accessible.exists(c => c.getPosX > 0 && pathFinder.nextPos(c.getPosX, c.getPosY) == null)) - println(!accessible.exists(c => c.getPosX == 0 && pathFinder.nextPos(c.getPosX, c.getPosY) != null)) // We ensure that the end of the game is accessible from everywhere, the tower should not block the game c.setCollision(Collision.ANY) pathFinder.invalidate()