mirror of
				https://github.com/ynerant/Level-Editor.git
				synced 2025-11-04 07:52:10 +01:00 
			
		
		
		
	Fixed collisions in editor and sample map
This commit is contained in:
		
										
											Binary file not shown.
										
									
								
							@@ -66,7 +66,7 @@ object EditorAPI {
 | 
				
			|||||||
		implicit val formats: DefaultFormats.type = DefaultFormats
 | 
							implicit val formats: DefaultFormats.type = DefaultFormats
 | 
				
			||||||
		val json = Serialization.writePretty(map)
 | 
							val json = Serialization.writePretty(map)
 | 
				
			||||||
		try {
 | 
							try {
 | 
				
			||||||
			assert(file.createNewFile)
 | 
								assert(file.exists() || file.createNewFile)
 | 
				
			||||||
			val bos = new BufferedOutputStream(new GZIPOutputStream(new FileOutputStream(file)))
 | 
								val bos = new BufferedOutputStream(new GZIPOutputStream(new FileOutputStream(file)))
 | 
				
			||||||
			bos.write(json.getBytes(StandardCharsets.UTF_8))
 | 
								bos.write(json.getBytes(StandardCharsets.UTF_8))
 | 
				
			||||||
			bos.close()
 | 
								bos.close()
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -31,26 +31,21 @@ class CollidPanel(val frame: EditorFrame) extends JPanel {
 | 
				
			|||||||
		val height = img.getHeight * 2
 | 
							val height = img.getHeight * 2
 | 
				
			||||||
		g.drawImage(getMap.getFont, x, y, width, height, null)
 | 
							g.drawImage(getMap.getFont, x, y, width, height, null)
 | 
				
			||||||
		getMap.getAllCases.foreach(c => {
 | 
							getMap.getAllCases.foreach(c => {
 | 
				
			||||||
			if (!CollidPanel.isEmpty(c.getCoucheOne.getImage)) {
 | 
								if (!CollidPanel.isEmpty(c.getCoucheOne.getImage)) g.drawImage(c.getCoucheOne.getImage, x + c.getPosX * 34 + 2, y + c.getPosY * 34 + 2, 32, 32, null)
 | 
				
			||||||
				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.getCoucheTwo.getImage)) {
 | 
								if (!CollidPanel.isEmpty(c.getCoucheThree.getImage)) g.drawImage(c.getCoucheThree.getImage, x + c.getPosX * 34 + 2, y + c.getPosY * 34 + 2, 32, 32, null)
 | 
				
			||||||
					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 => {
 | 
							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)
 | 
									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
 | 
										val grap = alpha.createGraphics
 | 
				
			||||||
					grap.setColor(new Color(0, 0, 0, 100))
 | 
										grap.setColor(new Color(0, 0, 0, 100))
 | 
				
			||||||
					grap.fillRect(0, 0, 16, 16)
 | 
										grap.fillRect(0, 0, 16, 16)
 | 
				
			||||||
					grap.dispose()
 | 
										grap.dispose()
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				else if (c.getCollision eq Collision.PARTIAL) {
 | 
									else if (c.getCollision.equals(Collision.PARTIAL)) {
 | 
				
			||||||
					val grap = alpha.createGraphics
 | 
										val grap = alpha.createGraphics
 | 
				
			||||||
					grap.setColor(new Color(255, 0, 255, 70))
 | 
										grap.setColor(new Color(255, 0, 255, 70))
 | 
				
			||||||
					grap.fillRect(0, 0, 16, 16)
 | 
										grap.fillRect(0, 0, 16, 16)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,21 +18,8 @@ class MapPanel(val frame: EditorFrame) extends JPanel {
 | 
				
			|||||||
		g.drawImage(getMap.getFont, x, y, width, height, null)
 | 
							g.drawImage(getMap.getFont, x, y, width, height, null)
 | 
				
			||||||
		getMap.getAllCases.foreach(c => { //		BufferedImage image;
 | 
							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 (!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)
 | 
								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)
 | 
				
			||||||
							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);
 | 
					 | 
				
			||||||
						}*/
 | 
					 | 
				
			||||||
		})
 | 
							})
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,7 +2,7 @@ package fr.ynerant.leveleditor.frame.listeners
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import java.awt.event.{MouseAdapter, MouseEvent}
 | 
					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}
 | 
					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 y = panel.getHeight / 2 - map.getFont.getHeight
 | 
				
			||||||
		val c = map.getCase((event.getX - x + 2) / 34, (event.getY - y + 2) / 34)
 | 
							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) {
 | 
							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)
 | 
								map.setCase((event.getX - x + 2) / 34, (event.getY - y + 2) / 34, n)
 | 
				
			||||||
			panel.repaint()
 | 
								panel.repaint()
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -161,8 +161,6 @@ class GameFrame(val map: RawMap) extends JFrame("Jeu") {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			val accessible = getMap.getCases.filter(c => !Collision.FULL.equals(c.getCollision))
 | 
								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))) {
 | 
								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
 | 
									// We ensure that the end of the game is accessible from everywhere, the tower should not block the game
 | 
				
			||||||
				c.setCollision(Collision.ANY)
 | 
									c.setCollision(Collision.ANY)
 | 
				
			||||||
				pathFinder.invalidate()
 | 
									pathFinder.invalidate()
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user