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,12 +4,22 @@ 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);
|
||||
keys.put(Keys.D, Name.MOVE_RIGHT);
|
||||
@ -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);
|
||||
|
@ -7,7 +7,6 @@ public class Global {
|
||||
|
||||
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