LightmapRenderStateExtractor.java
net.minecraft.client.renderer.LightmapRenderStateExtractor
信息
- 全限定名:net.minecraft.client.renderer.LightmapRenderStateExtractor
- 类型:public class
- 包:net.minecraft.client.renderer
- 源码路径:src/main/java/net/minecraft/client/renderer/LightmapRenderStateExtractor.java
- 起始行号:L22
- 职责:
TODO
字段/常量
-
WHITE- 类型:
Vector3fc - 修饰符:
public static final - 源码定位:
L23 - 说明:
TODO
- 类型:
-
needsUpdate- 类型:
boolean - 修饰符:
private - 源码定位:
L24 - 说明:
TODO
- 类型:
-
renderer- 类型:
GameRenderer - 修饰符:
private final - 源码定位:
L25 - 说明:
TODO
- 类型:
-
minecraft- 类型:
Minecraft - 修饰符:
private final - 源码定位:
L26 - 说明:
TODO
- 类型:
-
randomSource- 类型:
RandomSource - 修饰符:
private final - 源码定位:
L27 - 说明:
TODO
- 类型:
-
blockLightFlicker- 类型:
float - 修饰符:
private - 源码定位:
L28 - 说明:
TODO
- 类型:
内部类/嵌套类型
- 无
构造器
public LightmapRenderStateExtractor(GameRenderer renderer, Minecraft minecraft) @ L30
- 构造器名:LightmapRenderStateExtractor
- 源码定位:L30
- 修饰符:public
参数:
- renderer: GameRenderer
- minecraft: Minecraft
说明:
TODO
方法
下面的方法块按源码顺序生成。
public void tick() @ L35
- 方法名:tick
- 源码定位:L35
- 返回类型:void
- 修饰符:public
参数:
- 无
说明:
TODO
private float calculateDarknessScale(LivingEntity camera, float darknessGamma, float partialTickTime) @ L42
- 方法名:calculateDarknessScale
- 源码定位:L42
- 返回类型:float
- 修饰符:private
参数:
- camera: LivingEntity
- darknessGamma: float
- partialTickTime: float
说明:
TODO
public void extract(LightmapRenderState renderState, float partialTicks) @ L47
- 方法名:extract
- 源码定位:L47
- 返回类型:void
- 修饰符:public
参数:
- renderState: LightmapRenderState
- partialTicks: float
说明:
TODO
代码
@OnlyIn(Dist.CLIENT)
public class LightmapRenderStateExtractor {
public static final Vector3fc WHITE = new Vector3f(1.0F, 1.0F, 1.0F);
private boolean needsUpdate;
private final GameRenderer renderer;
private final Minecraft minecraft;
private final RandomSource randomSource = RandomSource.create();
private float blockLightFlicker;
public LightmapRenderStateExtractor(GameRenderer renderer, Minecraft minecraft) {
this.renderer = renderer;
this.minecraft = minecraft;
}
public void tick() {
this.blockLightFlicker = this.blockLightFlicker
+ (this.randomSource.nextFloat() - this.randomSource.nextFloat()) * this.randomSource.nextFloat() * this.randomSource.nextFloat() * 0.1F;
this.blockLightFlicker *= 0.9F;
this.needsUpdate = true;
}
private float calculateDarknessScale(LivingEntity camera, float darknessGamma, float partialTickTime) {
float darkness = 0.45F * darknessGamma;
return Math.max(0.0F, Mth.cos((camera.tickCount - partialTickTime) * (float) Math.PI * 0.025F) * darkness);
}
public void extract(LightmapRenderState renderState, float partialTicks) {
renderState.needsUpdate = this.needsUpdate;
if (this.needsUpdate) {
ClientLevel level = this.minecraft.level;
LocalPlayer player = this.minecraft.player;
if (level != null && player != null) {
ProfilerFiller profiler = Profiler.get();
profiler.push("lightmap");
Camera camera = this.renderer.getMainCamera();
renderState.blockFactor = this.blockLightFlicker + 1.4F;
renderState.blockLightTint = ARGB.vector3fFromRGB24(camera.attributeProbe().getValue(EnvironmentAttributes.BLOCK_LIGHT_TINT, partialTicks));
renderState.skyFactor = camera.attributeProbe().getValue(EnvironmentAttributes.SKY_LIGHT_FACTOR, partialTicks);
renderState.skyLightColor = ARGB.vector3fFromRGB24(camera.attributeProbe().getValue(EnvironmentAttributes.SKY_LIGHT_COLOR, partialTicks));
EndFlashState endFlashState = level.endFlashState();
if (endFlashState != null && !this.minecraft.options.hideLightningFlash().get()) {
float intensity = endFlashState.getIntensity(partialTicks);
if (this.minecraft.gui.getBossOverlay().shouldCreateWorldFog()) {
renderState.skyFactor += intensity / 3.0F;
} else {
renderState.skyFactor += intensity;
}
}
renderState.ambientColor = ARGB.vector3fFromRGB24(camera.attributeProbe().getValue(EnvironmentAttributes.AMBIENT_LIGHT_COLOR, partialTicks));
float brightnessOption = this.minecraft.options.gamma().get().floatValue();
float darknessEffectScaleOption = this.minecraft.options.darknessEffectScale().get().floatValue();
float darknessEffectBrightnessModifier = player.getEffectBlendFactor(MobEffects.DARKNESS, partialTicks) * darknessEffectScaleOption;
renderState.brightness = Math.max(0.0F, brightnessOption - darknessEffectBrightnessModifier);
renderState.darknessEffectScale = this.calculateDarknessScale(player, darknessEffectBrightnessModifier, partialTicks)
* darknessEffectScaleOption;
float waterVision = player.getWaterVision();
if (player.hasEffect(MobEffects.NIGHT_VISION)) {
renderState.nightVisionEffectIntensity = GameRenderer.getNightVisionScale(player, partialTicks);
} else if (waterVision > 0.0F && player.hasEffect(MobEffects.CONDUIT_POWER)) {
renderState.nightVisionEffectIntensity = waterVision;
} else {
renderState.nightVisionEffectIntensity = 0.0F;
}
renderState.nightVisionColor = ARGB.vector3fFromRGB24(camera.attributeProbe().getValue(EnvironmentAttributes.NIGHT_VISION_COLOR, partialTicks));
renderState.bossOverlayWorldDarkening = this.renderer.getBossOverlayWorldDarkening(partialTicks);
profiler.pop();
this.needsUpdate = false;
}
}
}
}引用的其他类
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
参数/字段/方法调用 - 关联成员:
GameRenderer.getNightVisionScale()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
ARGB.vector3fFromRGB24()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Mth.cos()
- 引用位置:
-
- 引用位置:
字段/方法调用 - 关联成员:
RandomSource.create()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Profiler.get()
- 引用位置:
-
- 引用位置:
参数
- 引用位置: