Skip to content

Commit f4bbd89

Browse files
Merge pull request #304 from andrewlalis/andrew/progress_bar
Added different text progress bar for help account
2 parents 095d091 + d685569 commit f4bbd89

File tree

3 files changed

+62
-1
lines changed

3 files changed

+62
-1
lines changed

src/main/java/net/javadiscord/javabot/systems/help/commands/subcommands/HelpAccountSubcommand.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ private String formatExperience(Guild guild, HelpAccount account) {
8888
double percentToGoalXp = (currentXp / goalXp) * 100.0;
8989
sb.append(String.format("%.0f / %.0f XP (%.2f%%) until %s\n", currentXp, goalXp, percentToGoalXp, nextRoleAndXp.first().getAsMention()))
9090
.append(String.format("%.0f Total XP\n", account.getExperience()))
91-
.append(StringUtils.buildProgressBar(currentXp, goalXp, "\u2B1B", "\uD83D\uDFE5", 14));
91+
.append(StringUtils.buildTextProgressBar(percentToGoalXp / 100.0, 12));
9292
} else {
9393
sb.append(String.format("%.0f Total XP (MAX. LEVEL)", account.getExperience()));
9494
}

src/main/java/net/javadiscord/javabot/util/StringUtils.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,34 @@ public static String buildProgressBar(double current, double max, String off, St
7171
return on.repeat(onLength) + off.repeat(length - onLength);
7272
}
7373

74+
/**
75+
* Builds a progress bar that uses block characters.
76+
* <p>
77+
* For example: <pre>[███████ ]</pre>
78+
* </p>
79+
*
80+
* @param value The floating-point value. This should be between 0 and 1,
81+
* inclusive. Any value outside that range will be truncated
82+
* to either 0 or 1, depending on if it's positive or negative.
83+
* @param length The length of the progress bar string, including the
84+
* brackets. It must be at least 5.
85+
* @return The progress bar string.
86+
*/
87+
public static String buildTextProgressBar(double value, int length) {
88+
if (value < 0.0) value = 0.0;
89+
if (value > 1.0) value = 1.0;
90+
if (length < 5) throw new IllegalArgumentException("Length must be at least 5.");
91+
StringBuilder sb = new StringBuilder(length);
92+
sb.append('[');
93+
int barElements = length - 2;
94+
double elementsFilled = barElements * value;
95+
int wholeElementsFilled = (int) Math.floor(elementsFilled);
96+
sb.append("█".repeat(wholeElementsFilled));
97+
sb.append(" ".repeat(barElements - wholeElementsFilled));
98+
sb.append(']');
99+
return sb.toString();
100+
}
101+
74102
/**
75103
* Capitalizes the given word.
76104
*
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package net.javadiscord.javabot.util;
2+
3+
import org.junit.jupiter.api.Test;
4+
5+
import static org.junit.jupiter.api.Assertions.assertEquals;
6+
import static org.junit.jupiter.api.Assertions.assertThrows;
7+
8+
/**
9+
* Tests for the {@link StringUtils} class.
10+
*/
11+
public class StringUtilsTest {
12+
13+
/**
14+
* Tests the {@link StringUtils#buildTextProgressBar(double, int)} method.
15+
*/
16+
@Test
17+
public void testBuildTextProgressBar() {
18+
assertThrows(IllegalArgumentException.class, () -> StringUtils.buildTextProgressBar(0.5, 4));
19+
assertEquals("[ ]", StringUtils.buildTextProgressBar(0, 5));
20+
assertEquals("[ ]", StringUtils.buildTextProgressBar(-100, 5));
21+
assertEquals("[███]", StringUtils.buildTextProgressBar(1, 5));
22+
assertEquals("[███]", StringUtils.buildTextProgressBar(3, 5));
23+
assertEquals("[ ]", StringUtils.buildTextProgressBar(0.1, 6));
24+
assertEquals("[ ]", StringUtils.buildTextProgressBar(0.24, 6));
25+
assertEquals("[█ ]", StringUtils.buildTextProgressBar(0.25, 6));
26+
assertEquals("[█ ]", StringUtils.buildTextProgressBar(0.45, 6));
27+
assertEquals("[██ ]", StringUtils.buildTextProgressBar(0.5, 6));
28+
assertEquals("[██ ]", StringUtils.buildTextProgressBar(0.65, 6));
29+
assertEquals("[███ ]", StringUtils.buildTextProgressBar(0.75, 6));
30+
assertEquals("[███ ]", StringUtils.buildTextProgressBar(0.95, 6));
31+
assertEquals("[████]", StringUtils.buildTextProgressBar(1, 6));
32+
}
33+
}

0 commit comments

Comments
 (0)