package ch.asynk.rustanddust.ui; import com.badlogic.gdx.Gdx; import ch.asynk.rustanddust.game.Hud; public enum Position { ABSOLUTE, TOP_LEFT, TOP_RIGHT, TOP_CENTER, MIDDLE_LEFT, MIDDLE_RIGHT, MIDDLE_CENTER, BOTTOM_LEFT, BOTTOM_RIGHT, BOTTOM_CENTER; public Position verticalMirror() { Position p = this; switch(this) { case TOP_LEFT: p = TOP_RIGHT; break; case MIDDLE_LEFT: p = MIDDLE_RIGHT; break; case BOTTOM_LEFT: p = BOTTOM_RIGHT; break; case TOP_RIGHT: p = TOP_LEFT; break; case MIDDLE_RIGHT: p = MIDDLE_LEFT; break; case BOTTOM_RIGHT: p = BOTTOM_LEFT; break; } return p; } public Position horizontalMirror() { Position p = this; switch(this) { case TOP_LEFT: p = BOTTOM_LEFT; break; case TOP_CENTER: p = BOTTOM_CENTER; break; case TOP_RIGHT: p = BOTTOM_RIGHT; break; case BOTTOM_LEFT: p = TOP_LEFT; break; case BOTTOM_CENTER: p = TOP_CENTER; break; case BOTTOM_RIGHT: p = TOP_RIGHT; break; } return p; } public boolean isLeft() { boolean r = false; switch(this) { case TOP_LEFT: case MIDDLE_LEFT: case BOTTOM_LEFT: r = true; break; default: r = false; break; } return r; } public boolean isRight() { boolean r = false; switch(this) { case TOP_RIGHT: case MIDDLE_RIGHT: case BOTTOM_RIGHT: r = true; break; default: r = false; break; } return r; } public boolean isCenter() { boolean r = false; switch(this) { case TOP_CENTER: case MIDDLE_CENTER: case BOTTOM_CENTER: r = true; break; default: r = false; break; } return r; } private static int hudLeft = 0; private static int hudBottom = 0; private static int hudWidth = Gdx.graphics.getWidth(); private static int hudHeight = Gdx.graphics.getHeight(); public static void update(int width, int height) { update(0, 0, width, height); } public static void update(int left, int bottom, int width, int height) { hudLeft = left; hudBottom = bottom; hudWidth = width; hudHeight = height; } public float getX(float width) { float x = hudLeft; switch(this) { case TOP_LEFT: case MIDDLE_LEFT: case BOTTOM_LEFT: x += Hud.OFFSET; break; case TOP_CENTER: case MIDDLE_CENTER: case BOTTOM_CENTER: x += ((hudWidth - width) / 2); break; case TOP_RIGHT: case MIDDLE_RIGHT: case BOTTOM_RIGHT: x += (hudWidth - width - Hud.OFFSET); break; default: x += ((hudWidth - width) / 2); break; } return x; } public float getY(float height) { float y = hudBottom; switch(this) { case TOP_LEFT: case TOP_CENTER: case TOP_RIGHT: y += (hudHeight - height - Hud.OFFSET); break; case MIDDLE_LEFT: case MIDDLE_CENTER: case MIDDLE_RIGHT: y += ((hudHeight - height) / 2); break; case BOTTOM_LEFT: case BOTTOM_CENTER: case BOTTOM_RIGHT: y += Hud.OFFSET; break; default: y += ((hudHeight - height) / 2); break; } return y; } public float getX(Widget widget, float width) { float x = 0; switch(this) { case TOP_LEFT: case MIDDLE_LEFT: case BOTTOM_LEFT: x = widget.getX(); break; case TOP_CENTER: case MIDDLE_CENTER: case BOTTOM_CENTER: x = (widget.getX() + ((widget.getWidth() - width) / 2)); break; case TOP_RIGHT: case MIDDLE_RIGHT: case BOTTOM_RIGHT: x = (widget.getX() + widget.getWidth() - width); break; default: x = (widget.getX() + ((widget.getWidth() - width) / 2)); break; } return x; } public float getY(Widget widget, float height) { float y = 0; switch(this) { case TOP_LEFT: case TOP_CENTER: case TOP_RIGHT: y = (widget.getY() + widget.getHeight() - height); break; case MIDDLE_LEFT: case MIDDLE_CENTER: case MIDDLE_RIGHT: y = (widget.getY() + ((widget.getHeight() - height) / 2)); break; case BOTTOM_LEFT: case BOTTOM_CENTER: case BOTTOM_RIGHT: y = widget.getY(); break; default: y = (widget.getY() + ((widget.getHeight() - height) / 2)); break; } return y; } }