PathfindingRenderer.java
net.minecraft.client.renderer.debug.PathfindingRenderer
信息
- 全限定名:net.minecraft.client.renderer.debug.PathfindingRenderer
- 类型:public class
- 包:net.minecraft.client.renderer.debug
- 源码路径:src/main/java/net/minecraft/client/renderer/debug/PathfindingRenderer.java
- 起始行号:L21
- 实现:DebugRenderer.SimpleDebugRenderer
- 职责:
TODO
字段/常量
-
MAX_RENDER_DIST- 类型:
float - 修饰符:
private static final - 源码定位:
L22 - 说明:
TODO
- 类型:
-
MAX_TARGETING_DIST- 类型:
int - 修饰符:
private static final - 源码定位:
L23 - 说明:
TODO
- 类型:
-
SHOW_ONLY_SELECTED- 类型:
boolean - 修饰符:
private static final - 源码定位:
L24 - 说明:
TODO
- 类型:
-
SHOW_OPEN_CLOSED- 类型:
boolean - 修饰符:
private static final - 源码定位:
L25 - 说明:
TODO
- 类型:
-
SHOW_OPEN_CLOSED_COST_MALUS- 类型:
boolean - 修饰符:
private static final - 源码定位:
L26 - 说明:
TODO
- 类型:
-
SHOW_OPEN_CLOSED_NODE_TYPE_WITH_TEXT- 类型:
boolean - 修饰符:
private static final - 源码定位:
L27 - 说明:
TODO
- 类型:
-
SHOW_OPEN_CLOSED_NODE_TYPE_WITH_BOX- 类型:
boolean - 修饰符:
private static final - 源码定位:
L28 - 说明:
TODO
- 类型:
-
SHOW_GROUND_LABELS- 类型:
boolean - 修饰符:
private static final - 源码定位:
L29 - 说明:
TODO
- 类型:
-
TEXT_SCALE- 类型:
float - 修饰符:
private static final - 源码定位:
L30 - 说明:
TODO
- 类型:
内部类/嵌套类型
- 无
构造器
- 无
方法
下面的方法块按源码顺序生成。
public void emitGizmos(double camX, double camY, double camZ, DebugValueAccess debugValues, Frustum frustum, float partialTicks) @ L32
- 方法名:emitGizmos
- 源码定位:L32
- 返回类型:void
- 修饰符:public
参数:
- camX: double
- camY: double
- camZ: double
- debugValues: DebugValueAccess
- frustum: Frustum
- partialTicks: float
说明:
TODO
private static void renderPath(double camX, double camY, double camZ, Path path, float maxNodeDistance) @ L37
- 方法名:renderPath
- 源码定位:L37
- 返回类型:void
- 修饰符:private static
参数:
- camX: double
- camY: double
- camZ: double
- path: Path
- maxNodeDistance: float
说明:
TODO
public static void renderPath(Path path, float maxNodeDistance, boolean renderOpenAndClosedSets, boolean renderGroundLabels, double camX, double camY, double camZ) @ L41
- 方法名:renderPath
- 源码定位:L41
- 返回类型:void
- 修饰符:public static
参数:
- path: Path
- maxNodeDistance: float
- renderOpenAndClosedSets: boolean
- renderGroundLabels: boolean
- camX: double
- camY: double
- camZ: double
说明:
TODO
public static void renderPathLine(Path path, double camX, double camY, double camZ) @ L124
- 方法名:renderPathLine
- 源码定位:L124
- 返回类型:void
- 修饰符:public static
参数:
- path: Path
- camX: double
- camY: double
- camZ: double
说明:
TODO
private static float distanceToCamera(BlockPos n, double camX, double camY, double camZ) @ L142
- 方法名:distanceToCamera
- 源码定位:L142
- 返回类型:float
- 修饰符:private static
参数:
- n: BlockPos
- camX: double
- camY: double
- camZ: double
说明:
TODO
代码
@OnlyIn(Dist.CLIENT)
public class PathfindingRenderer implements DebugRenderer.SimpleDebugRenderer {
private static final float MAX_RENDER_DIST = 80.0F;
private static final int MAX_TARGETING_DIST = 8;
private static final boolean SHOW_ONLY_SELECTED = false;
private static final boolean SHOW_OPEN_CLOSED = true;
private static final boolean SHOW_OPEN_CLOSED_COST_MALUS = false;
private static final boolean SHOW_OPEN_CLOSED_NODE_TYPE_WITH_TEXT = false;
private static final boolean SHOW_OPEN_CLOSED_NODE_TYPE_WITH_BOX = true;
private static final boolean SHOW_GROUND_LABELS = true;
private static final float TEXT_SCALE = 0.32F;
@Override
public void emitGizmos(double camX, double camY, double camZ, DebugValueAccess debugValues, Frustum frustum, float partialTicks) {
debugValues.forEachEntity(DebugSubscriptions.ENTITY_PATHS, (entity, info) -> renderPath(camX, camY, camZ, info.path(), info.maxNodeDistance()));
}
private static void renderPath(double camX, double camY, double camZ, Path path, float maxNodeDistance) {
renderPath(path, maxNodeDistance, true, true, camX, camY, camZ);
}
public static void renderPath(
Path path, float maxNodeDistance, boolean renderOpenAndClosedSets, boolean renderGroundLabels, double camX, double camY, double camZ
) {
renderPathLine(path, camX, camY, camZ);
BlockPos pos = path.getTarget();
if (distanceToCamera(pos, camX, camY, camZ) <= 80.0F) {
Gizmos.cuboid(
new AABB(pos.getX() + 0.25F, pos.getY() + 0.25F, pos.getZ() + 0.25, pos.getX() + 0.75F, pos.getY() + 0.75F, pos.getZ() + 0.75F),
GizmoStyle.fill(ARGB.colorFromFloat(0.5F, 0.0F, 1.0F, 0.0F))
);
for (int i = 0; i < path.getNodeCount(); i++) {
Node n = path.getNode(i);
if (distanceToCamera(n.asBlockPos(), camX, camY, camZ) <= 80.0F) {
float r = i == path.getNextNodeIndex() ? 1.0F : 0.0F;
float b = i == path.getNextNodeIndex() ? 0.0F : 1.0F;
AABB aabb = new AABB(
n.x + 0.5F - maxNodeDistance,
n.y + 0.01F * i,
n.z + 0.5F - maxNodeDistance,
n.x + 0.5F + maxNodeDistance,
n.y + 0.25F + 0.01F * i,
n.z + 0.5F + maxNodeDistance
);
Gizmos.cuboid(aabb, GizmoStyle.fill(ARGB.colorFromFloat(0.5F, r, 0.0F, b)));
}
}
}
Path.DebugData debugData = path.debugData();
if (renderOpenAndClosedSets && debugData != null) {
for (Node node : debugData.closedSet()) {
if (distanceToCamera(node.asBlockPos(), camX, camY, camZ) <= 80.0F) {
Gizmos.cuboid(
new AABB(
node.x + 0.5F - maxNodeDistance / 2.0F,
node.y + 0.01F,
node.z + 0.5F - maxNodeDistance / 2.0F,
node.x + 0.5F + maxNodeDistance / 2.0F,
node.y + 0.1,
node.z + 0.5F + maxNodeDistance / 2.0F
),
GizmoStyle.fill(ARGB.colorFromFloat(0.5F, 1.0F, 0.8F, 0.8F))
);
}
}
for (Node nodex : debugData.openSet()) {
if (distanceToCamera(nodex.asBlockPos(), camX, camY, camZ) <= 80.0F) {
Gizmos.cuboid(
new AABB(
nodex.x + 0.5F - maxNodeDistance / 2.0F,
nodex.y + 0.01F,
nodex.z + 0.5F - maxNodeDistance / 2.0F,
nodex.x + 0.5F + maxNodeDistance / 2.0F,
nodex.y + 0.1,
nodex.z + 0.5F + maxNodeDistance / 2.0F
),
GizmoStyle.fill(ARGB.colorFromFloat(0.5F, 0.8F, 1.0F, 1.0F))
);
}
}
}
if (renderGroundLabels) {
for (int ix = 0; ix < path.getNodeCount(); ix++) {
Node n = path.getNode(ix);
if (distanceToCamera(n.asBlockPos(), camX, camY, camZ) <= 80.0F) {
Gizmos.billboardText(
String.valueOf(n.type), new Vec3(n.x + 0.5, n.y + 0.75, n.z + 0.5), TextGizmo.Style.whiteAndCentered().withScale(0.32F)
)
.setAlwaysOnTop();
Gizmos.billboardText(
String.format(Locale.ROOT, "%.2f", n.costMalus),
new Vec3(n.x + 0.5, n.y + 0.25, n.z + 0.5),
TextGizmo.Style.whiteAndCentered().withScale(0.32F)
)
.setAlwaysOnTop();
}
}
}
}
public static void renderPathLine(Path path, double camX, double camY, double camZ) {
if (path.getNodeCount() >= 2) {
Vec3 last = path.getNode(0).asVec3();
for (int i = 1; i < path.getNodeCount(); i++) {
Node n = path.getNode(i);
if (distanceToCamera(n.asBlockPos(), camX, camY, camZ) > 80.0F) {
last = n.asVec3();
} else {
float hue = (float)i / path.getNodeCount() * 0.33F;
int color = ARGB.opaque(Mth.hsvToRgb(hue, 0.9F, 0.9F));
Gizmos.arrow(last.add(0.5, 0.5, 0.5), n.asVec3().add(0.5, 0.5, 0.5), color);
last = n.asVec3();
}
}
}
}
private static float distanceToCamera(BlockPos n, double camX, double camY, double camZ) {
return (float)(Math.abs(n.getX() - camX) + Math.abs(n.getY() - camY) + Math.abs(n.getZ() - camZ));
}
}引用的其他类
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
实现
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
GizmoStyle.fill()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Gizmos.arrow(), Gizmos.billboardText(), Gizmos.cuboid()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
TextGizmo.Style.whiteAndCentered()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
ARGB.colorFromFloat(), ARGB.opaque()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Mth.hsvToRgb()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
构造调用 - 关联成员:
AABB()
- 引用位置:
-
- 引用位置:
构造调用 - 关联成员:
Vec3()
- 引用位置: