Skip to content

Commit 88bf61d

Browse files
authored
Merge pull request #543 from rfresh2/gui-update
Improve GUI responsiveness and jank
2 parents 800f3b4 + e3a4e57 commit 88bf61d

File tree

12 files changed

+47
-36
lines changed

12 files changed

+47
-36
lines changed

src/main/kotlin/com/lambda/client/LambdaMod.kt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package com.lambda.client
22

33
import com.lambda.client.event.ForgeEventProcessor
4+
import com.lambda.client.event.LambdaEventBus
5+
import com.lambda.client.event.events.RealWorldTickEvent
46
import com.lambda.client.gui.clickgui.LambdaClickGui
57
import com.lambda.client.util.ConfigUtils
68
import com.lambda.client.util.KamiCheck
@@ -70,8 +72,6 @@ class LambdaMod {
7072
ConfigUtils.moveAllLegacyConfigs()
7173
ConfigUtils.loadAll()
7274

73-
BackgroundScope.start()
74-
7575
WebUtils.updateCheck()
7676
LambdaClickGui.populateRemotePlugins()
7777

@@ -83,5 +83,9 @@ class LambdaMod {
8383
@Mod.EventHandler
8484
fun postInit(event: FMLPostInitializationEvent) {
8585
ready = true
86+
BackgroundScope.launchLooping("RealWorldTick", 50L) {
87+
LambdaEventBus.post(RealWorldTickEvent())
88+
}
89+
BackgroundScope.start()
8690
}
8791
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package com.lambda.client.event.events
2+
3+
import com.lambda.client.event.Event
4+
5+
class RealWorldTickEvent : Event

src/main/kotlin/com/lambda/client/gui/AbstractLambdaGui.kt

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package com.lambda.client.gui
22

3+
import com.lambda.client.event.events.RealWorldTickEvent
34
import com.lambda.client.event.events.RenderOverlayEvent
5+
import com.lambda.client.event.listener.listener
46
import com.lambda.client.gui.rgui.WindowComponent
57
import com.lambda.client.gui.rgui.windows.ColorPicker
68
import com.lambda.client.gui.rgui.windows.SettingWindow
@@ -14,13 +16,11 @@ import com.lambda.client.util.graphics.*
1416
import com.lambda.client.util.graphics.font.FontRenderAdapter
1517
import com.lambda.client.util.math.Vec2d
1618
import com.lambda.client.util.math.Vec2f
17-
import com.lambda.client.util.threads.safeListener
1819
import com.lambda.mixin.accessor.gui.AccessorGuiScreen
1920
import net.minecraft.client.gui.GuiScreen
2021
import net.minecraft.client.gui.ScaledResolution
2122
import net.minecraft.client.renderer.GlStateManager
2223
import net.minecraft.util.ResourceLocation
23-
import net.minecraftforge.fml.common.gameevent.TickEvent
2424
import org.lwjgl.input.Keyboard
2525
import org.lwjgl.input.Mouse
2626
import org.lwjgl.opengl.GL11.*
@@ -86,9 +86,7 @@ abstract class AbstractLambdaGui<S : SettingWindow<*>, E : Any> : GuiScreen() {
8686
mc = Wrapper.minecraft
8787
windowList.add(ColorPicker)
8888

89-
safeListener<TickEvent.ClientTickEvent> { event ->
90-
if (event.phase != TickEvent.Phase.START) return@safeListener
91-
89+
listener<RealWorldTickEvent> {
9290
blurShader.shader?.let { shaderGroup ->
9391
val multiplier = ClickGUI.blur * fadeMultiplier
9492
shaderGroup.listShaders.forEach { shader ->
@@ -101,7 +99,7 @@ abstract class AbstractLambdaGui<S : SettingWindow<*>, E : Any> : GuiScreen() {
10199
}
102100
}
103101

104-
safeListener<RenderOverlayEvent>(-69420) {
102+
listener<RenderOverlayEvent>(-69420) {
105103
if (!displayed.value && fadeMultiplier > 0.0f) {
106104
drawScreen(0, 0, mc.renderPartialTicks)
107105
}
@@ -269,6 +267,7 @@ abstract class AbstractLambdaGui<S : SettingWindow<*>, E : Any> : GuiScreen() {
269267

270268
// Rendering
271269
final override fun drawScreen(mouseX: Int, mouseY: Int, partialTicks: Float) {
270+
handleInput()
272271
val scale = ClickGUI.getScaleFactorFloat()
273272
val scaledResolution = ScaledResolution(mc)
274273
val multiplier = fadeMultiplier

src/main/kotlin/com/lambda/client/gui/clickgui/LambdaClickGui.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,7 @@ object LambdaClickGui : AbstractLambdaGui<ModuleSettingWindow, AbstractModule>()
273273
val allButtons = ModuleManager.modules
274274
.groupBy { it.category.displayName }
275275
.mapValues { (_, modules) -> modules.map { ModuleButton(it) } }
276+
allButtons.forEach { it.value.forEach { it.onGuiInit() }}
276277

277278
windows.filter { window ->
278279
window != pluginWindow

src/main/kotlin/com/lambda/client/gui/hudgui/AbstractHudElement.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,7 @@ abstract class AbstractHudElement(
133133
}
134134

135135
final override fun onRender(vertexHelper: VertexHelper, absolutePos: Vec2f) {
136+
super.onRender(vertexHelper, absolutePos)
136137
renderFrame(vertexHelper)
137138
glScalef(scale, scale, scale)
138139
renderHud(vertexHelper)

src/main/kotlin/com/lambda/client/gui/hudgui/LambdaHudGui.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ object LambdaHudGui : AbstractLambdaGui<HudSettingWindow, AbstractHudElement>()
9999

100100
init {
101101
safeListener<RenderOverlayEvent>(0) {
102-
if (Hud.isDisabled) return@safeListener
102+
if (Hud.isDisabled || mc.currentScreen is LambdaHudGui) return@safeListener
103103

104104
val vertexHelper = VertexHelper(GlStateUtils.useVbo())
105105
GlStateUtils.rescaleLambda()
@@ -117,6 +117,8 @@ object LambdaHudGui : AbstractLambdaGui<HudSettingWindow, AbstractHudElement>()
117117
}
118118

119119
private fun renderHudElement(vertexHelper: VertexHelper, window: AbstractHudElement) {
120+
window.updatePrevPos()
121+
window.updatePrevSize()
120122
glPushMatrix()
121123
glTranslatef(window.renderPosX, window.renderPosY, 0.0f)
122124

src/main/kotlin/com/lambda/client/gui/rgui/Component.kt

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -111,22 +111,22 @@ open class Component(
111111
updatePrevSize()
112112
}
113113

114-
open fun onTick() {
115-
updatePrevPos()
116-
updatePrevSize()
117-
}
114+
open fun onTick() {}
118115

119-
private fun updatePrevPos() {
116+
fun updatePrevPos() {
120117
prevPosX = posX
121118
prevPosY = posY
122119
}
123120

124-
private fun updatePrevSize() {
121+
fun updatePrevSize() {
125122
prevWidth = width
126123
prevHeight = height
127124
}
128125

129-
open fun onRender(vertexHelper: VertexHelper, absolutePos: Vec2f) {}
126+
open fun onRender(vertexHelper: VertexHelper, absolutePos: Vec2f) {
127+
updatePrevPos()
128+
updatePrevSize()
129+
}
130130

131131
open fun onPostRender(vertexHelper: VertexHelper, absolutePos: Vec2f) {}
132132

src/main/kotlin/com/lambda/client/gui/rgui/component/EnumSlider.kt

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,6 @@ class EnumSlider(val setting: EnumSetting<*>) : Slider(setting.name, 0.0, settin
1616
override val isBold
1717
get() = setting.isModified && ClickGUI.showModifiedInBold
1818

19-
override fun onTick() {
20-
super.onTick()
21-
if (mouseState != MouseState.DRAG) {
22-
val settingValue = setting.value.ordinal
23-
if (roundInput(value) != settingValue) {
24-
value = (settingValue + settingValue / (enumValues.size - 1.0)) / enumValues.size.toDouble()
25-
}
26-
}
27-
}
28-
2919
override fun onRelease(mousePos: Vec2f, buttonId: Int) {
3020
super.onRelease(mousePos, buttonId)
3121
if (prevState != MouseState.DRAG) setting.nextValue()
@@ -44,6 +34,12 @@ class EnumSlider(val setting: EnumSetting<*>) : Slider(setting.name, 0.0, settin
4434
private fun roundInput(valueIn: Double) = floor(valueIn * enumValues.size).toInt().coerceIn(0, enumValues.size - 1)
4535

4636
override fun onRender(vertexHelper: VertexHelper, absolutePos: Vec2f) {
37+
if (mouseState != MouseState.DRAG) {
38+
val settingValue = setting.value.ordinal
39+
if (roundInput(value) != settingValue) {
40+
value = (settingValue + settingValue / (enumValues.size - 1.0)) / enumValues.size.toDouble()
41+
}
42+
}
4743
val valueText = setting.value.readableName()
4844
protectedWidth = FontRenderAdapter.getStringWidth(valueText, 0.75f).toDouble()
4945

src/main/kotlin/com/lambda/client/gui/rgui/component/Slider.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,11 +93,17 @@ open class Slider(
9393

9494
override fun onTick() {
9595
super.onTick()
96+
visibility?.let { visible = it.invoke() }
97+
}
98+
99+
override fun onGuiInit() {
100+
super.onGuiInit()
96101
height = maxHeight
97102
visibility?.let { visible = it.invoke() }
98103
}
99104

100105
override fun onRender(vertexHelper: VertexHelper, absolutePos: Vec2f) {
106+
super.onRender(vertexHelper, absolutePos)
101107
// Slider bar
102108
if (renderProgress > 0.0) RenderUtils2D.drawRectFilled(vertexHelper, Vec2d(0.0, 0.0), Vec2d(renderWidth * renderProgress, renderHeight.toDouble()), GuiColors.primary)
103109

@@ -135,6 +141,7 @@ open class Slider(
135141
}
136142

137143
override fun onPostRender(vertexHelper: VertexHelper, absolutePos: Vec2f) {
144+
super.onPostRender(vertexHelper, absolutePos)
138145
if (Tooltips.isDisabled || description.isBlank()) return
139146

140147
var deltaTime = AnimationUtils.toDeltaTimeFloat(lastStateUpdateTime)

src/main/kotlin/com/lambda/client/gui/rgui/component/StringButton.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@ import com.lambda.client.util.math.Vec2d
1010
import com.lambda.client.util.math.Vec2f
1111
import net.minecraft.client.gui.GuiScreen
1212
import org.lwjgl.input.Keyboard
13-
import kotlin.math.max
14-
import kotlin.math.min
1513

1614
class StringButton(val setting: StringSetting) : BooleanSlider(setting.name, 1.0, setting.description, setting.visibility) {
1715

0 commit comments

Comments
 (0)