Compare commits

...
Author SHA1 Message Date
Paul c1a130972f Compat 1.20.1 2023-07-25 21:34:57 +10:00
Paul 40d8651254 Merge remote-tracking branch 'origin/main' into battle-move-descriptions
# Conflicts:
#	common/src/main/kotlin/com/cobblemon/mod/common/client/gui/battle/subscreen/BattleMoveSelection.kt
#	common/src/main/resources/assets/cobblemon/textures/gui/battle/battle_move_desc.png
2023-07-25 21:14:11 +10:00
Deltric 4b87fe5043 Created tooltips for battle moves
Initial push with working concept. To be tweaked here soon to support longer text via scrolling.
2023-03-19 07:36:55 -05:00
2 changed files with 135 additions and 1 deletions
@@ -9,6 +9,8 @@
package com.cobblemon.mod.common.client.gui.battle.subscreen
import com.cobblemon.mod.common.CobblemonSounds
import com.cobblemon.mod.common.api.gui.ColourLibrary
import com.cobblemon.mod.common.api.gui.MultiLineLabelK
import com.cobblemon.mod.common.api.gui.blitk
import com.cobblemon.mod.common.api.moves.Moves
import com.cobblemon.mod.common.api.text.bold
@@ -22,15 +24,18 @@ import com.cobblemon.mod.common.client.battle.SingleActionRequest
import com.cobblemon.mod.common.client.gui.MoveCategoryIcon
import com.cobblemon.mod.common.client.gui.TypeIcon
import com.cobblemon.mod.common.client.gui.battle.BattleGUI
import com.cobblemon.mod.common.client.gui.summary.widgets.screens.moves.MovesWidget
import com.cobblemon.mod.common.client.render.drawScaledText
import com.cobblemon.mod.common.util.battleLang
import com.cobblemon.mod.common.util.cobblemonResource
import com.cobblemon.mod.common.util.lang
import com.cobblemon.mod.common.util.math.toRGB
import java.math.RoundingMode
import java.text.DecimalFormat
import net.minecraft.client.MinecraftClient
import net.minecraft.client.gui.DrawContext
import net.minecraft.client.sound.PositionedSoundInstance
import net.minecraft.client.sound.SoundManager
import net.minecraft.client.util.math.MatrixStack
import net.minecraft.text.Text
import net.minecraft.util.math.MathHelper.floor
@@ -51,9 +56,15 @@ class BattleMoveSelection(
const val MOVE_HEIGHT = 24
const val MOVE_VERTICAL_SPACING = 5F
const val MOVE_HORIZONTAL_SPACING = 13F
const val MOVE_DESC_SCALE = 0.5F
private val decimalFormat = DecimalFormat("#.##").also {
it.roundingMode = RoundingMode.CEILING
}
val moveTexture = cobblemonResource("textures/gui/battle/battle_move.png")
val moveOverlayTexture = cobblemonResource("textures/gui/battle/battle_move_overlay.png")
val moveDescriptionTexture = cobblemonResource("textures/gui/battle/battle_move_desc.png")
}
val moveSet = request.moveSet!!
@@ -176,6 +187,124 @@ class BattleMoveSelection(
}
backButton.render(context.matrices, mouseX, mouseY, delta)
val matrices = context.matrices
// Move Description
val moveTile = moveTiles.find { it.isHovered(mouseX.toDouble(), mouseY.toDouble()) } ?: return
blitk(
matrixStack = matrices,
texture = moveDescriptionTexture,
x= mouseX,
y = mouseY,
width = 134,
height = 40
)
// Move icons
blitk(
matrixStack = matrices,
texture = MovesWidget.movesPowerIconResource,
x= (mouseX + 7) / MOVE_DESC_SCALE,
y = (mouseY + 6.5) / MOVE_DESC_SCALE,
width = MovesWidget.MOVE_ICON_SIZE,
height = MovesWidget.MOVE_ICON_SIZE,
scale = MOVE_DESC_SCALE
)
blitk(
matrixStack = matrices,
texture = MovesWidget.movesAccuracyIconResource,
x= (mouseX + 7) / MOVE_DESC_SCALE,
y = (mouseY + 17.5) / MOVE_DESC_SCALE,
width = MovesWidget.MOVE_ICON_SIZE,
height = MovesWidget.MOVE_ICON_SIZE,
scale = MOVE_DESC_SCALE
)
blitk(
matrixStack = matrices,
texture = MovesWidget.movesEffectIconResource,
x= (mouseX + 7) / MOVE_DESC_SCALE,
y = (mouseY + 28.5) / MOVE_DESC_SCALE,
width = MovesWidget.MOVE_ICON_SIZE,
height = MovesWidget.MOVE_ICON_SIZE,
scale = MOVE_DESC_SCALE
)
drawScaledText(
context = context,
text = lang("ui.power"),
x = mouseX + 14,
y = mouseY + 7,
scale = MOVE_DESC_SCALE,
shadow = true
)
drawScaledText(
context = context,
text = lang("ui.accuracy"),
x = mouseX + 14,
y = mouseY + 18,
scale = MOVE_DESC_SCALE,
shadow = true
)
drawScaledText(
context = context,
text = lang("ui.effect"),
x = mouseX + 14,
y = mouseY + 29,
scale = MOVE_DESC_SCALE,
shadow = true
)
val mcFont = MinecraftClient.getInstance().textRenderer
val movePower = if (moveTile.moveTemplate.power.toInt() > 0) moveTile.moveTemplate.power.toInt().toString().text() else "—".text()
drawScaledText(
context = context,
text = movePower,
x = (mouseX + 62.5) - (mcFont.getWidth(movePower) * MOVE_DESC_SCALE),
y = mouseY + 7,
scale = MOVE_DESC_SCALE,
shadow = true
)
val moveAccuracy = format(moveTile.moveTemplate.accuracy).text()
drawScaledText(
context = context,
text = moveAccuracy,
x = (mouseX + 62.5) - (mcFont.getWidth(moveAccuracy) * MOVE_DESC_SCALE),
y = mouseY + 18,
scale = MOVE_DESC_SCALE,
shadow = true
)
val moveEffect = format(moveTile.moveTemplate.effectChances.firstOrNull() ?: 0.0).text()
drawScaledText(
context = context,
text = moveEffect,
x = (mouseX + 62.5) - (mcFont.getWidth(moveEffect) * MOVE_DESC_SCALE),
y = mouseY + 29,
scale = MOVE_DESC_SCALE,
shadow = true
)
matrices.push()
matrices.scale(MOVE_DESC_SCALE, MOVE_DESC_SCALE, 1F)
MultiLineLabelK.create(
component = moveTile.moveTemplate.description,
width = 57 / MOVE_DESC_SCALE,
maxLines = 5
).renderLeftAligned(
context = context,
x = (mouseX + 70) / MOVE_DESC_SCALE,
y = (mouseY + 7) / MOVE_DESC_SCALE,
ySpacing = 5.5 / MOVE_DESC_SCALE,
colour = ColourLibrary.WHITE,
shadow = true
)
matrices.pop()
}
override fun mouseClicked(mouseX: Double, mouseY: Double, button: Int): Boolean {
@@ -193,4 +322,9 @@ class BattleMoveSelection(
override fun playDownSound(soundManager: SoundManager) {
soundManager.play(PositionedSoundInstance.master(CobblemonSounds.GUI_CLICK, 1.0F))
}
private fun format(input: Double): String {
if (input <= 0) return "—"
return "${decimalFormat.format(input)}%"
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 223 B