soiz1's picture
Upload folder using huggingface_hub
d46f4a3 verified
package net.minecraft.client.renderer.debug;
import com.google.common.collect.Maps;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
import java.util.Locale;
import java.util.Map;
import net.minecraft.Util;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.core.BlockPos;
import net.minecraft.util.Mth;
import net.minecraft.world.level.pathfinder.Node;
import net.minecraft.world.level.pathfinder.Path;
import net.minecraft.world.phys.AABB;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
@OnlyIn(Dist.CLIENT)
public class PathfindingRenderer implements DebugRenderer.SimpleDebugRenderer {
private final Map<Integer, Path> pathMap = Maps.newHashMap();
private final Map<Integer, Float> pathMaxDist = Maps.newHashMap();
private final Map<Integer, Long> creationMap = Maps.newHashMap();
private static final long TIMEOUT = 5000L;
private static final float MAX_RENDER_DIST = 80.0F;
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.02F;
public void addPath(int p_113612_, Path p_113613_, float p_113614_) {
this.pathMap.put(p_113612_, p_113613_);
this.creationMap.put(p_113612_, Util.getMillis());
this.pathMaxDist.put(p_113612_, p_113614_);
}
@Override
public void render(PoseStack p_113629_, MultiBufferSource p_113630_, double p_113631_, double p_113632_, double p_113633_) {
if (!this.pathMap.isEmpty()) {
long i = Util.getMillis();
for (Integer integer : this.pathMap.keySet()) {
Path path = this.pathMap.get(integer);
float f = this.pathMaxDist.get(integer);
renderPath(p_113629_, p_113630_, path, f, true, true, p_113631_, p_113632_, p_113633_);
}
for (Integer integer1 : this.creationMap.keySet().toArray(new Integer[0])) {
if (i - this.creationMap.get(integer1) > 5000L) {
this.pathMap.remove(integer1);
this.creationMap.remove(integer1);
}
}
}
}
public static void renderPath(
PoseStack p_270399_,
MultiBufferSource p_270359_,
Path p_270189_,
float p_270841_,
boolean p_270481_,
boolean p_270748_,
double p_270187_,
double p_270252_,
double p_270371_
) {
renderPathLine(p_270399_, p_270359_.getBuffer(RenderType.debugLineStrip(6.0)), p_270189_, p_270187_, p_270252_, p_270371_);
BlockPos blockpos = p_270189_.getTarget();
if (distanceToCamera(blockpos, p_270187_, p_270252_, p_270371_) <= 80.0F) {
DebugRenderer.renderFilledBox(
p_270399_,
p_270359_,
new AABB(
(double)((float)blockpos.getX() + 0.25F),
(double)((float)blockpos.getY() + 0.25F),
(double)blockpos.getZ() + 0.25,
(double)((float)blockpos.getX() + 0.75F),
(double)((float)blockpos.getY() + 0.75F),
(double)((float)blockpos.getZ() + 0.75F)
)
.move(-p_270187_, -p_270252_, -p_270371_),
0.0F,
1.0F,
0.0F,
0.5F
);
for (int i = 0; i < p_270189_.getNodeCount(); i++) {
Node node = p_270189_.getNode(i);
if (distanceToCamera(node.asBlockPos(), p_270187_, p_270252_, p_270371_) <= 80.0F) {
float f = i == p_270189_.getNextNodeIndex() ? 1.0F : 0.0F;
float f1 = i == p_270189_.getNextNodeIndex() ? 0.0F : 1.0F;
DebugRenderer.renderFilledBox(
p_270399_,
p_270359_,
new AABB(
(double)((float)node.x + 0.5F - p_270841_),
(double)((float)node.y + 0.01F * (float)i),
(double)((float)node.z + 0.5F - p_270841_),
(double)((float)node.x + 0.5F + p_270841_),
(double)((float)node.y + 0.25F + 0.01F * (float)i),
(double)((float)node.z + 0.5F + p_270841_)
)
.move(-p_270187_, -p_270252_, -p_270371_),
f,
0.0F,
f1,
0.5F
);
}
}
}
Path.DebugData path$debugdata = p_270189_.debugData();
if (p_270481_ && path$debugdata != null) {
for (Node node1 : path$debugdata.closedSet()) {
if (distanceToCamera(node1.asBlockPos(), p_270187_, p_270252_, p_270371_) <= 80.0F) {
DebugRenderer.renderFilledBox(
p_270399_,
p_270359_,
new AABB(
(double)((float)node1.x + 0.5F - p_270841_ / 2.0F),
(double)((float)node1.y + 0.01F),
(double)((float)node1.z + 0.5F - p_270841_ / 2.0F),
(double)((float)node1.x + 0.5F + p_270841_ / 2.0F),
(double)node1.y + 0.1,
(double)((float)node1.z + 0.5F + p_270841_ / 2.0F)
)
.move(-p_270187_, -p_270252_, -p_270371_),
1.0F,
0.8F,
0.8F,
0.5F
);
}
}
for (Node node3 : path$debugdata.openSet()) {
if (distanceToCamera(node3.asBlockPos(), p_270187_, p_270252_, p_270371_) <= 80.0F) {
DebugRenderer.renderFilledBox(
p_270399_,
p_270359_,
new AABB(
(double)((float)node3.x + 0.5F - p_270841_ / 2.0F),
(double)((float)node3.y + 0.01F),
(double)((float)node3.z + 0.5F - p_270841_ / 2.0F),
(double)((float)node3.x + 0.5F + p_270841_ / 2.0F),
(double)node3.y + 0.1,
(double)((float)node3.z + 0.5F + p_270841_ / 2.0F)
)
.move(-p_270187_, -p_270252_, -p_270371_),
0.8F,
1.0F,
1.0F,
0.5F
);
}
}
}
if (p_270748_) {
for (int j = 0; j < p_270189_.getNodeCount(); j++) {
Node node2 = p_270189_.getNode(j);
if (distanceToCamera(node2.asBlockPos(), p_270187_, p_270252_, p_270371_) <= 80.0F) {
DebugRenderer.renderFloatingText(
p_270399_,
p_270359_,
String.valueOf(node2.type),
(double)node2.x + 0.5,
(double)node2.y + 0.75,
(double)node2.z + 0.5,
-1,
0.02F,
true,
0.0F,
true
);
DebugRenderer.renderFloatingText(
p_270399_,
p_270359_,
String.format(Locale.ROOT, "%.2f", node2.costMalus),
(double)node2.x + 0.5,
(double)node2.y + 0.25,
(double)node2.z + 0.5,
-1,
0.02F,
true,
0.0F,
true
);
}
}
}
}
public static void renderPathLine(PoseStack p_270666_, VertexConsumer p_270602_, Path p_270511_, double p_270524_, double p_270163_, double p_270176_) {
for (int i = 0; i < p_270511_.getNodeCount(); i++) {
Node node = p_270511_.getNode(i);
if (!(distanceToCamera(node.asBlockPos(), p_270524_, p_270163_, p_270176_) > 80.0F)) {
float f = (float)i / (float)p_270511_.getNodeCount() * 0.33F;
int j = i == 0 ? 0 : Mth.hsvToRgb(f, 0.9F, 0.9F);
int k = j >> 16 & 0xFF;
int l = j >> 8 & 0xFF;
int i1 = j & 0xFF;
p_270602_.addVertex(
p_270666_.last(),
(float)((double)node.x - p_270524_ + 0.5),
(float)((double)node.y - p_270163_ + 0.5),
(float)((double)node.z - p_270176_ + 0.5)
)
.setColor(k, l, i1, 255);
}
}
}
private static float distanceToCamera(BlockPos p_113635_, double p_113636_, double p_113637_, double p_113638_) {
return (float)(
Math.abs((double)p_113635_.getX() - p_113636_)
+ Math.abs((double)p_113635_.getY() - p_113637_)
+ Math.abs((double)p_113635_.getZ() - p_113638_)
);
}
}