@Override public void refresh() { float ingameSize = App.WORLD_SCALE / 2; float inguiSize = gui.getSquareSize() / 4; float compensatingRatio = ingameSize / inguiSize; int arrowSize = (int) (placement.equals(Placement.RELATIVE) ? ingameSize : inguiSize); Vector2 offset = new Vector2(); float textOffset = 0; switch (orientation) { case TOP_LEFT: offset.y = -1; textOffset = 1; break; case TOP_RIGHT: offset.y = -1; offset.x = -1; textOffset = -1; break; case BOTTOM_LEFT: textOffset = 1; break; case BOTTOM_RIGHT: offset.x = -1; textOffset = -1; break; } arrow.set(x + offset.x * arrowSize, y + offset.y * arrowSize, arrowSize, arrowSize); Vector2 textSize = new Vector2(text.getTextWidth() + arrowSize, Math.max(text.getTextHeight(), arrowSize)); text.set( x + textOffset * arrowSize + offset.x * textSize.x, y + offset.y * textSize.y, textSize.x, textSize.y); if (placement.equals(Placement.RELATIVE)) { text.setScale(compensatingRatio); } backgroud.set(text); text.refresh(); }