Плавный переход цвета тумана от текущего значения, к установленному майнкрафт 1.12.2JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Плавный переход цвета тумана от текущего значения, к установленному майнкрафт 1.12.2

Сообщение Anonymous »

Итак, у меня есть некорректно работающий код, который каждый тик с обработчиком основного события проверяет, идет дождь или нет, если идет дождь, то код в теле выполняется, но он выполняется 20 раз за секунду (каждый такт), если я не буду интерполировать, то цвет тумана мгновенно изменится, я этого не хочу.
Мне нужен плавный переход, как вы можете видеть в коде я пытался сделать переход, используя множество методов, интерполяцию (лерп), и просто увеличивая значение числа на красном канале (канал необязательный) и т. д. и т. п., но каждый из этих способов не работает должным образом, Я даже написал небольшой код, который каждый тик получает текущее значение тумана, округляет его до тысячных и переводит в двойное, чтобы избежать потери данных, затем к нему добавляется 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
после 0.25 ничего не меняется.
Заранее извиняюсь, если структура вопроса неправильная.
спасибо

Подробнее здесь: https://stackoverflow.com/questions/785 ... -minecraft
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»