Подписывайтесь на наш Telegram и не пропускайте важные новости! Перейти

Вопрос Что с ротацией под UniAc

Начинающий
Начинающий
Статус
Онлайн
Регистрация
17 Дек 2023
Сообщения
121
Реакции
0
Здравствуйте сделал Ротацию под UniAc но когда она отходит от таргета начинает очень быстро крутится что делать
public class LonyGriefMode extends AngleMode {
private static Angle snapTarget = null;
private static long lastSnapTime = 0;
private static final long SNAP_INTERVAL = 80;
private static float interpolationProgress = 0.0f;

public LonyGriefMode() { super("LonyGrief"); }

@override
public Angle limitAngleChange(Angle currentAngle, Angle targetAngle, Vec3d vec3d, Entity entity) {
AttackAuraModule aura = Boostanull.getInstance().getModuleManager().getAttackAuraModule();
long currentTime = System.currentTimeMillis();

if (entity == null) {
snapTarget = null;
return targetAngle;
}

boolean shouldSnap = snapTarget == null ||
(currentTime - lastSnapTime) > SNAP_INTERVAL ||
interpolationProgress >= 1.0f;

if (shouldSnap) {
float randomYawOffset = (float) (Math.random() - 0.5) * 20.0f; // ±10 градусов
float randomPitchOffset = (float) (Math.random() - 0.5) * 12.0f; // ±6 градусов

snapTarget = new Angle(
targetAngle.getYaw() + randomYawOffset,
targetAngle.getPitch() + randomPitchOffset
);

lastSnapTime = currentTime;
interpolationProgress = 0.0f;
}

float baseSpeed = 0.3f;
boolean canAttack = aura != null && aura.isState() && aura.getTarget() != null;

if (canAttack) {
baseSpeed = 0.5f;
}

float speedVariation = (float) (Math.sin(currentTime / 180.0) * 0.15 + 1.0);
baseSpeed *= speedVariation;
interpolationProgress = Math.min(1.0f, interpolationProgress + baseSpeed);
float easedProgress = easeInOutQuart(interpolationProgress);
float newYaw = MathHelper.lerp(easedProgress, currentAngle.getYaw(), snapTarget.getYaw());
float newPitch = MathHelper.lerp(easedProgress, currentAngle.getPitch(), snapTarget.getPitch());
if (!canAttack) {
float microJitterYaw = (float) (Math.sin(currentTime / 400.0) * 0.1);
float microJitterPitch = (float) (Math.cos(currentTime / 300.0) * 0.08);

newYaw += microJitterYaw;
newPitch += microJitterPitch;
}

return new Angle(newYaw, newPitch);
}

private float easeInOutQuart(float t) {
if (t < 0.5f) {
return 8 * t * t * t * t;
} else {
float p = 2 * t - 2;
return 1 - 8 * p * p * p * p / 2;
}
}

private float randomLerp(float min, float max) {
return MathHelper.lerp(new SecureRandom().nextFloat(), min, max);
}

@override
public Vec3d randomValue() {
return new Vec3d(0.015, 0.075, 0.025);
}
}
 
как минимум чтобы LLM за тебя не писала ротацию и код вставлять через
1767453239384.png
 
ладно скорее всего проблема в
float newYaw = MathHelper.lerp(easedProgress, currentAngle.getYaw(), snapTarget.getYaw());
float newPitch = MathHelper.lerp(easedProgress, currentAngle.getPitch(), snapTarget.getPitch());
в каких то моментах вместо короткого вращения будет браться больший угол и всё
 
Назад
Сверху Снизу