LocatorBarRenderer.java
net.minecraft.client.gui.contextualbar.LocatorBarRenderer
信息
- 全限定名:net.minecraft.client.gui.contextualbar.LocatorBarRenderer
- 类型:public class
- 包:net.minecraft.client.gui.contextualbar
- 源码路径:src/main/java/net/minecraft/client/gui/contextualbar/LocatorBarRenderer.java
- 起始行号:L21
- 实现:ContextualBarRenderer
- 职责:
TODO
字段/常量
-
LOCATOR_BAR_BACKGROUND- 类型:
Identifier - 修饰符:
private static final - 源码定位:
L22 - 说明:
TODO
- 类型:
-
LOCATOR_BAR_ARROW_UP- 类型:
Identifier - 修饰符:
private static final - 源码定位:
L23 - 说明:
TODO
- 类型:
-
LOCATOR_BAR_ARROW_DOWN- 类型:
Identifier - 修饰符:
private static final - 源码定位:
L24 - 说明:
TODO
- 类型:
-
DOT_SIZE- 类型:
int - 修饰符:
private static final - 源码定位:
L25 - 说明:
TODO
- 类型:
-
VISIBLE_DEGREE_RANGE- 类型:
int - 修饰符:
private static final - 源码定位:
L26 - 说明:
TODO
- 类型:
-
ARROW_WIDTH- 类型:
int - 修饰符:
private static final - 源码定位:
L27 - 说明:
TODO
- 类型:
-
ARROW_HEIGHT- 类型:
int - 修饰符:
private static final - 源码定位:
L28 - 说明:
TODO
- 类型:
-
ARROW_LEFT- 类型:
int - 修饰符:
private static final - 源码定位:
L29 - 说明:
TODO
- 类型:
-
ARROW_PADDING- 类型:
int - 修饰符:
private static final - 源码定位:
L30 - 说明:
TODO
- 类型:
-
minecraft- 类型:
Minecraft - 修饰符:
private final - 源码定位:
L31 - 说明:
TODO
- 类型:
内部类/嵌套类型
- 无
构造器
public LocatorBarRenderer(Minecraft minecraft) @ L33
- 构造器名:LocatorBarRenderer
- 源码定位:L33
- 修饰符:public
参数:
- minecraft: Minecraft
说明:
TODO
方法
下面的方法块按源码顺序生成。
public void extractBackground(GuiGraphicsExtractor graphics, DeltaTracker deltaTracker) @ L37
- 方法名:extractBackground
- 源码定位:L37
- 返回类型:void
- 修饰符:public
参数:
- graphics: GuiGraphicsExtractor
- deltaTracker: DeltaTracker
说明:
TODO
public void extractRenderState(GuiGraphicsExtractor graphics, DeltaTracker deltaTracker) @ L44
- 方法名:extractRenderState
- 源码定位:L44
- 返回类型:void
- 修饰符:public
参数:
- graphics: GuiGraphicsExtractor
- deltaTracker: DeltaTracker
说明:
TODO
代码
@OnlyIn(Dist.CLIENT)
public class LocatorBarRenderer implements ContextualBarRenderer {
private static final Identifier LOCATOR_BAR_BACKGROUND = Identifier.withDefaultNamespace("hud/locator_bar_background");
private static final Identifier LOCATOR_BAR_ARROW_UP = Identifier.withDefaultNamespace("hud/locator_bar_arrow_up");
private static final Identifier LOCATOR_BAR_ARROW_DOWN = Identifier.withDefaultNamespace("hud/locator_bar_arrow_down");
private static final int DOT_SIZE = 9;
private static final int VISIBLE_DEGREE_RANGE = 60;
private static final int ARROW_WIDTH = 7;
private static final int ARROW_HEIGHT = 5;
private static final int ARROW_LEFT = 1;
private static final int ARROW_PADDING = 1;
private final Minecraft minecraft;
public LocatorBarRenderer(Minecraft minecraft) {
this.minecraft = minecraft;
}
@Override
public void extractBackground(GuiGraphicsExtractor graphics, DeltaTracker deltaTracker) {
graphics.blitSprite(
RenderPipelines.GUI_TEXTURED, LOCATOR_BAR_BACKGROUND, this.left(this.minecraft.getWindow()), this.top(this.minecraft.getWindow()), 182, 5
);
}
@Override
public void extractRenderState(GuiGraphicsExtractor graphics, DeltaTracker deltaTracker) {
int top = this.top(this.minecraft.getWindow());
Entity cameraEntity = this.minecraft.getCameraEntity();
if (cameraEntity != null) {
Level level = cameraEntity.level();
TickRateManager tickRateManager = level.tickRateManager();
PartialTickSupplier partialTickSupplier = entity -> deltaTracker.getGameTimeDeltaPartialTick(!tickRateManager.isEntityFrozen(entity));
this.minecraft
.player
.connection
.getWaypointManager()
.forEachWaypoint(
cameraEntity,
waypoint -> {
if (!waypoint.id().left().map(uuid -> uuid.equals(cameraEntity.getUUID())).orElse(false)) {
double angle = waypoint.yawAngleToCamera(level, this.minecraft.gameRenderer.getMainCamera(), partialTickSupplier);
if (!(angle <= -60.0) && !(angle > 60.0)) {
int screenMiddle = Mth.ceil((graphics.guiWidth() - 9) / 2.0F);
Waypoint.Icon icon = waypoint.icon();
WaypointStyle style = this.minecraft.getWaypointStyles().get(icon.style);
float distance = Mth.sqrt((float)waypoint.distanceSquared(cameraEntity));
Identifier sprite = style.sprite(distance);
int color = icon.color
.orElseGet(
() -> waypoint.id()
.map(
uuid -> ARGB.setBrightness(ARGB.color(255, uuid.hashCode()), 0.9F),
name -> ARGB.setBrightness(ARGB.color(255, name.hashCode()), 0.9F)
)
);
int dotPosition = Mth.floor(angle * 173.0 / 2.0 / 60.0);
graphics.blitSprite(RenderPipelines.GUI_TEXTURED, sprite, screenMiddle + dotPosition, top - 2, 9, 9, color);
TrackedWaypoint.PitchDirection pitchDirection = waypoint.pitchDirectionToCamera(
level, this.minecraft.gameRenderer, partialTickSupplier
);
if (pitchDirection != TrackedWaypoint.PitchDirection.NONE) {
int arrowTop;
Identifier arrowSprite;
if (pitchDirection == TrackedWaypoint.PitchDirection.DOWN) {
arrowTop = 6;
arrowSprite = LOCATOR_BAR_ARROW_DOWN;
} else {
arrowTop = -6;
arrowSprite = LOCATOR_BAR_ARROW_UP;
}
graphics.blitSprite(RenderPipelines.GUI_TEXTURED, arrowSprite, screenMiddle + dotPosition + 1, top + arrowTop, 7, 5);
}
}
}
}
);
}
}
}引用的其他类
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
实现
- 引用位置:
-
- 引用位置:
字段/方法调用 - 关联成员:
Identifier.withDefaultNamespace()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
ARGB.color(), ARGB.setBrightness()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Mth.ceil(), Mth.floor(), Mth.sqrt()
- 引用位置: