package io.reisub.dreambot.util.ui; import org.dreambot.api.methods.skills.Skill; import org.dreambot.api.methods.skills.SkillTracker; import org.dreambot.api.methods.skills.Skills; import org.dreambot.api.script.ScriptManager; import org.dreambot.api.utilities.Timer; import java.awt.*; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.image.BufferedImage; import java.util.ArrayList; import java.util.Arrays; public class UI implements MouseListener { private final Color blue = new Color(23, 147, 209); private final Color gray = new Color(51, 51, 51); private final Color grayTransparent = new Color(51, 51, 51, 245); private final String scriptName; private static UI ui; private Graphics g; private int X = 0; private int Y = 0; private final int X_PADDING = 5; private final int Y_PADDING = 35; private final int LINE_SPACING = 20; private int lines = 0; private boolean hide; private boolean drawTime = true; private boolean drawExperience = true; private final java.util.List skillsToTrack; private int customLines = 0; private final Timer timer; public static UI getInstance(String scriptName) { if (ui == null) { ui = new UI(scriptName); } return ui; } private UI(String scriptName) { this.scriptName = scriptName; hide = false; timer = new Timer(); skillsToTrack = new ArrayList<>(); } public void pause() { timer.pause(); } public void resume() { timer.resume(); } public void addSkills(Skill... skills) { SkillTracker.start(skills); skillsToTrack.addAll(Arrays.asList(skills)); } public void setTime(boolean b) { this.drawTime = b; } public void setCustomLines(int customLines) { this.customLines = customLines; } public int getHourlyRate(int current) { return timer.getHourlyRate(current); } public void draw(Graphics g) { this.g = g; this.lines = 0; drawUIToggle(); if (hide) return; drawInfoBox(); if (ScriptManager.getScriptManager().isPaused()) { drawString(scriptName + " [PAUSED]", Color.red); } else { drawString(scriptName, blue); } if (drawTime) drawString("Time running: " + timer.formatTime()); if (drawExperience) drawExperience(); } private void drawUIToggle() { int w = 40; int h = 15; g.setColor(blue); g.drawRect(X, Y, w, h); g.setColor(gray); g.fillRect(X+1, Y+1, w-1, h-1); g.setColor(Color.white); if (hide) { g.drawString("show", X+5, Y+12); } else { g.drawString("hide", X+5, Y+12); } } private void drawInfoBox() { int x = 0; int y = 20; int w = 250; int expectedLines = 1; expectedLines = drawTime ? expectedLines + 1 : expectedLines; if (drawExperience) { expectedLines += skillsToTrack.size() * 3; } expectedLines += customLines; int h = expectedLines * 20; g.setColor(blue); g.drawRect(x,y, w, h); g.setColor(grayTransparent); g.fillRect(x+1, y+1, w-1, h-1); } private void drawExperience() { for (Skill s : skillsToTrack) { drawString(s.getName() + ": " + Skills.getRealLevel(s) + " (" + SkillTracker.getGainedLevels(s) + ")"); drawString(SkillTracker.getGainedExperiencePerHour(s) + " xp/h (" + SkillTracker.getGainedLevels(s) + ")", 10); drawString("TTL: " + Timer.formatTime(SkillTracker.getTimeToLevel(s)), 10); } } public void drawString(String s) { drawString(s, Color.white); } public void drawString(String s, Color color) { drawString(s, color, 0); } public void drawString(String s, int xPadding) { drawString(s, Color.white, xPadding); } public void drawString(String s, Color color, int xPadding) { g.setColor(color); g.drawString(s, X_PADDING + xPadding, Y_PADDING + (LINE_SPACING * lines)); lines++; } @Override public void mouseClicked(MouseEvent mouseEvent) { if (mouseEvent.getButton() == 1) { Rectangle r = new Rectangle(0, 0, 40, 15); if (r.contains(mouseEvent.getPoint())) { hide = !hide; } } } @Override public void mousePressed(MouseEvent mouseEvent) { } @Override public void mouseReleased(MouseEvent mouseEvent) { } @Override public void mouseEntered(MouseEvent mouseEvent) { } @Override public void mouseExited(MouseEvent mouseEvent) { } }