Add UI support

This commit is contained in:
Yuri Moens 2021-10-19 14:09:51 +02:00
parent 8752f0f121
commit 9609f2ba3e
Signed by: ymo
GPG Key ID: F6D51D6FE15BE924
4 changed files with 310 additions and 0 deletions

View File

@ -3,6 +3,7 @@
<component name="NewModuleRootManager" inherit-compiler-output="true"> <component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output /> <exclude-output />
<content url="file://$MODULE_DIR$"> <content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" /> <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
</content> </content>
<orderEntry type="inheritedJdk" /> <orderEntry type="inheritedJdk" />

View File

@ -0,0 +1,60 @@
package io.reisub.dreambot.util;
import io.reisub.dreambot.util.ui.UI;
import org.dreambot.api.script.AbstractScript;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
public abstract class CAbstractScript extends AbstractScript implements MouseListener {
private final UI ui;
public CAbstractScript() {
ui = UI.getInstance(getSDNName());
}
public UI getUI() {
return ui;
}
@Override
public void onPaint(Graphics g){
ui.draw(g);
}
@Override
public void onPause() {
ui.pause();
}
@Override
public void onResume() {
ui.resume();
}
@Override
public void mouseClicked(MouseEvent mouseEvent) {
ui.mouseClicked(mouseEvent);
}
@Override
public void mousePressed(MouseEvent mouseEvent) {
ui.mousePressed(mouseEvent);
}
@Override
public void mouseReleased(MouseEvent mouseEvent) {
ui.mouseReleased(mouseEvent);
}
@Override
public void mouseEntered(MouseEvent mouseEvent) {
ui.mouseEntered(mouseEvent);
}
@Override
public void mouseExited(MouseEvent mouseEvent) {
ui.mouseExited(mouseEvent);
}
}

View File

@ -0,0 +1,60 @@
package io.reisub.dreambot.util;
import io.reisub.dreambot.util.ui.UI;
import org.dreambot.api.script.impl.TaskScript;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
public abstract class CTaskScript extends TaskScript implements MouseListener {
private final UI ui;
public CTaskScript() {
ui = UI.getInstance(getSDNName());
}
public UI getUI() {
return ui;
}
@Override
public void onPaint(Graphics g){
ui.draw(g);
}
@Override
public void onPause() {
ui.pause();
}
@Override
public void onResume() {
ui.resume();
}
@Override
public void mouseClicked(MouseEvent mouseEvent) {
ui.mouseClicked(mouseEvent);
}
@Override
public void mousePressed(MouseEvent mouseEvent) {
ui.mousePressed(mouseEvent);
}
@Override
public void mouseReleased(MouseEvent mouseEvent) {
ui.mouseReleased(mouseEvent);
}
@Override
public void mouseEntered(MouseEvent mouseEvent) {
ui.mouseEntered(mouseEvent);
}
@Override
public void mouseExited(MouseEvent mouseEvent) {
ui.mouseExited(mouseEvent);
}
}

View File

@ -0,0 +1,189 @@
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<Skill> 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) {
}
}