HTTPS
https://git.nageyqma.icu/nageyqma/odin_next.git
SSH
git@git.nageyqma.icu:nageyqma/odin_next.git
HTTPS 链接可直接 git clone;推送代码请使用 SSH。
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
package com.odtheking.odin.clickgui.settings
import com.odtheking.odin.OdinMod.mc
import com.odtheking.odin.clickgui.GuiTheme
import com.odtheking.odin.clickgui.widget.OdinContainerWidget
import com.odtheking.odin.clickgui.widget.isOver
import com.odtheking.odin.utils.Colors
import com.odtheking.odin.utils.render.scissoredReveal
import com.odtheking.odin.utils.ui.animations.Easing
import com.odtheking.odin.utils.ui.animations.Fade
import net.minecraft.client.gui.GuiGraphicsExtractor
import net.minecraft.client.gui.components.events.GuiEventListener
import net.minecraft.network.chat.Component
abstract class RenderableSetting<T>(
override val name: String,
override var description: String,
height: Int = GuiTheme.ROW_HEIGHT
) : OdinContainerWidget(0, 0, GuiTheme.ROW_WIDTH, height, Component.literal(name)), Setting<T> {
override var hidden: Boolean = false
override var visibilityDependency: (() -> Boolean)? = null
override val clickButtons: IntArray = LEFT_ONLY
private val reveal = Fade(REVEAL_DURATION, Easing.EASE_IN_OUT)
val revealFraction: Float get() = reveal.progress(isVisible)
override fun children(): List<GuiEventListener> = emptyList()
open fun measure() = Unit
open fun place() = Unit
open fun release() = Unit
final override fun wantsDescription(mouseX: Int, mouseY: Int): Boolean =
isOver(mouseX, mouseY, x, y, width, GuiTheme.ROW_HEIGHT)
protected fun drawLabel(graphics: GuiGraphicsExtractor, rowY: Int = y, rowHeight: Int = GuiTheme.ROW_HEIGHT) {
graphics.text(mc.font, name, x + GuiTheme.PADDING, GuiTheme.textY(rowY, rowHeight), Colors.WHITE.rgba, false)
}
protected inline fun renderExpanded(graphics: GuiGraphicsExtractor, content: () -> Unit) {
graphics.scissoredReveal(x, y + GuiTheme.ROW_HEIGHT, x + width, height - GuiTheme.ROW_HEIGHT, content)
}
private companion object {
const val REVEAL_DURATION = 200L
}
}