aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin/moe/nea/firmament/gui/profileviewer
diff options
context:
space:
mode:
authornea <nea@nea.moe>2023-06-01 23:10:09 +0200
committernea <nea@nea.moe>2023-06-01 23:10:09 +0200
commit7c60db4fbf6b67dc5144436d2387331219128d3c (patch)
tree53eb08b732d802ab76b39a4f650aaf9fc5564a53 /src/main/kotlin/moe/nea/firmament/gui/profileviewer
parent6e3c41fbafd837b891bc01e3baa0424effcdb734 (diff)
downloadfirmament-7c60db4fbf6b67dc5144436d2387331219128d3c.tar.gz
firmament-7c60db4fbf6b67dc5144436d2387331219128d3c.tar.bz2
firmament-7c60db4fbf6b67dc5144436d2387331219128d3c.zip
Profile Viewer Skill Page v1
Diffstat (limited to 'src/main/kotlin/moe/nea/firmament/gui/profileviewer')
-rw-r--r--src/main/kotlin/moe/nea/firmament/gui/profileviewer/ProfilePage.kt7
-rw-r--r--src/main/kotlin/moe/nea/firmament/gui/profileviewer/ProfileViewer.kt35
-rw-r--r--src/main/kotlin/moe/nea/firmament/gui/profileviewer/SkillPage.kt40
3 files changed, 58 insertions, 24 deletions
diff --git a/src/main/kotlin/moe/nea/firmament/gui/profileviewer/ProfilePage.kt b/src/main/kotlin/moe/nea/firmament/gui/profileviewer/ProfilePage.kt
new file mode 100644
index 0000000..a491dd9
--- /dev/null
+++ b/src/main/kotlin/moe/nea/firmament/gui/profileviewer/ProfilePage.kt
@@ -0,0 +1,7 @@
+package moe.nea.firmament.gui.profileviewer
+
+import io.github.cottonmc.cotton.gui.widget.WWidget
+
+interface ProfilePage {
+ fun getElements(profileViewer: ProfileViewer): WWidget
+}
diff --git a/src/main/kotlin/moe/nea/firmament/gui/profileviewer/ProfileViewer.kt b/src/main/kotlin/moe/nea/firmament/gui/profileviewer/ProfileViewer.kt
index e86ce8d..6285f6b 100644
--- a/src/main/kotlin/moe/nea/firmament/gui/profileviewer/ProfileViewer.kt
+++ b/src/main/kotlin/moe/nea/firmament/gui/profileviewer/ProfileViewer.kt
@@ -1,49 +1,36 @@
package moe.nea.firmament.gui.profileviewer
import io.github.cottonmc.cotton.gui.client.LightweightGuiDescription
-import io.github.cottonmc.cotton.gui.widget.TooltipBuilder
import io.github.cottonmc.cotton.gui.widget.WGridPanel
import io.github.cottonmc.cotton.gui.widget.WTabPanel
-import io.github.cottonmc.cotton.gui.widget.WText
import io.github.cottonmc.cotton.gui.widget.data.Insets
import io.github.cottonmc.cotton.gui.widget.icon.ItemIcon
import java.util.UUID
import net.minecraft.item.Items
import net.minecraft.text.Text
+import net.minecraft.util.DyeColor
+import moe.nea.firmament.apis.Member
import moe.nea.firmament.apis.Profile
-import moe.nea.firmament.apis.Skill
-import moe.nea.firmament.repo.RepoManager
+import moe.nea.firmament.gui.WBar
+import moe.nea.firmament.util.toShedaniel
class ProfileViewer(
val primaryPlayer: UUID,
val playerNames: Map<UUID, String>,
val profile: Profile,
) : LightweightGuiDescription() {
+
+ val member: Member = profile.members[primaryPlayer] ?: error("Primary player not in profile")
+ val primaryName: String = playerNames[primaryPlayer] ?: error("Primary player has no name")
+
init {
- val primaryMember = profile.members[primaryPlayer] ?: error("Primary player not in profile")
val panel = WTabPanel().also { rootPanel = it }
panel.backgroundPainter
- panel.add(WGridPanel().also {
- it.insets = Insets.ROOT_PANEL
- it.add(WText(Text.literal(playerNames[primaryPlayer] ?: error("Primary player has no name"))), 0, 0, 6, 1)
- for ((i, skill) in Skill.values().withIndex()) {
- val leveling = RepoManager.neuRepo.constants.leveling
- val exp = skill.accessor.get(primaryMember)
- val maxLevel = skill.getMaximumLevel(leveling)
- val level = skill.getLadder(leveling)
- .runningFold(0.0) { a, b -> a + b }
- .filter { it <= exp }.size
- .coerceAtMost(maxLevel)
- it.add(WText(Text.translatable("firmament.pv.skills.${skill.name.lowercase()}")), 0, i + 1, 5, 1)
- it.add(object : WText(Text.literal("$level/$maxLevel")) {
- override fun addTooltip(tooltip: TooltipBuilder) {
- tooltip.add(Text.translatable("firmament.pv.skills.total", exp))
- }
- }, 5, i + 1, 2, 1)
- }
- }) {
+ panel.add(SkillPage.getElements(this)) {
it.icon(ItemIcon(Items.IRON_SWORD))
it.title(Text.translatable("firmament.pv.skills"))
}
}
}
+
+
diff --git a/src/main/kotlin/moe/nea/firmament/gui/profileviewer/SkillPage.kt b/src/main/kotlin/moe/nea/firmament/gui/profileviewer/SkillPage.kt
new file mode 100644
index 0000000..2e5b9d6
--- /dev/null
+++ b/src/main/kotlin/moe/nea/firmament/gui/profileviewer/SkillPage.kt
@@ -0,0 +1,40 @@
+package moe.nea.firmament.gui.profileviewer
+
+import io.github.cottonmc.cotton.gui.widget.TooltipBuilder
+import io.github.cottonmc.cotton.gui.widget.WGridPanel
+import io.github.cottonmc.cotton.gui.widget.WText
+import io.github.cottonmc.cotton.gui.widget.WWidget
+import io.github.cottonmc.cotton.gui.widget.data.Insets
+import net.minecraft.text.Text
+import moe.nea.firmament.apis.Skill
+import moe.nea.firmament.gui.WBar
+import moe.nea.firmament.repo.RepoManager
+import moe.nea.firmament.util.toShedaniel
+
+object SkillPage : ProfilePage {
+ override fun getElements(profileViewer: ProfileViewer): WWidget {
+ return WGridPanel().also {
+ it.insets = Insets.ROOT_PANEL
+ it.add(WText(Text.literal(profileViewer.primaryName /* with rank? */)), 0, 0, 6, 1)
+ for ((i, skill) in Skill.values().withIndex()) {
+ val leveling = RepoManager.neuRepo.constants.leveling
+ val exp = skill.accessor.get(profileViewer.member)
+ val maxLevel = skill.getMaximumLevel(leveling)
+ val level = skill.getLadder(leveling)
+ .runningFold(0.0) { a, b -> a + b }
+ .filter { it <= exp }.size
+ .coerceAtMost(maxLevel)
+ it.add(WText(Text.translatable("firmament.pv.skills.${skill.name.lowercase()}")), 0, i + 1, 4, 1)
+ it.add(object : WBar(
+ level.toDouble(), maxLevel.toDouble(),
+ skill.color.toShedaniel(), skill.color.toShedaniel().darker(2.0)
+ ) {
+ override fun addTooltip(tooltip: TooltipBuilder) {
+ tooltip.add(Text.literal("$level/$maxLevel"))
+ tooltip.add(Text.translatable("firmament.pv.skills.total", exp))
+ }
+ }, 4, i + 1, 4, 1)
+ }
+ }
+ }
+}