Начинающий
Начинающий
- Статус
- Оффлайн
- Регистрация
- 7 Фев 2024
- Сообщения
- 80
- Реакции
- 0
- Выберите загрузчик игры
- Fabric
Корооочч да, сделал моушен под 1.21, с оптимизацией есть траблы, если нужно, то сами исправите
MotionGraph:
package fever.visual.features.hud.impl;
import fever.visual.FeverVisual;
import fever.visual.core.Managers;
import fever.visual.features.hud.HudElement;
import fever.visual.gui.font.FontRenderers;
import fever.visual.setting.Setting;
import fever.visual.utility.math.MathUtility;
import fever.visual.utility.render.Render2DEngine;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.util.math.MatrixStack;
import java.awt.*;
import java.util.ArrayDeque;
import java.util.Queue;
public class MotionGraph extends HudElement {
private final Setting<Boolean> average = new Setting<>("Average", true);
private final Setting<Color> primaryColor = new Setting<>("Primary Color", new Color(65, 148, 255));
private final Setting<Color> secondaryColor = new Setting<>("Secondary Color", new Color(0, 0, 0, 180));
private final Setting<Integer> historySize = new Setting<>("History Size", 30, 10, 100);
private final Queue<Float> speedHistory = new ArrayDeque<>();
private final float[] renderedPoints = new float[100];
private long lastUpdateTime;
private static final int animation = 8;
public MotionGraph() {
super("MotionGraph", 50, 50);
for (int i = 0; i < historySize.getValue(); i++) {
speedHistory.add(0f);
renderedPoints[i] = 0f;
}
}
@Override
public void onRender2D(DrawContext context) {
super.onRender2D(context);
float currentSpeed = getSpeedBpS() * FeverVisual.TICK_TIMER;
final float maxSpeed = 20f;
if (speedHistory.size() >= historySize.getValue()) {
speedHistory.poll();
}
speedHistory.add(currentSpeed);
long currentTime = System.currentTimeMillis();
float deltaTime = Math.min((currentTime - lastUpdateTime) / 1000f, 0.1f);
lastUpdateTime = currentTime;
Float[] speeds = speedHistory.toArray(new Float[0]);
int pointCount = speeds.length;
final float totalHeight = 50f;
final float bottomMargin = 1f;
final float maxLineHeight = totalHeight - 18f;
final float graphBottom = getPosY() + totalHeight - bottomMargin;
final float bulletWidth = FontRenderers.sf_bold.getStringWidth("•");
final String str = "MotionGraph";
final float textWidth = FontRenderers.sf_bold.getStringWidth(str);
final float totalWidth = Math.max(100, 4 + bulletWidth + 2 + textWidth + 4);
final float pX = getPosX() > mc.getWindow().getScaledWidth() / 2f ? getPosX() - totalWidth : getPosX();
Render2DEngine.drawRound(context.getMatrices(), pX, getPosY(), totalWidth, totalHeight, 5f, secondaryColor.getValue());
for (int i = 0; i < renderedPoints.length; i++) {
if (i < pointCount) {
float targetY = graphBottom - (Math.min(speeds[i] / maxSpeed, 1f) * maxLineHeight);
renderedPoints[i] += (targetY - renderedPoints[i]) * 0.1f * deltaTime * 60f;
} else {
renderedPoints[i] = graphBottom;
}
}
drawGraph(context, pX, getPosY(), totalWidth, totalHeight, pointCount);
renderText(context, pX, getPosY(), totalWidth, bulletWidth, str, speeds, pointCount);
setBounds(pX, getPosY(), totalWidth, totalHeight);
}
private void drawGraph(DrawContext context, float x, float y, float width, float height, int pointCount) {
if (pointCount < 2) return;
MatrixStack matrices = context.getMatrices();
Color graphColor = primaryColor.getValue();
float segmentWidth = (width - 10) / (historySize.getValue() - 1);
float xStart = x + 5;
for (int i = 0; i < pointCount - 1; i++) {
float x1 = xStart + i * segmentWidth;
float y1 = renderedPoints[i];
float x2 = xStart + (i + 1) * segmentWidth;
float y2 = renderedPoints[i + 1];
Render2DEngine.drawLine(x1, y1, x2, y2, graphColor.getRGB());
}
}
private void renderText(DrawContext context, float pX, float pY, float totalWidth,
float bulletWidth, String str, Float[] speeds, int pointCount) {
FontRenderers.sf_bold.drawString(context.getMatrices(), "•", pX + 4, pY + 4.5f, Color.WHITE.getRGB());
FontRenderers.sf_bold.drawString(context.getMatrices(), str, pX + 4 + bulletWidth + 2, pY + 5, Color.WHITE.getRGB());
if (pointCount > 0) {
String speedText = MathUtility.round(speeds[pointCount - 1]) + " b/s";
FontRenderers.sf_medium.drawString(context.getMatrices(), speedText,
pX + totalWidth - 5 - FontRenderers.sf_medium.getStringWidth(speedText),
pY + 6, Color.WHITE.getRGB());
}
}
public float getSpeedBpS() {
return (average.getValue() ? Managers.PLAYER.averagePlayerSpeed : Managers.PLAYER.currentPlayerSpeed) * 20f;
}
}
Последнее редактирование: