Начинающий
- Статус
- Оффлайн
- Регистрация
- 31 Янв 2024
- Сообщения
- 266
- Реакции
- 3
моя первая тема (модеры одобрите пж)
motiongraph:package im.expensive.ui.display.impl; import com.mojang.blaze3d.matrix.MatrixStack; import im.expensive.Expensive; import im.expensive.events.EventDisplay; import im.expensive.events.EventUpdate; import im.expensive.ui.display.ElementRenderer; import im.expensive.ui.styles.StyleManager; import im.expensive.utils.drag.Dragging; import im.expensive.utils.render.ColorUtils; import im.expensive.utils.render.DisplayUtils; import im.expensive.utils.render.Scissor; import im.expensive.utils.render.font.Fonts; import lombok.AccessLevel; import lombok.RequiredArgsConstructor; import lombok.experimental.FieldDefaults; import net.minecraft.client.Minecraft; import org.lwjgl.opengl.GL11; import java.util.ArrayList; @FieldDefaults(level = AccessLevel.PRIVATE) @RequiredArgsConstructor public class MotionGraphRenderer implements ElementRenderer { final Dragging dragging; final Minecraft mc = Minecraft.getInstance(); final ArrayList<Double> height = new ArrayList<>(); double bps; double displayBps; public void tick() { this.height.add(this.bps); if (this.height.size() > 80) { this.height.remove(0); } if (displayBps == 0) displayBps = bps; displayBps += (bps - displayBps) * 0.15; } public void render(EventDisplay eventDisplay) { MatrixStack ms = eventDisplay.getMatrixStack(); float posX = this.dragging.getX(); float posY = this.dragging.getY(); this.bps = Math.hypot(mc.player.prevPosX - mc.player.getPosX(), mc.player.prevPosZ - mc.player.getPosZ()) * 20.0D; renderMotionGraph(ms, posX, posY); Scissor.unset(); } private void renderMotionGraph(MatrixStack ms, float posX, float posY) { int width = 100; int height = 40; int bgTop = ColorUtils.rgba(30, 30, 40, 180); int bgBottom = ColorUtils.rgba(15, 15, 25, 180); DisplayUtils.drawShadow(posX, posY, width, height, 10, ColorUtils.rgba(0, 0, 0, 80)); DisplayUtils.drawGradientRound(posX, posY, width, height, 4, bgTop, bgTop, bgBottom, bgBottom); DisplayUtils.drawRoundedOutline(posX, posY, width, height, 4, 1f, ColorUtils.rgba(255, 255, 255, 30)); if (this.height.size() < 2) return; double maxBps = Math.max(0.5, this.height.stream().mapToDouble(Double::doubleValue).max().orElse(1.0)); double minBps = this.height.stream().mapToDouble(Double::doubleValue).min().orElse(0.0); double range = maxBps - minBps; if (range < 0.1) range = 0.1; drawGrid(posX, posY, width, height); drawGraphFill(posX, posY, width, height, minBps, range); GL11.glPushMatrix(); GL11.glDisable(GL11.GL_TEXTURE_2D); GL11.glEnable(GL11.GL_LINE_SMOOTH); GL11.glEnable(GL11.GL_BLEND); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); GL11.glLineWidth(2.0F); GL11.glBegin(GL11.GL_LINE_STRIP); int lineColor = ColorUtils.rgb(255, 255, 255); float red = ((lineColor >> 16) & 0xFF) / 255.0f; float green = ((lineColor >> 8) & 0xFF) / 255.0f; float blue = (lineColor & 0xFF) / 255.0f; GL11.glColor4f(red, green, blue, 0.9f); for (int i = 0; i < this.height.size(); i++) { double x = posX + 4 + (i * (width - 8.0) / (this.height.size() - 1)); double value = this.height.get(i); double normalized = (value - minBps) / range; double y = posY + height - 4 - (normalized * (height - 8)); GL11.glVertex2d(x, y); } GL11.glEnd(); GL11.glDisable(GL11.GL_BLEND); GL11.glDisable(GL11.GL_LINE_SMOOTH); GL11.glEnable(GL11.GL_TEXTURE_2D); GL11.glPopMatrix(); drawText(ms, posX, posY, width, height); dragging.setWidth(width); dragging.setHeight(height); } private void drawGrid(float posX, float posY, int width, int height) { GL11.glPushMatrix(); GL11.glDisable(GL11.GL_TEXTURE_2D); GL11.glEnable(GL11.GL_BLEND); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); GL11.glLineWidth(0.5F); GL11.glBegin(GL11.GL_LINES); GL11.glColor4f(1.0f, 1.0f, 1.0f, 0.05f); for (int i = 1; i < 4; i++) { float x = posX + (width * i / 4.0f); GL11.glVertex2f(x, posY + 3); GL11.glVertex2f(x, posY + height - 3); } for (int i = 1; i < 3; i++) { float y = posY + (height * i / 3.0f); GL11.glVertex2f(posX + 3, y); GL11.glVertex2f(posX + width - 3, y); } GL11.glEnd(); GL11.glEnable(GL11.GL_TEXTURE_2D); GL11.glPopMatrix(); } private void drawGraphFill(float posX, float posY, int width, int height, double minBps, double range) { GL11.glPushMatrix(); GL11.glDisable(GL11.GL_TEXTURE_2D); GL11.glEnable(GL11.GL_BLEND); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); int fillColor = ColorUtils.rgb(255, 255, 255); float red = ((fillColor >> 16) & 0xFF) / 255.0f; float green = ((fillColor >> 8) & 0xFF) / 255.0f; float blue = (fillColor & 0xFF) / 255.0f; GL11.glBegin(GL11.GL_TRIANGLE_STRIP); for (int i = 0; i < this.height.size(); i++) { double x = posX + 4 + (i * (width - 8.0) / (this.height.size() - 1)); double value = this.height.get(i); double normalized = (value - minBps) / range; double y = posY + height - 4 - (normalized * (height - 8)); GL11.glColor4f(red, green, blue, 0.0f); GL11.glVertex2d(x, posY + height - 4); GL11.glColor4f(red, green, blue, 0.05f); GL11.glVertex2d(x, y); } GL11.glEnd(); GL11.glDisable(GL11.GL_BLEND); GL11.glEnable(GL11.GL_TEXTURE_2D); GL11.glPopMatrix(); } private void drawText(MatrixStack ms, float posX, float posY, int width, int height) { String bpsText = String.format("%.1f", displayBps); String unitText = "BPS"; float fontSize = 7.0f; float unitFontSize = 5.5f; float textX = posX + width - 30; float textY = posY + 6; float unitX = posX + width - 12; float unitY = posY + 8; int textColor = ColorUtils.rgb(255, 255, 255); int unitColor = ColorUtils.rgb(200, 200, 200); Fonts.sfMedium.drawText(ms, bpsText, textX, textY, textColor, fontSize); Fonts.sfMedium.drawText(ms, unitText, unitX, unitY, unitColor, unitFontSize); if (this.height.size() > 10) { double avgSpeed = this.height.stream() .skip(Math.max(0, this.height.size() - 20)) .mapToDouble(Double::doubleValue) .average().orElse(0.0); String avgText = String.format("Avg: %.1f", avgSpeed); float avgX = posX + 4; float avgY = posY + height - 8; int avgColor = ColorUtils.rgb(160, 160, 160); Fonts.sfMedium.drawText(ms, avgText, avgX, avgY, avgColor, 5.0f); } } public void update(EventUpdate e) { tick(); } }
ss-Посмотреть вложение 307312
и снова мой годовалый мошен граф насилуют