Cleanup new slayer task ui

This commit is contained in:
Davis Cook
2019-02-12 10:10:30 -05:00
parent 55624a3b8e
commit 9401269715
6 changed files with 111 additions and 25 deletions

View File

@@ -239,8 +239,6 @@ public class SlayerPlugin extends Plugin
.build();
clientToolbar.addNavigation(navButton);
System.out.println("=================================");
System.out.println("added slayer nav button");
if (client.getGameState() == GameState.LOGGED_IN
&& config.amount() != -1
@@ -284,7 +282,7 @@ public class SlayerPlugin extends Plugin
case HOPPING:
case LOGGING_IN:
cachedXp = 0;
currentTask = new TaskData(0, 0,0, 0, "", "", true);
currentTask = new TaskData(0, 0, 0,0, 0, "", "", true);
loginFlag = true;
highlightedTargets.clear();
break;
@@ -560,6 +558,8 @@ public class SlayerPlugin extends Plugin
return;
}
int delta = slayerExp - cachedXp;
currentTask.setElapsedXp(currentTask.getElapsedXp() + delta);
killedOne();
cachedXp = slayerExp;
}
@@ -689,6 +689,7 @@ public class SlayerPlugin extends Plugin
{
currentTask = new TaskData(isNewAssignment ? 0 : currentTask.getElapsedTime(),
isNewAssignment ? 0 : currentTask.getElapsedKills(),
isNewAssignment ? 0 : currentTask.getElapsedXp(),
amt, initAmt, location, name,
isNewAssignment ? true : currentTask.isPaused());
panel.updateCurrentTask(true, currentTask.isPaused(), currentTask, isNewAssignment);

View File

@@ -22,6 +22,7 @@ import net.runelite.client.ui.FontManager;
import net.runelite.client.ui.PluginPanel;
import net.runelite.client.ui.components.PluginErrorPanel;
import net.runelite.client.util.ColorUtil;
import net.runelite.client.util.ImageUtil;
import net.runelite.client.util.StackFormatter;
public class SlayerTaskPanel extends PluginPanel
@@ -37,6 +38,9 @@ public class SlayerTaskPanel extends PluginPanel
"<html><body style='color:%s'>%s<span style='color:white'>%02d:%02d:%02d</span></body></html>";
private static final ImageIcon PAUSE, PAUSE_FADED, PAUSE_HOVER;
private static final ImageIcon PLAY, PLAY_FADED, PLAY_HOVER;
// TODO: set some kind of maximum for the amount of tasks to be tracked in a session
private static final int MAX_TASK_BOXES = 50;
@@ -62,6 +66,20 @@ public class SlayerTaskPanel extends PluginPanel
private SlayerPlugin slayerPlugin;
static
{
final BufferedImage pauseImg = ImageUtil.getResourceStreamFromClass(SlayerPlugin.class, "pause_icon.png");
final BufferedImage playImg = ImageUtil.getResourceStreamFromClass(SlayerPlugin.class, "play_icon.png");
PAUSE = new ImageIcon(pauseImg);
PAUSE_FADED = new ImageIcon(ImageUtil.alphaOffset(pauseImg, -180));
PAUSE_HOVER = new ImageIcon(ImageUtil.alphaOffset(pauseImg, -220));
PLAY = new ImageIcon(playImg);
PLAY_FADED = new ImageIcon(ImageUtil.alphaOffset(playImg, -180));
PLAY_HOVER = new ImageIcon(ImageUtil.alphaOffset(playImg, -220));
}
public SlayerTaskPanel(SlayerPlugin slayerPlugin)
{
this.slayerPlugin = slayerPlugin;
@@ -75,34 +93,93 @@ public class SlayerTaskPanel extends PluginPanel
layoutPanel.setLayout(new BoxLayout(layoutPanel, BoxLayout.Y_AXIS));
add(layoutPanel, BorderLayout.NORTH);
actionsContainer.setLayout(new GridLayout(1, 2, 10, 0));
actionsContainer.setLayout(new BorderLayout());
actionsContainer.setBackground(ColorScheme.DARKER_GRAY_COLOR);
actionsContainer.setPreferredSize(new Dimension(0, 30));
actionsContainer.setBorder(new EmptyBorder(5, 5, 5, 10));
actionsContainer.setVisible(false);
playBtn.setText("->");
final JPanel controlsPanel = new JPanel(new GridLayout(1, 2, 10, 0));
controlsPanel.setBackground(ColorScheme.DARKER_GRAY_COLOR);
playBtn.setIcon(PLAY);
playBtn.setToolTipText("Resume the current slayer task");
playBtn.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent mouseEvent)
{
slayerPlugin.setPaused(false);
changePauseState(false);
}
@Override
public void mouseExited(MouseEvent mouseEvent)
{
boolean paused = true;
TaskData currentTask = slayerPlugin.getCurrentTask();
if (currentTask != null)
{
paused = currentTask.isPaused();
}
playBtn.setIcon(paused ? PLAY_FADED : PLAY);
}
@Override
public void mouseEntered(MouseEvent mouseEvent)
{
boolean paused = true;
TaskData currentTask = slayerPlugin.getCurrentTask();
if (currentTask != null)
{
paused = currentTask.isPaused();
}
playBtn.setIcon(paused ? PLAY_HOVER : PLAY);
}
});
pauseBtn.setText("||");
pauseBtn.setIcon(PAUSE);
pauseBtn.setToolTipText("Pause the current slayer task");
pauseBtn.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent mouseEvent)
{
slayerPlugin.setPaused(true);
changePauseState(true);
}
@Override
public void mouseExited(MouseEvent mouseEvent)
{
boolean paused = true;
TaskData currentTask = slayerPlugin.getCurrentTask();
if (currentTask != null)
{
paused = currentTask.isPaused();
}
pauseBtn.setIcon(paused ? PAUSE : PAUSE_FADED);
}
@Override
public void mouseEntered(MouseEvent mouseEvent)
{
boolean paused = true;
TaskData currentTask = slayerPlugin.getCurrentTask();
if (currentTask != null)
{
paused = currentTask.isPaused();
}
pauseBtn.setIcon(paused ? PAUSE : PAUSE_HOVER);
}
});
actionsContainer.add(playBtn);
actionsContainer.add(pauseBtn);
controlsPanel.add(playBtn);
controlsPanel.add(pauseBtn);
actionsContainer.add(controlsPanel, BorderLayout.EAST);
changePauseState(true);
if (slayerPlugin.getCurrentTask() != null)
{
changePauseState(slayerPlugin.getCurrentTask().isPaused());
}
// Create panel that will contain overall data
overallPanel.setBorder(new EmptyBorder(8, 10, 8, 10));
@@ -138,6 +215,12 @@ public class SlayerTaskPanel extends PluginPanel
overallIcon.setIcon(new ImageIcon(img));
}
private void changePauseState(boolean paused)
{
playBtn.setIcon(paused ? PLAY_FADED : PLAY);
pauseBtn.setIcon(paused ? PAUSE : PAUSE_FADED);
}
private void updateOverall()
{
int overallKills = 0;
@@ -181,7 +264,6 @@ public class SlayerTaskPanel extends PluginPanel
{
return;
}
System.out.println("empty task sent so ending current task");
TaskBox current = tasks.get(0);
// current task has ended so it should be paused
current.update(true, true, current.getTaskData());
@@ -190,8 +272,6 @@ public class SlayerTaskPanel extends PluginPanel
if (tasks.isEmpty() || isNewAssignment)
{
System.out.println("new task is set");
// new task so append it to the front of the list
SwingUtilities.invokeLater(() -> {
TaskBox newBox = buildBox(slayerPlugin, tasksContainer, newData);
@@ -204,10 +284,6 @@ public class SlayerTaskPanel extends PluginPanel
// if here there is a current task so check if the current task matches
// the update being sent
TaskBox current = tasks.get(0);
System.out.println("current task: " + current.getTaskData().getTaskName() + " " +
current.getTaskData().getTaskLocation() + " " + current.getTaskData().getInitialAmount());
System.out.println("new task: " + newData.getTaskName() + " " + newData.getTaskLocation() +
" " + newData.getInitialAmount());
if (!current.getTaskData().getTaskName().equals(newData.getTaskName()) ||
!current.getTaskData().getTaskLocation().equals(newData.getTaskLocation()) ||
current.getTaskData().getInitialAmount() != newData.getInitialAmount())
@@ -215,7 +291,6 @@ public class SlayerTaskPanel extends PluginPanel
// current task does not match the update being sent so the current task
// must have been outdated - this is necessarily true because if a true
// new task was sent it would have set the isNewAssignment flag
System.out.println("task does not match must create new match");
// so this previous task is invalid so delete it then add in the new actually
// correct task
@@ -229,16 +304,13 @@ public class SlayerTaskPanel extends PluginPanel
}
}
System.out.println("simply updating task");
System.out.println("task panel size = " + tasks.size());
System.out.println("task elapsed time " + tasks.get(0).getTaskData().getElapsedTime());
System.out.println("task elapsed kills " + tasks.get(0).getTaskData().getElapsedKills());
// not an empty assignment or a new assignment so just update the current assignment
TaskBox current = tasks.get(0);
current.update(updated, paused, newData);
// update the overall stats once this task stats are updated
updateOverall();
changePauseState(paused);
}
static String htmlLabel(String key, long timeMillis)

View File

@@ -61,6 +61,8 @@ public class TaskBox extends JPanel
private final JLabel remainingDuration = new JLabel();
private final JLabel currentKills = new JLabel();
private final JLabel remainingKills = new JLabel();
private final JLabel currentXp = new JLabel();
private final JLabel remainingXp = new JLabel();
private boolean paused = false;
@@ -84,7 +86,7 @@ public class TaskBox extends JPanel
headerPanel.setBackground(ColorScheme.DARKER_GRAY_COLOR);
headerPanel.setLayout(new BorderLayout());
statsPanel.setLayout(new DynamicGridLayout(2, 2));
statsPanel.setLayout(new DynamicGridLayout(3, 2));
statsPanel.setBackground(ColorScheme.DARKER_GRAY_COLOR);
statsPanel.setBorder(new EmptyBorder(9, 2, 9, 2));
@@ -92,11 +94,15 @@ public class TaskBox extends JPanel
remainingDuration.setFont(FontManager.getRunescapeSmallFont());
currentKills.setFont(FontManager.getRunescapeSmallFont());
remainingKills.setFont(FontManager.getRunescapeSmallFont());
currentXp.setFont(FontManager.getRunescapeSmallFont());
remainingXp.setFont(FontManager.getRunescapeSmallFont());
statsPanel.add(currentDuration);
statsPanel.add(currentKills);
statsPanel.add(remainingDuration);
statsPanel.add(currentKills);
statsPanel.add(remainingKills);
statsPanel.add(currentXp);
statsPanel.add(remainingXp);
headerPanel.add(taskIcon, BorderLayout.WEST);
headerPanel.add(statsPanel, BorderLayout.CENTER);
@@ -159,19 +165,25 @@ public class TaskBox extends JPanel
{
if (getParent() != panel)
{
panel.add(this);
panel.add(this, 0);
panel.revalidate();
}
// Update data
taskData.setElapsedKills(newData.getElapsedKills());
taskData.setAmount(newData.getAmount());
taskData.setElapsedXp(newData.getElapsedXp());
// Update information labels
int kills = taskData.getInitialAmount() - taskData.getAmount();
currentKills.setText(htmlLabel("Elapsed Kills: ", taskData.getElapsedKills()));
remainingKills.setText(htmlLabel("Remaining Kills: ", taskData.getAmount()));
currentXp.setText(htmlLabel("Elapsed Xp: ", taskData.getElapsedXp()));
double xpPerKill = ((double) taskData.getElapsedXp()) / ((double) taskData.getElapsedKills());
double xpLeft = xpPerKill * taskData.getAmount();
remainingXp.setText(htmlLabel("Remaining Xp: ", (int) xpLeft));
// Update progress bar
double percentComplete = ((double) kills) / ((double) taskData.getInitialAmount());
progressBar.setValue((int) (percentComplete * 100));
@@ -225,8 +237,8 @@ public class TaskBox extends JPanel
// Update duration separately, every time (not only when there's an update)
taskData.setElapsedTime(newData.getElapsedTime());
currentDuration.setText(htmlLabel("Elapsed Time: ", taskData.getElapsedTime()));
remainingDuration.setText(htmlLabel("Remaining Time: ", estimateRemainingTime(taskData)));
currentDuration.setText(htmlLabel("Elapsed Time:<br/>", taskData.getElapsedTime()));
remainingDuration.setText(htmlLabel("Remaining Time:<br/>", estimateRemainingTime(taskData)));
repaint();
}

View File

@@ -11,6 +11,7 @@ public class TaskData
{
private long elapsedTime;
private int elapsedKills;
private int elapsedXp;
private int amount, initialAmount;
private String taskLocation;
private String taskName;

Binary file not shown.

After

Width:  |  Height:  |  Size: 189 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 217 B