diff --git a/src/main/kotlin/com/lambda/client/LambdaMod.kt b/src/main/kotlin/com/lambda/client/LambdaMod.kt index 8597f3c85..7d64ed5ca 100644 --- a/src/main/kotlin/com/lambda/client/LambdaMod.kt +++ b/src/main/kotlin/com/lambda/client/LambdaMod.kt @@ -1,8 +1,6 @@ package com.lambda.client import com.lambda.client.event.ForgeEventProcessor -import com.lambda.client.event.LambdaEventBus -import com.lambda.client.event.events.RealWorldTickEvent import com.lambda.client.gui.clickgui.LambdaClickGui import com.lambda.client.util.ConfigUtils import com.lambda.client.util.KamiCheck @@ -83,9 +81,6 @@ class LambdaMod { @Mod.EventHandler fun postInit(event: FMLPostInitializationEvent) { ready = true - BackgroundScope.launchLooping("RealWorldTick", 50L) { - LambdaEventBus.post(RealWorldTickEvent()) - } BackgroundScope.start() } } diff --git a/src/main/kotlin/com/lambda/client/event/events/RealWorldTickEvent.kt b/src/main/kotlin/com/lambda/client/event/events/RealWorldTickEvent.kt deleted file mode 100644 index 928c0e24b..000000000 --- a/src/main/kotlin/com/lambda/client/event/events/RealWorldTickEvent.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.lambda.client.event.events - -import com.lambda.client.event.Event - -class RealWorldTickEvent : Event \ No newline at end of file diff --git a/src/main/kotlin/com/lambda/client/gui/AbstractLambdaGui.kt b/src/main/kotlin/com/lambda/client/gui/AbstractLambdaGui.kt index f1e7a86dd..77dafc67d 100644 --- a/src/main/kotlin/com/lambda/client/gui/AbstractLambdaGui.kt +++ b/src/main/kotlin/com/lambda/client/gui/AbstractLambdaGui.kt @@ -1,6 +1,5 @@ package com.lambda.client.gui -import com.lambda.client.event.events.RealWorldTickEvent import com.lambda.client.event.events.RenderOverlayEvent import com.lambda.client.event.listener.listener import com.lambda.client.gui.rgui.WindowComponent @@ -21,6 +20,8 @@ import net.minecraft.client.gui.GuiScreen import net.minecraft.client.gui.ScaledResolution import net.minecraft.client.renderer.GlStateManager import net.minecraft.util.ResourceLocation +import net.minecraftforge.fml.common.gameevent.TickEvent +import net.minecraftforge.fml.common.gameevent.TickEvent.ClientTickEvent import org.lwjgl.input.Keyboard import org.lwjgl.input.Mouse import org.lwjgl.opengl.GL11.* @@ -86,7 +87,8 @@ abstract class AbstractLambdaGui<S : SettingWindow<*>, E : Any> : GuiScreen() { mc = Wrapper.minecraft windowList.add(ColorPicker) - listener<RealWorldTickEvent> { + listener<ClientTickEvent> { + if (it.phase != TickEvent.Phase.END) return@listener blurShader.shader?.let { shaderGroup -> val multiplier = ClickGUI.blur * fadeMultiplier shaderGroup.listShaders.forEach { shader -> @@ -230,7 +232,7 @@ abstract class AbstractLambdaGui<S : SettingWindow<*>, E : Any> : GuiScreen() { } } - private fun updateWindowOrder() { + open fun updateWindowOrder() { val cacheList = windowList.sortedBy { it.lastActiveTime } windowList.clear() windowList.addAll(cacheList) diff --git a/src/main/kotlin/com/lambda/client/gui/clickgui/LambdaClickGui.kt b/src/main/kotlin/com/lambda/client/gui/clickgui/LambdaClickGui.kt index 6da5b4ead..2ac78c0e6 100644 --- a/src/main/kotlin/com/lambda/client/gui/clickgui/LambdaClickGui.kt +++ b/src/main/kotlin/com/lambda/client/gui/clickgui/LambdaClickGui.kt @@ -7,6 +7,7 @@ import com.lambda.client.gui.AbstractLambdaGui import com.lambda.client.gui.clickgui.component.* import com.lambda.client.gui.clickgui.window.ModuleSettingWindow import com.lambda.client.gui.rgui.Component +import com.lambda.client.gui.rgui.windows.ColorPicker import com.lambda.client.gui.rgui.windows.ListWindow import com.lambda.client.module.AbstractModule import com.lambda.client.module.Category @@ -76,6 +77,12 @@ object LambdaClickGui : AbstractLambdaGui<ModuleSettingWindow, AbstractModule>() remotePluginWindow.visible = false } + override fun updateWindowOrder() { + val cacheList = windowList.sortedBy { it.lastActiveTime + if (it is ModuleSettingWindow || it is ColorPicker) 1000000 else 0 } + windowList.clear() + windowList.addAll(cacheList) + } + override fun newSettingWindow(element: AbstractModule, mousePos: Vec2f): ModuleSettingWindow { return ModuleSettingWindow(element, mousePos.x, mousePos.y) } diff --git a/src/main/kotlin/com/lambda/client/gui/hudgui/AbstractHudElement.kt b/src/main/kotlin/com/lambda/client/gui/hudgui/AbstractHudElement.kt index 2b2baa95b..c65b48fe4 100644 --- a/src/main/kotlin/com/lambda/client/gui/hudgui/AbstractHudElement.kt +++ b/src/main/kotlin/com/lambda/client/gui/hudgui/AbstractHudElement.kt @@ -70,12 +70,12 @@ abstract class AbstractHudElement( val currentScreen = mc.currentScreen if (currentScreen is GuiChat && !chatSnapping) { val screenH = currentScreen.height - if (posY >= screenH - height - 3 && posX <= 3 && yShift == 0.0f) { + if (posY >= screenH - height - 3 && yShift == 0.0f) { val prevPosYSnap = posY yShift = -chatSnapY snappedElements.clear() GuiManager.getHudElementOrNull(componentName)?.let { snappedElements.add(it) } - chatSnapCheck(componentName, prevPosYSnap) + chatSnapCheck(componentName, prevPosYSnap, posX, posX + width) chatSnapping = true } } else if (currentScreen !is GuiChat && chatSnapping) { @@ -89,15 +89,16 @@ abstract class AbstractHudElement( } } - private fun chatSnapCheck(thisElement: String, prevSnapY: Float) { + private fun chatSnapCheck(thisElement: String, prevSnapY: Float, prevSnapXMin: Float, prevSnapXMax: Float) { for (element in GuiManager.hudElements) { if (!snappedElements.contains(element) && element.componentName != thisElement && element.visible && element.posY + element.height >= prevSnapY - 3 - && element.posX <= 3) { + && element.posX >= prevSnapXMin + && element.posX <= prevSnapXMax) { snappedElements.add(element) - chatSnapCheck(element.componentName, element.posY) + chatSnapCheck(element.componentName, element.posY, element.posX, element.posX + element.width) element.yShift = -chatSnapY } } diff --git a/src/main/kotlin/com/lambda/client/gui/hudgui/LambdaHudGui.kt b/src/main/kotlin/com/lambda/client/gui/hudgui/LambdaHudGui.kt index f04452ad7..a5b4f93dc 100644 --- a/src/main/kotlin/com/lambda/client/gui/hudgui/LambdaHudGui.kt +++ b/src/main/kotlin/com/lambda/client/gui/hudgui/LambdaHudGui.kt @@ -47,6 +47,12 @@ object LambdaHudGui : AbstractLambdaGui<HudSettingWindow, AbstractHudElement>() } } + override fun updateWindowOrder() { + val cacheList = windowList.sortedBy { it.lastActiveTime + if (it is AbstractHudElement) 1000000 else 0 } + windowList.clear() + windowList.addAll(cacheList) + } + internal fun register(hudElement: AbstractHudElement) { val button = HudButton(hudElement) hudWindows[hudElement.category]?.add(button) diff --git a/src/main/kotlin/com/lambda/client/gui/rgui/windows/ColorPicker.kt b/src/main/kotlin/com/lambda/client/gui/rgui/windows/ColorPicker.kt index 4f0bc54f9..a01a1925a 100644 --- a/src/main/kotlin/com/lambda/client/gui/rgui/windows/ColorPicker.kt +++ b/src/main/kotlin/com/lambda/client/gui/rgui/windows/ColorPicker.kt @@ -85,14 +85,7 @@ object ColorPicker : TitledWindow("Color Picker", 0.0f, 0.0f, 200.0f, 200.0f, Se override fun onTick() { super.onTick() - if (visible) { - prevHue = hue - prevSaturation = saturation - prevBrightness = brightness - for (component in components) component.onTick() - if (hoveredChild != null) updateHSBFromRGB() - if (listeningChild?.listening == false) listeningChild = null - } + for (component in components) component.onTick() } override fun onMouseInput(mousePos: Vec2f) { @@ -170,6 +163,14 @@ object ColorPicker : TitledWindow("Color Picker", 0.0f, 0.0f, 200.0f, 200.0f, Se override fun onRender(vertexHelper: VertexHelper, absolutePos: Vec2f) { super.onRender(vertexHelper, absolutePos) + if (visible) { + prevHue = hue + prevSaturation = saturation + prevBrightness = brightness + if (hoveredChild != null) updateHSBFromRGB() + if (listeningChild?.listening == false) listeningChild = null + } + drawColorField(vertexHelper) drawHueSlider(vertexHelper) drawColorPreview(vertexHelper) @@ -200,8 +201,7 @@ object ColorPicker : TitledWindow("Color Picker", 0.0f, 0.0f, 200.0f, 200.0f, Se GlStateManager.tryBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE) // Saturation - val interpolatedHue = prevHue + (hue - prevHue) * mc.renderPartialTicks - val rightColor = ColorHolder(Color.getHSBColor(interpolatedHue, 1.0f, 1.0f)) + val rightColor = ColorHolder(Color.getHSBColor(hue, 1.0f, 1.0f)) val leftColor = ColorHolder(255, 255, 255) vertexHelper.begin(GL_TRIANGLE_STRIP) vertexHelper.put(fieldPos.first.toVec2d(), leftColor) // Top left @@ -227,11 +227,9 @@ object ColorPicker : TitledWindow("Color Picker", 0.0f, 0.0f, 200.0f, 200.0f, Se if (ClickGUI.windowOutline) RenderUtils2D.drawRectOutline(vertexHelper, fieldPos.first.toVec2d(), fieldPos.second.toVec2d(), ClickGUI.outlineWidth, GuiColors.outline) // Circle pointer - val interpolatedSaturation = prevSaturation + (saturation - prevSaturation) * mc.renderPartialTicks - val interpolatedBrightness = prevBrightness + (brightness - prevBrightness) * mc.renderPartialTicks - val relativeBrightness = ((1.0f - (1.0f - interpolatedSaturation) * interpolatedBrightness) * 255.0f).toInt() + val relativeBrightness = ((1.0f - (1.0f - saturation) * brightness) * 255.0f).toInt() val circleColor = ColorHolder(relativeBrightness, relativeBrightness, relativeBrightness) - val circlePos = Vec2d((fieldPos.first.x + fieldHeight * interpolatedSaturation).toDouble(), fieldPos.first.y + fieldHeight * (1.0 - interpolatedBrightness)) + val circlePos = Vec2d((fieldPos.first.x + fieldHeight * saturation).toDouble(), fieldPos.first.y + fieldHeight * (1.0 - brightness)) RenderUtils2D.drawCircleOutline(vertexHelper, circlePos, 4.0, 32, 1.5f, circleColor) } diff --git a/src/main/kotlin/com/lambda/client/gui/rgui/windows/ListWindow.kt b/src/main/kotlin/com/lambda/client/gui/rgui/windows/ListWindow.kt index a1f774863..4602ad8f6 100644 --- a/src/main/kotlin/com/lambda/client/gui/rgui/windows/ListWindow.kt +++ b/src/main/kotlin/com/lambda/client/gui/rgui/windows/ListWindow.kt @@ -13,6 +13,7 @@ import com.lambda.client.util.graphics.GlStateUtils import com.lambda.client.util.graphics.VertexHelper import com.lambda.client.util.graphics.font.FontRenderAdapter import com.lambda.client.util.math.Vec2f +import net.minecraft.client.Minecraft import org.lwjgl.input.Mouse import org.lwjgl.opengl.GL11.* import kotlin.math.max @@ -54,7 +55,7 @@ open class ListWindow( } var prevScrollProgress = 0.0f private val renderScrollProgress - get() = prevScrollProgress + (scrollProgress - prevScrollProgress) * mc.renderPartialTicks + get() = prevScrollProgress + (scrollProgress - prevScrollProgress) private var doubleClickTime = -1L @@ -125,8 +126,11 @@ open class ListWindow( override fun onTick() { super.onTick() - if (children.isEmpty()) return + children.forEach { it.onTick() } + } + override fun onRender(vertexHelper: VertexHelper, absolutePos: Vec2f) { + super.onRender(vertexHelper, absolutePos) val lastVisible = children.lastOrNull { it.visible } val maxScrollProgress = lastVisible?.let { max(it.posY + it.height + ClickGUI.verticalMargin + ClickGUI.resizeBar - height, 0.01f) } ?: draggableHeight @@ -142,18 +146,12 @@ open class ListWindow( if (scrollTimer.tick(100L, false)) { if (scrollProgress < 0) { - scrollSpeed = scrollProgress * -ClickGUI.scrollRubberbandSpeed + scrollSpeed = scrollProgress * -(ClickGUI.scrollRubberbandSpeed / (max(Minecraft.getDebugFPS(), 30) / 60f)) } else if (scrollProgress > maxScrollProgress) { - scrollSpeed = (scrollProgress - maxScrollProgress) * -ClickGUI.scrollRubberbandSpeed + scrollSpeed = (scrollProgress - maxScrollProgress) * -(ClickGUI.scrollRubberbandSpeed / (max(Minecraft.getDebugFPS(), 30) / 60f)) } } - updateChild() - children.forEach { it.onTick() } - } - - override fun onRender(vertexHelper: VertexHelper, absolutePos: Vec2f) { - super.onRender(vertexHelper, absolutePos) if (drawHandle) { val handleText = "....." @@ -215,7 +213,7 @@ open class ListWindow( override fun onMouseInput(mousePos: Vec2f) { super.onMouseInput(mousePos) val relativeMousePos = mousePos.minus(posX, posY - renderScrollProgress) - updateHovered(relativeMousePos) + if (mouseState != MouseState.DRAG) updateHovered(relativeMousePos) if (Mouse.getEventDWheel() != 0) { scrollTimer.reset() scrollSpeed -= Mouse.getEventDWheel() * 0.1f