Мне нужен плавный переход, как вы можете видеть в коде я пытался сделать переход, используя множество методов, интерполяцию (лерп), и просто увеличивая значение числа на красном канале (канал необязательный) и т. д. и т. п., но каждый из этих способов не работает должным образом, Я даже написал небольшой код, который каждый тик получает текущее значение тумана, округляет его до тысячных и переводит в двойное, чтобы избежать потери данных, затем к нему добавляется 0,1 и снова переводится в float, но переход резкий, то цвет не меняется, то переход плавный но 0.1 просто перестает прибавлять к значению цвета в канале, как я понимаю здесь тоже мешает сам майнкрафт перебивая мой код своим, в общем я долго искал и я устал искать.
minecraft 1.12.2
forge api 2859
java
вот код:
Код: Выделить всё
import net.minecraft.client.Minecraft;
import net.minecraftforge.client.event.EntityViewRenderEvent;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
public class RustWaterFog {
static public double lerp(double fromValue, double toValue, double progress) {
return fromValue + (toValue - fromValue) * progress;
}
double[] dod = {0.0, 0.0, 0.0};
float[] progcon = {0.0001f, 0.0001f, 0.0001f};
@SubscribeEvent
public void onEntityViewRender(EntityViewRenderEvent.FogColors event) {
double[] BLOOD_COLOR = {event.getRed(), event.getGreen(), event.getBlue()};
if (Minecraft.getMinecraft().world.isRaining()) {
/*
event.setBlue(lerp(BLOOD_COLOR[2], 0.02f, progcon[2]));
event.setGreen(lerp(BLOOD_COLOR[1], 0.02f, progcon[1]));
event.setRed(lerp(BLOOD_COLOR[0], 0.50f, progcon[0]));
dod[0] = Math.round(lerp(BLOOD_COLOR[0], 0.50f, progcon[0]) * 100.0) / 100.0;
dod[1] = Math.round(lerp(BLOOD_COLOR[1], 0.02f, progcon[1]) * 100.0) / 100.0;
dod[2] = Math.round(lerp(BLOOD_COLOR[2], 0.02f, progcon[2]) * 100.0) / 100.0;
if (dod[0] < 0.50)
{
progcon[0] += 0.0009f;
} else {
}
if (dod[1] < 0.02)
{
progcon[1] += 0.0009f;
}
if (dod[2] < 0.02)
{
progcon[2] += 0.0009f;
}
System.out.println(dod[1]);
double dolboeb = 0.001;
//dolboeb+=0.001;
double red = event.getRed();
float red1 = (float)Math.round(lerp(event.getRed()*100, 58, dolboeb) * 1000.0) / 1000;
event.setRed(red1);
/*event.setGreen();
event.setBlue();*/
dod[0] = (Math.round(BLOOD_COLOR[0] * 100.0) / 100.0)+0.1;
float dodred = (float)dod[0];
event.setRed(dodred);
System.out.println(dodred);
}
}
}
Код: Выделить всё
0.2
0.22
0.22
0.22
0.23
0.23
0.23
0.23
0.23
0.23
0.23
0.23
0.23
0.23
0.23
0.23
0.23
0.23
0.23
0.23
0.23
0.23
0.23
0.23
0.23
0.23
0.23
0.24
0.24
0.24
0.24
0.24
0.24
0.24
0.24
0.24
0.24
0.24
0.24
0.24
0.24
0.24
0.24
0.24
0.24
0.24
0.24
0.24
0.24
0.24
0.24
0.24
0.24
0.24
0.24
0.24
0.24
0.24
0.24
0.24
0.24
0.24
0.24
0.24
0.24
0.24
0.24
0.24
0.24
0.24
0.24
0.24
0.24
0.24
0.24
0.24
0.25
Заранее извиняюсь, если структура вопроса неправильная.
спасибо
Подробнее здесь: https://stackoverflow.com/questions/785 ... -minecraft