InputHandler.java

package com.vikingz.campustycoon.Util;

import java.util.ArrayList;
import java.util.List;

import com.badlogic.gdx.InputProcessor;

import com.vikingz.campustycoon.UI.Camera;
import com.vikingz.campustycoon.UI.Window;
import com.vikingz.campustycoon.UI.Components.Component;

public class InputHandler implements InputProcessor {
	private static final int LeftClick = 0;
	@SuppressWarnings("unused")
	private static final int RightClick = 1;
	@SuppressWarnings("unused")
	private static final int MiddleClick = 2;
	
	public static List<Component> clickables = new ArrayList<Component>();
	@SuppressWarnings("unused")
	private static boolean leftClickDown = false;
	
	
	// Removes a component from clickables, so that it stops being processed
	// Does a linear search through the list to find the component
	public static void remove(Component component) {
		for (int index = 0; index < clickables.size(); index++) {
			if (component.equals(clickables.get(index))) {
				clickables.remove(index);
				return;
			}
		}
	}
	
	
	public static void clear() {
		clickables = new ArrayList<Component>();
	}
	
	public static void add(Component button) {
		clickables.add(button);
	}
	
	public static void add(List<Component> buttons) {
		clickables.addAll(buttons);
	}
	
	public boolean keyDown(int keycode) {
		return false;
	}

	public boolean keyUp(int keycode) {
		return false;
	}

	public boolean keyTyped(char character) {
		return false;
	}

	// Called on click
	public boolean touchDown(int x, int y, int pointer, int button) {
		if (button == LeftClick) {
			leftClickDown = true;
		}
		
		for (Component btn : clickables){
			if (isTouchWithinButton(transformX(x), transformY(y), btn)) {
				btn.onClick();
				Camera.update();
				return true;
			}
		}
		
		Camera.click(x, y, button);
		return true;
	}

	private int transformX(int x) {
		return (int)(x * Component.widthRatio);
	}
	private int transformY(int y) {
		return Window.defaultHeight - (int)(y * Component.heightRatio);
	}

	public boolean isTouchWithinButton(int x, int y, Component button) {
		if (button == null) {
			return false; // Button is null, so return false to avoid a NullPointerException
		}
        // Assuming button's (x, y) represents the bottom-left corner and has width and height
        return x >= button.getX() && x <= button.getX() + button.getWidth()
                && y >= button.getY() && y <= button.getY() + button.getHeight();
    }

	public boolean touchUp(int x, int y, int pointer, int button) {
		if (button == LeftClick) {
			leftClickDown = false;
			Camera.lift(x, y, button);
		}
		return true;
	}

	public boolean touchDragged(int x, int y, int pointer) {
		Camera.drag(x, y);
		return true;
	}

	public boolean mouseMoved(int x, int y) {
		Camera.checkMouseOverTile(x ,y);
		Camera.drawCursor();
		return true;
	}

	public boolean scrolled(float amountX, float amountY) {
		Camera.scroll(amountY);
		return true;
	}

	public boolean touchCancelled(int screenX, int screenY, int pointer, int button) {
		return false;
	}
}