Jump to content

Progression Bar


Recommended Posts

Posted (edited)

My current progression bar isn't working correctly, it's shortening instead of widening

gif: http://i.imgur.com/VV7g5JA.gifv

 

here is the code:

	/**
	 * Calculates the length of the progress bar
	 * 
	 * @return - the progress bar length
	 */
	public int calculateLength()
	{
		int value = 0;
		int alphaFactor = 165;
		
		int baseXp = skills.getDynamic(Skill.WOODCUTTING);
		int currentXp = skills.getExperience(Skill.WOODCUTTING);
		int nextLevel = skills.getExperienceForLevel(
				skills.getStatic(Skill.WOODCUTTING) + 1
				);
		
		currentXp -= nextLevel;
		currentXp += baseXp;
		value = currentXp;
		
		return Math.abs(value) / alphaFactor;
	}

i want it to increase in size

 

 

fixed:

	/**
	 * Calculates the length of the progress bar
	 * 
	 * @return - the progress bar length
	 */
	public int calculateLength()
	{
		int value = 0;
		int alphaFactor = 165;
		
		int baseXp = skills.getExperienceForLevel(
				skills.getStatic(Skill.WOODCUTTING));
		int currentXp = skills.getExperience(Skill.WOODCUTTING);
		int nextLevel = skills.getExperienceForLevel(
				skills.getStatic(Skill.WOODCUTTING) + 1
				);
		logger.debug("baseXp "+ baseXp);
		logger.debug("currentXp "+ currentXp);
		logger.debug("nextLevel "+ nextLevel);
		int levelXp = nextLevel - baseXp;
		logger.debug("level xp "+ levelXp);
		value =  (nextLevel - currentXp) -(currentXp - baseXp);
		logger.debug("new value "+value);
		return Math.abs(value - levelXp) / alphaFactor;
	}
Edited by optimumrsps
Posted

My current progression bar isn't working correctly, it's shortening instead of widening

gif: http://i.imgur.com/VV7g5JA.gifv

 

here is the code:

	/**
	 * Calculates the length of the progress bar
	 * 
	 * @return - the progress bar length
	 */
	public int calculateLength()
	{
		int value = 0;
		int alphaFactor = 165;
		
		int baseXp = skills.getDynamic(Skill.WOODCUTTING);
		int currentXp = skills.getExperience(Skill.WOODCUTTING);
		int nextLevel = skills.getExperienceForLevel(
				skills.getStatic(Skill.WOODCUTTING) + 1
				);
		
		currentXp -= nextLevel;
		currentXp += baseXp;
		value = currentXp;
		
		return Math.abs(value) / alphaFactor;
	}

i want it to increase in size

look at your baseXp

  • Like 2
Posted (edited)

I'll post this in the snippet section a little later, but here's something I just whipped up which should cover everything you need for progress bars smile.png

 

Class:

import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.geom.Rectangle2D;

import org.osbot.rs07.api.ui.Skill;
import org.osbot.rs07.script.Script;

public class ProgressBar {

	/**
	 * @author © Apaec
	 * @since 17 Jun 2016
	 * @file ProgressBar.java
	 */

	Script s;
	Graphics g;
	String name;
	Skill skill;
	boolean frame;
	int x, y, width, height;
	Color red = new Color(255, 0, 0, 150);
	Color green = new Color(0, 255, 0, 150);
	Font font;

	int[] XP = { 0, 83, 174, 276, 388, 512, 650, 801, 969, 1154, 1358, 1584,
			1833, 2107, 2411, 2746, 3115, 3523, 3973, 4470, 5018, 5624, 6291,
			7028, 7842, 8740, 9730, 10824, 12031, 13363, 14833, 16456, 18247,
			20224, 22406, 24815, 27473, 30408, 33648, 37224, 41171, 45529,
			50339, 55649, 61512, 67983, 75127, 83014, 91721, 101333, 111945,
			123660, 136594, 150872, 166636, 184040, 203254, 224466, 247886,
			273742, 302288, 333804, 368599, 407015, 449428, 496254, 547953,
			605032, 668051, 737627, 814445, 899257, 992895, 1096278, 1210421,
			1336443, 1475581, 1629200, 1798808, 1986068, 2192818, 2421087,
			2673114, 2951373, 3258594, 3597792, 3972294, 4385776, 4842295,
			5346332, 5902831, 6517253, 7195629, 7944614, 8771558, 9684577,
			10692629, 11805606, 13034431, 200000000 };

	public ProgressBar(Script script, Graphics graphics, String name,
			Skill skill, boolean frame, int transparency, Font font, int x,
			int y, int width, int height) {
		this.s = script;
		this.g = graphics;
		this.name = name;
		this.skill = skill;
		this.frame = frame;
		this.x = x;
		this.y = y;
		this.width = width;
		this.height = height;
		this.red = new Color(255, 0, 0, transparency);
		this.green = new Color(0, 255, 0, transparency);
		this.font = font;
	}

	public int getCurrentExperience() {
		return s.getSkills().getExperience(skill)
				- XP[s.getSkills().getStatic(skill) - 1];
	}

	public int getTargetExperience() {
		return XP[s.getSkills().getStatic(skill)]
				- XP[s.getSkills().getStatic(skill) - 1];
	}

	public int getRemainingExperience() {
		return XP[s.getSkills().getStatic(skill) + 1]
				- s.getSkills().getExperience(skill);
	}

	public int getPercentage(int current, int total) {
		return current * 100 / total;
	}

	public int getWidth(int percentage, int totalWidth) {
		return percentage * totalWidth / 100;
	}

	public void draw() {
		
		// Current percentage
		g.setColor(green);
		g.fillRect(x, y, getWidth(getPercentage(getCurrentExperience(),getTargetExperience()), width), height);

		// Remaining percentage
		g.setColor(red);
		g.fillRect(x + getWidth(getPercentage(getCurrentExperience(), getTargetExperience()), width), y, width
				- getWidth(getPercentage(getCurrentExperience(), getTargetExperience()), width), height);

		// Frame
		if (frame) {
			g.setColor(Color.BLACK);
			g.drawRect(x, y, width, height);
		}

		// Setting text font and colour
		g.setColor(Color.WHITE);
		g.setFont(font);

		// The text which we want to show on the progress bar
		String text = name + " (" + s.getSkills().getStatic(skill) + "): "
				+ getPercentage(getCurrentExperience(), getTargetExperience())
				+ "%";

		// Create a bounding box around the text
		FontMetrics metrics = g.getFontMetrics(font);
		Rectangle2D rect = metrics.getStringBounds(text, g);
		int textHeight = (int) (rect.getHeight());
		int textWidth = (int) (rect.getWidth());

		// Get the text x and y co-ordinates relative to the progress bar
		int xText = (width - textWidth) / 2;
		int yText = (height - textHeight) / 2 + metrics.getAscent();

		// Draw text over progress bar
		g.drawString(text, x + xText, y + yText);
		
	}
}

Implementation (in onPaint class):

ProgressBar bar = new ProgressBar(this, g, "Ranged", Skill.RANGED,
				true, 150, new Font("Gulim", 0, 14), 10, 200, 200, 25);
		bar.draw();

Examples:

 

a58v7Co.png

 

FbOMUDh.png

 

iJhxJ2r.png

 

Hope that helps,

~apa

 

Edit: I didn't see skills has experienceToLevel, so you can always tidy the code in that respect.

Edited by Apaec
  • Like 3
Posted

I'll post this in the snippet section a little later, but here's something I just whipped up which should cover everything you need for progress bars smile.png

 

Class:

import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.geom.Rectangle2D;

import org.osbot.rs07.api.ui.Skill;
import org.osbot.rs07.script.Script;

public class ProgressBar {

	/**
	 * @author © Apaec
	 * @since 17 Jun 2016
	 * @file ProgressBar.java
	 */

	Script s;
	Graphics g;
	String name;
	Skill skill;
	boolean frame;
	int x, y, width, height;
	Color red = new Color(255, 0, 0, 150);
	Color green = new Color(0, 255, 0, 150);
	Font font;

	int[] XP = { 0, 83, 174, 276, 388, 512, 650, 801, 969, 1154, 1358, 1584,
			1833, 2107, 2411, 2746, 3115, 3523, 3973, 4470, 5018, 5624, 6291,
			7028, 7842, 8740, 9730, 10824, 12031, 13363, 14833, 16456, 18247,
			20224, 22406, 24815, 27473, 30408, 33648, 37224, 41171, 45529,
			50339, 55649, 61512, 67983, 75127, 83014, 91721, 101333, 111945,
			123660, 136594, 150872, 166636, 184040, 203254, 224466, 247886,
			273742, 302288, 333804, 368599, 407015, 449428, 496254, 547953,
			605032, 668051, 737627, 814445, 899257, 992895, 1096278, 1210421,
			1336443, 1475581, 1629200, 1798808, 1986068, 2192818, 2421087,
			2673114, 2951373, 3258594, 3597792, 3972294, 4385776, 4842295,
			5346332, 5902831, 6517253, 7195629, 7944614, 8771558, 9684577,
			10692629, 11805606, 13034431, 200000000 };

	public ProgressBar(Script script, Graphics graphics, String name,
			Skill skill, boolean frame, int transparency, Font font, int x,
			int y, int width, int height) {
		this.s = script;
		this.g = graphics;
		this.name = name;
		this.skill = skill;
		this.frame = frame;
		this.x = x;
		this.y = y;
		this.width = width;
		this.height = height;
		this.red = new Color(255, 0, 0, transparency);
		this.green = new Color(0, 255, 0, transparency);
		this.font = font;
	}

	public int getCurrentExperience() {
		return s.getSkills().getExperience(skill)
				- XP[s.getSkills().getStatic(skill) - 1];
	}

	public int getTargetExperience() {
		return XP[s.getSkills().getStatic(skill)]
				- XP[s.getSkills().getStatic(skill) - 1];
	}

	public int getRemainingExperience() {
		return XP[s.getSkills().getStatic(skill) + 1]
				- s.getSkills().getExperience(skill);
	}

	public int getPercentage(int current, int total) {
		return current * 100 / total;
	}

	public int getWidth(int percentage, int totalWidth) {
		return percentage * totalWidth / 100;
	}

	public void draw() {
		
		// Current percentage
		g.setColor(green);
		g.fillRect(x, y, getWidth(getPercentage(getCurrentExperience(),getTargetExperience()), width), height);

		// Remaining percentage
		g.setColor(red);
		g.fillRect(x + getWidth(getPercentage(getCurrentExperience(), getTargetExperience()), width), y, width
				- getWidth(getPercentage(getCurrentExperience(), getTargetExperience()), width), height);

		// Frame
		if (frame) {
			g.setColor(Color.BLACK);
			g.drawRect(x, y, width, height);
		}

		// Setting text font and colour
		g.setColor(Color.WHITE);
		g.setFont(font);

		// The text which we want to show on the progress bar
		String text = name + " (" + s.getSkills().getStatic(skill) + "): "
				+ getPercentage(getCurrentExperience(), getTargetExperience())
				+ "%";

		// Create a bounding box around the text
		FontMetrics metrics = g.getFontMetrics(font);
		Rectangle2D rect = metrics.getStringBounds(text, g);
		int textHeight = (int) (rect.getHeight());
		int textWidth = (int) (rect.getWidth());

		// Get the text x and y co-ordinates relative to the progress bar
		int xText = (width - textWidth) / 2;
		int yText = (height - textHeight) / 2 + metrics.getAscent();

		// Draw text over progress bar
		g.drawString(text, x + xText, y + yText);
		
	}
}

Implementation (in onPaint class):

ProgressBar bar = new ProgressBar(this, g, "Ranged", Skill.RANGED,
				true, 150, new Font("Gulim", 0, 14), 10, 200, 200, 25);
		bar.draw();

Examples:

 

a58v7Co.png

 

FbOMUDh.png

 

iJhxJ2r.png

 

Hope that helps,

~apa

 

Edit: I didn't see skills has experienceToLevel, so you can always tidy the code in that respect.

 

Thanks a lot mate, i'll just use yours man

Posted
	int[] XP = { 0, 83, 174, 276, 388, 512, 650, 801, 969, 1154, 1358, 1584,
			1833, 2107, 2411, 2746, 3115, 3523, 3973, 4470, 5018, 5624, 6291,
			7028, 7842, 8740, 9730, 10824, 12031, 13363, 14833, 16456, 18247,
			20224, 22406, 24815, 27473, 30408, 33648, 37224, 41171, 45529,
			50339, 55649, 61512, 67983, 75127, 83014, 91721, 101333, 111945,
			123660, 136594, 150872, 166636, 184040, 203254, 224466, 247886,
			273742, 302288, 333804, 368599, 407015, 449428, 496254, 547953,
			605032, 668051, 737627, 814445, 899257, 992895, 1096278, 1210421,
			1336443, 1475581, 1629200, 1798808, 1986068, 2192818, 2421087,
			2673114, 2951373, 3258594, 3597792, 3972294, 4385776, 4842295,
			5346332, 5902831, 6517253, 7195629, 7944614, 8771558, 9684577,
			10692629, 11805606, 13034431, 200000000 };

 

Nooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo sad.pngsad.pngsad.pngsad.pngsad.png

  • Like 1
Posted

Noooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo sad.pngsad.pngsad.pngsad.pngsad.png

 

That's what i was thinking, theres already a getExperienceForLevel

  • 2 months later...
Posted

I'll post this in the snippet section a little later, but here's something I just whipped up which should cover everything you need for progress bars smile.png

 

Class:

import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.geom.Rectangle2D;

import org.osbot.rs07.api.ui.Skill;
import org.osbot.rs07.script.Script;

public class ProgressBar {

	/**
	 * @[member=Author X]© Apaec
	 * @since 17 Jun 2016
	 * @file ProgressBar.java
	 */

	Script s;
	Graphics g;
	String name;
	Skill skill;
	boolean frame;
	int x, y, width, height;
	Color red = new Color(255, 0, 0, 150);
	Color green = new Color(0, 255, 0, 150);
	Font font;

	int[] XP = { 0, 83, 174, 276, 388, 512, 650, 801, 969, 1154, 1358, 1584,
			1833, 2107, 2411, 2746, 3115, 3523, 3973, 4470, 5018, 5624, 6291,
			7028, 7842, 8740, 9730, 10824, 12031, 13363, 14833, 16456, 18247,
			20224, 22406, 24815, 27473, 30408, 33648, 37224, 41171, 45529,
			50339, 55649, 61512, 67983, 75127, 83014, 91721, 101333, 111945,
			123660, 136594, 150872, 166636, 184040, 203254, 224466, 247886,
			273742, 302288, 333804, 368599, 407015, 449428, 496254, 547953,
			605032, 668051, 737627, 814445, 899257, 992895, 1096278, 1210421,
			1336443, 1475581, 1629200, 1798808, 1986068, 2192818, 2421087,
			2673114, 2951373, 3258594, 3597792, 3972294, 4385776, 4842295,
			5346332, 5902831, 6517253, 7195629, 7944614, 8771558, 9684577,
			10692629, 11805606, 13034431, 200000000 };

	public ProgressBar(Script script, Graphics graphics, String name,
			Skill skill, boolean frame, int transparency, Font font, int x,
			int y, int width, int height) {
		this.s = script;
		this.g = graphics;
		this.name = name;
		this.skill = skill;
		this.frame = frame;
		this.x = x;
		this.y = y;
		this.width = width;
		this.height = height;
		this.red = new Color(255, 0, 0, transparency);
		this.green = new Color(0, 255, 0, transparency);
		this.font = font;
	}

	public int getCurrentExperience() {
		return s.getSkills().getExperience(skill)
				- XP[s.getSkills().getStatic(skill) - 1];
	}

	public int getTargetExperience() {
		return XP[s.getSkills().getStatic(skill)]
				- XP[s.getSkills().getStatic(skill) - 1];
	}

	public int getRemainingExperience() {
		return XP[s.getSkills().getStatic(skill) + 1]
				- s.getSkills().getExperience(skill);
	}

	public int getPercentage(int current, int total) {
		return current * 100 / total;
	}

	public int getWidth(int percentage, int totalWidth) {
		return percentage * totalWidth / 100;
	}

	public void draw() {
		
		// Current percentage
		g.setColor(green);
		g.fillRect(x, y, getWidth(getPercentage(getCurrentExperience(),getTargetExperience()), width), height);

		// Remaining percentage
		g.setColor(red);
		g.fillRect(x + getWidth(getPercentage(getCurrentExperience(), getTargetExperience()), width), y, width
				- getWidth(getPercentage(getCurrentExperience(), getTargetExperience()), width), height);

		// Frame
		if (frame) {
			g.setColor(Color.BLACK);
			g.drawRect(x, y, width, height);
		}

		// Setting text font and colour
		g.setColor(Color.WHITE);
		g.setFont(font);

		// The text which we want to show on the progress bar
		String text = name + " (" + s.getSkills().getStatic(skill) + "): "
				+ getPercentage(getCurrentExperience(), getTargetExperience())
				+ "%";

		// Create a bounding box around the text
		FontMetrics metrics = g.getFontMetrics(font);
		Rectangle2D rect = metrics.getStringBounds(text, g);
		int textHeight = (int) (rect.getHeight());
		int textWidth = (int) (rect.getWidth());

		// Get the text x and y co-ordinates relative to the progress bar
		int xText = (width - textWidth) / 2;
		int yText = (height - textHeight) / 2 + metrics.getAscent();

		// Draw text over progress bar
		g.drawString(text, x + xText, y + yText);
		
	}
}

Implementation (in onPaint class):

ProgressBar bar = new ProgressBar(this, g, "Ranged", Skill.RANGED,
				true, 150, new Font("Gulim", 0, 14), 10, 200, 200, 25);
		bar.draw();

Examples:

 

a58v7Co.png

 

FbOMUDh.png

 

iJhxJ2r.png

 

Hope that helps,

~apa

 

Edit: I didn't see skills has experienceToLevel, so you can always tidy the code in that respect.

 

You havent posted in the Snippet section yet :boge:

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...