InteractiveNode now recieves "mouseEnter" and "mouseLeave" respectively
This commit is contained in:
		
							parent
							
								
									a20e960c19
								
							
						
					
					
						commit
						9abcacb104
					
				| @ -175,6 +175,7 @@ public class GladiatorBrawler extends ApplicationAdapter { | ||||
| 	public void initializeTestGUI() { | ||||
| 		Sprite img1 = SpriteLoader.loadSprite(Name.WALLIMG, 0, 0, 32, 64); | ||||
| 		Sprite img2 = SpriteLoader.loadSprite(Name.WALLIMG, 1, 0, 32, 64); | ||||
| 		System.out.println(img1.getRegionHeight() + " - " + img1.getRegionWidth()); | ||||
| 		ButtonNode button = new ButtonNode("test-button", img1, img2) { | ||||
| 			@Override | ||||
| 			public void click(float x, float y, Input.Buttons mouseButton) { | ||||
| @ -188,6 +189,8 @@ public class GladiatorBrawler extends ApplicationAdapter { | ||||
| 	@Override | ||||
| 	public void resize(int width, int height) { | ||||
| 		super.resize(width, height); | ||||
| 		RenderingSystem.screenHeight = height; | ||||
| 		RenderingSystem.screenWidth = width; | ||||
| 		RenderingSystem rs = engine.getSystem(RenderingSystem.class); | ||||
| 		float aspectratio = ((float) width) / ((float) height); | ||||
| 		rs.aspectratio = aspectratio; | ||||
|  | ||||
| @ -1,5 +1,7 @@ | ||||
| package com.saltosion.gladiator.gui; | ||||
| 
 | ||||
| import java.util.ArrayList; | ||||
| 
 | ||||
| public class GUIManager { | ||||
| 	private final GUINode rootNode; | ||||
| 
 | ||||
| @ -11,4 +13,13 @@ public class GUIManager { | ||||
| 		return this.rootNode; | ||||
| 	} | ||||
| 	 | ||||
| 	public ArrayList<GUINode> getAllRecursiveChildren(GUINode guiNode) { | ||||
| 		ArrayList<GUINode> list = new ArrayList<GUINode>(); | ||||
| 		for (GUINode child : guiNode.getChildren()) { | ||||
| 			list.add(child); | ||||
| 			list.addAll(getAllRecursiveChildren(child)); | ||||
| 		} | ||||
| 		return list; | ||||
| 	} | ||||
| 	 | ||||
| } | ||||
|  | ||||
| @ -4,11 +4,21 @@ import java.util.HashMap; | ||||
| 
 | ||||
| import com.badlogic.gdx.Input.Keys; | ||||
| import com.badlogic.gdx.InputProcessor; | ||||
| import com.badlogic.gdx.graphics.g2d.Sprite; | ||||
| import com.badlogic.gdx.utils.Array; | ||||
| import com.saltosion.gladiator.gui.GUINode; | ||||
| import com.saltosion.gladiator.gui.ImageNode; | ||||
| import com.saltosion.gladiator.gui.InteractiveNode; | ||||
| import com.saltosion.gladiator.systems.RenderingSystem; | ||||
| import com.saltosion.gladiator.util.AppUtil; | ||||
| import com.saltosion.gladiator.util.Global; | ||||
| import com.saltosion.gladiator.util.Name; | ||||
| 
 | ||||
| public class InputHandler implements InputProcessor { | ||||
| 
 | ||||
| 	public HashMap<Integer, String> keys = new HashMap<Integer, String>(); | ||||
| 	 | ||||
| 	private Array<String> hoveredUIElements = new Array<String>(); | ||||
| 
 | ||||
| 	public InputHandler() { | ||||
| 		keys.put(Keys.A, Name.MOVE_LEFT); | ||||
| @ -61,6 +71,38 @@ public class InputHandler implements InputProcessor { | ||||
| 
 | ||||
| 	@Override | ||||
| 	public boolean mouseMoved(int screenX, int screenY) { | ||||
| 		float x = (float)(screenX)/RenderingSystem.screenWidth; | ||||
| 		float y = 1-(float)(screenY)/RenderingSystem.screenHeight; | ||||
| 		 | ||||
| 		for (GUINode node : AppUtil.guiManager.getAllRecursiveChildren(AppUtil.guiManager.getRootNode())) { | ||||
| 			if (node instanceof ImageNode) { | ||||
| 				Sprite s = ((ImageNode) node).getImage(); | ||||
| 				float height = (s.getHeight()*Global.SPRITE_SCALE)/AppUtil.VPHEIGHT_CONST; | ||||
| 				float width = (s.getWidth()*Global.SPRITE_SCALE)/(AppUtil.VPHEIGHT_CONST*RenderingSystem.aspectratio); | ||||
| 				float x0 = node.getPosition().x-width/2; | ||||
| 				float x1 = node.getPosition().x+width/2; | ||||
| 				float y0 = node.getPosition().y-height/2; | ||||
| 				float y1 = node.getPosition().y+height/2; | ||||
| 				x += 0.01f; | ||||
| 				if (node instanceof InteractiveNode) { | ||||
| 					InteractiveNode interactiveNode = (InteractiveNode) node; | ||||
| 					 | ||||
| 					if (x >= x0 && x <= x1 && y >= y0 && y <= y1) { | ||||
| 						if (hoveredUIElements.contains(node.getID(), false)) { | ||||
| 							continue; | ||||
| 						} | ||||
| 						hoveredUIElements.add(node.getID()); | ||||
| 						interactiveNode.mouseEnter(x, y); | ||||
| 					} else { | ||||
| 						if (!hoveredUIElements.contains(node.getID(), false)) { | ||||
| 							continue; | ||||
| 						} | ||||
| 						hoveredUIElements.removeValue(node.getID(), false); | ||||
| 						interactiveNode.mouseLeave(x, y); | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 		return false; | ||||
| 	} | ||||
| 
 | ||||
|  | ||||
| @ -37,7 +37,10 @@ public class RenderingSystem extends EntitySystem { | ||||
| 	private BitmapFont font; | ||||
| 	private ShapeRenderer debugRenderer; | ||||
| 	private OrthographicCamera camera; | ||||
| 	public float aspectratio; | ||||
| 	 | ||||
| 	public static float aspectratio; | ||||
| 	public static int screenHeight = 0; | ||||
| 	public static int screenWidth = 0; | ||||
| 
 | ||||
| 	private boolean debug = true; | ||||
| 	private final Color debugColor = new Color(0, 1, 0, 1); | ||||
| @ -115,7 +118,7 @@ public class RenderingSystem extends EntitySystem { | ||||
| 		position.add(node.getPosition()); | ||||
| 		if (node instanceof ImageNode) { | ||||
| 			Sprite s = ((ImageNode) node).getImage(); | ||||
| 			s.setPosition(position.x*AppUtil.VPHEIGHT_CONST*aspectratio-s.getWidth()/2+camera.position.x,  | ||||
| 			s.setPosition(position.x*AppUtil.VPHEIGHT_CONST*aspectratio-s.getWidth()/2+camera.position.x, | ||||
| 					position.y*AppUtil.VPHEIGHT_CONST-s.getHeight()/2+camera.position.y); | ||||
| 			s.draw(batch); | ||||
| 		} | ||||
|  | ||||
| @ -6,8 +6,7 @@ public class Global { | ||||
|     public static final String PLAYERIMG = "PLAYERIMG"; | ||||
| 
 | ||||
|     public static final String GAME_NAME = "Gladiator Brawl"; | ||||
| 
 | ||||
|     public static final int VPHEIGHT_CONST = 14; | ||||
|      | ||||
|     public static final float SPRITE_SCALE = 1 / 16f; | ||||
| 
 | ||||
| } | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Allexit
						Allexit