Skip to content

Commit

Permalink
Ping Overlay is now fully working
Browse files Browse the repository at this point in the history
  • Loading branch information
GirafiStudios committed Jan 28, 2020
1 parent 2641957 commit 2baf7d9
Show file tree
Hide file tree
Showing 4 changed files with 72 additions and 98 deletions.
64 changes: 30 additions & 34 deletions src/main/java/dmillerw/ping/client/PingHandler.java
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,6 @@
public class PingHandler {
public static final PingHandler INSTANCE = new PingHandler();
public static final ResourceLocation TEXTURE = new ResourceLocation(Ping.MOD_ID, "textures/ping.png");
private static final RenderType PING_RENDER = RenderType.entityCutout(TEXTURE);
private static List<PingWrapper> active_pings = new ArrayList<>();

public void onPingPacket(ServerBroadcastPing packet) {
Expand Down Expand Up @@ -87,17 +86,17 @@ public static void onRenderWorld(RenderWorldLastEvent event) {
double py = ping.pos.getY() + 0.5D - interpY + 1 - renderEntity.getEyeHeight();
double pz = ping.pos.getZ() + 0.5D - interpZ;

if (clippingHelper.isBoundingBoxInFrustum(ping.getAABB())) {
//if (clippingHelper.isBoundingBoxInFrustum(ping.getAABB())) {
ping.isOffscreen = false;
if (Config.VISUAL.blockOverlay.get()) {
Vec3d staticPos = TileEntityRendererDispatcher.instance.renderInfo.getProjectedView();
renderPingOverlay(ping.pos.getX() - staticPos.getX(), ping.pos.getY() - staticPos.getY(), ping.pos.getZ() - staticPos.getZ(), event.getMatrixStack(), ping);
}
//renderPing(px, py, pz, event.getMatrixStack(), renderEntity, ping);
} else {
renderPing(px, py, pz, event.getMatrixStack(), renderEntity, ping);
/*} else {
ping.isOffscreen = true;
translatePingCoordinates(px, py, pz, ping);
}
}*/
}
}

Expand Down Expand Up @@ -154,10 +153,9 @@ public static void renderPingOffscreen(RenderGameOverlayEvent.Post event) {
MatrixStack.Entry matrixEntry = matrixStack.getLast();
Matrix4f matrix4f = matrixEntry.getPositionMatrix();
Matrix3f matrix3f = matrixEntry.getNormalMatrix();
Tessellator tessellator = Tessellator.getInstance();
BufferBuilder bufferBuilder = tessellator.getBuffer();
IRenderTypeBuffer renderTypeBuffer = IRenderTypeBuffer.getImpl(bufferBuilder);
IVertexBuilder vertexBuilder = renderTypeBuffer.getBuffer(PING_RENDER);
RenderType pingOffset = null; //TODO
IRenderTypeBuffer.Impl buffer = Minecraft.getInstance().getRenderTypeBuffers().getBufferSource();
IVertexBuilder vertexBuilder = buffer.getBuffer(pingOffset);
Minecraft.getInstance().textureManager.bindTexture(TEXTURE);

matrixStack.translate(pingX / 2, pingY / 2, 0);
Expand All @@ -169,19 +167,18 @@ public static void renderPingOffscreen(RenderGameOverlayEvent.Post event) {
int r = ping.color >> 16 & 255;
int g = ping.color >> 8 & 255;
int b = ping.color & 255;
VertexHelper.renderPosTexColor(vertexBuilder, matrix4f, matrix3f, min, max, PingType.BACKGROUND.minU, PingType.BACKGROUND.maxV, r, g, b, 255);
VertexHelper.renderPosTexColor(vertexBuilder, matrix4f, matrix3f, max, max, PingType.BACKGROUND.maxU, PingType.BACKGROUND.maxV, r, g, b, 255);
VertexHelper.renderPosTexColor(vertexBuilder, matrix4f, matrix3f, max, min, PingType.BACKGROUND.maxU, PingType.BACKGROUND.minV, r, g, b, 255);
VertexHelper.renderPosTexColor(vertexBuilder, matrix4f, matrix3f, min, min, PingType.BACKGROUND.minU, PingType.BACKGROUND.minV, r, g, b, 255);
VertexHelper.renderPosTexColorNoZ(vertexBuilder, matrix4f, min, max, PingType.BACKGROUND.minU, PingType.BACKGROUND.maxV, r, g, b, 255);
VertexHelper.renderPosTexColorNoZ(vertexBuilder, matrix4f, max, max, PingType.BACKGROUND.maxU, PingType.BACKGROUND.maxV, r, g, b, 255);
VertexHelper.renderPosTexColorNoZ(vertexBuilder, matrix4f, max, min, PingType.BACKGROUND.maxU, PingType.BACKGROUND.minV, r, g, b, 255);
VertexHelper.renderPosTexColorNoZ(vertexBuilder, matrix4f, min, min, PingType.BACKGROUND.minU, PingType.BACKGROUND.minV, r, g, b, 255);

// Ping Notice Icon
float alpha = ping.type == PingType.ALERT ? mc.world != null ? (float) (1.3F + Math.sin(mc.world.getDayTime())) : 1.0F : 1.0F;
VertexHelper.renderPosTexColor(vertexBuilder, matrix4f, matrix3f, min, max, ping.type.minU, ping.type.maxV, 1.0F, 1.0F, 1.0F, alpha);
VertexHelper.renderPosTexColor(vertexBuilder, matrix4f, matrix3f, max, max, ping.type.maxU, ping.type.maxV, 1.0F, 1.0F, 1.0F, alpha);
VertexHelper.renderPosTexColor(vertexBuilder, matrix4f, matrix3f, max, min, ping.type.maxU, ping.type.minV, 1.0F, 1.0F, 1.0F, alpha);
VertexHelper.renderPosTexColor(vertexBuilder, matrix4f, matrix3f, min, min, ping.type.minU, ping.type.minV, 1.0F, 1.0F, 1.0F, alpha);
bufferBuilder.finishDrawing();
WorldVertexBufferUploader.draw(bufferBuilder);
int alpha = ping.type == PingType.ALERT ? (int) (mc.world != null ? (1.3F + Math.sin(mc.world.getDayTime())) : 173) : 173;
VertexHelper.renderPosTexColorNoZ(vertexBuilder, matrix4f, min, max, ping.type.minU, ping.type.maxV, 255, 255, 255, alpha);
VertexHelper.renderPosTexColorNoZ(vertexBuilder, matrix4f, max, max, ping.type.maxU, ping.type.maxV, 255, 255, 255, alpha);
VertexHelper.renderPosTexColorNoZ(vertexBuilder, matrix4f, max, min, ping.type.maxU, ping.type.minV, 255, 255, 255, alpha);
VertexHelper.renderPosTexColorNoZ(vertexBuilder, matrix4f, min, min, ping.type.minU, ping.type.minV, 255, 255, 255, alpha);
buffer.finish(pingOffset);

matrixStack.translate(0, 0, 0);

Expand Down Expand Up @@ -211,17 +208,16 @@ private static void renderPing(double px, double py, double pz, MatrixStack matr
Minecraft mc = Minecraft.getInstance();
matrixStack.push(); //push
matrixStack.translate(px, py, pz); //translate
//System.out.println("X:" + px + " Y:" + py + " Z:" + pz);
matrixStack.rotate(Vector3f.YP.rotationDegrees(-renderEntity.rotationYaw)); //rotate
matrixStack.rotate(Vector3f.XP.rotationDegrees(renderEntity.rotationPitch)); //rotate
matrixStack.rotate(Vector3f.ZP.rotationDegrees(180.0F)); //rotate

MatrixStack.Entry matrixEntry = matrixStack.getLast();
Matrix4f matrix4f = matrixEntry.getPositionMatrix();
Matrix3f matrix3f = matrixEntry.getNormalMatrix();
Tessellator tessellator = Tessellator.getInstance();
IRenderTypeBuffer renderTypeBuffer = IRenderTypeBuffer.getImpl(tessellator.getBuffer());
IVertexBuilder vertexBuilder = renderTypeBuffer.getBuffer(PING_RENDER);
RenderType pingIcon = PingRenderType.getPingIcon();
IRenderTypeBuffer.Impl buffer = Minecraft.getInstance().getRenderTypeBuffers().getBufferSource();
IVertexBuilder vertexBuilder = buffer.getBuffer(pingIcon);

float min = -0.25F - (0.25F * (float) ping.animationTimer / 20F);
float max = 0.25F + (0.25F * (float) ping.animationTimer / 20F);
Expand All @@ -230,18 +226,18 @@ private static void renderPing(double px, double py, double pz, MatrixStack matr
int r = ping.color >> 16 & 255;
int g = ping.color >> 8 & 255;
int b = ping.color & 255;
VertexHelper.renderPosTexColor(vertexBuilder, matrix4f, matrix3f, min, max, PingType.BACKGROUND.minU, PingType.BACKGROUND.maxV, r, g, b, 255);
VertexHelper.renderPosTexColor(vertexBuilder, matrix4f, matrix3f, max, max, PingType.BACKGROUND.minU, PingType.BACKGROUND.maxV, r, g, b, 255);
VertexHelper.renderPosTexColor(vertexBuilder, matrix4f, matrix3f, max, min, PingType.BACKGROUND.minU, PingType.BACKGROUND.maxV, r, g, b, 255);
VertexHelper.renderPosTexColor(vertexBuilder, matrix4f, matrix3f, min, min, PingType.BACKGROUND.minU, PingType.BACKGROUND.maxV, r, g, b, 255);
VertexHelper.renderPosTexColorNoZ(vertexBuilder, matrix4f, min, max, PingType.BACKGROUND.minU, PingType.BACKGROUND.maxV, r, g, b, 255);
VertexHelper.renderPosTexColorNoZ(vertexBuilder, matrix4f, max, max, PingType.BACKGROUND.minU, PingType.BACKGROUND.maxV, r, g, b, 255);
VertexHelper.renderPosTexColorNoZ(vertexBuilder, matrix4f, max, min, PingType.BACKGROUND.minU, PingType.BACKGROUND.maxV, r, g, b, 255);
VertexHelper.renderPosTexColorNoZ(vertexBuilder, matrix4f, min, min, PingType.BACKGROUND.minU, PingType.BACKGROUND.maxV, r, g, b, 255);

// Block Overlay Icon
float alpha = ping.type == PingType.ALERT ? mc.world != null ? (float) (1.3F + Math.sin(mc.world.getDayTime())) : 0.68F : 0.68F;
VertexHelper.renderPosTexColor(vertexBuilder, matrix4f, matrix3f, min, max, ping.type.minU, ping.type.maxV, 1.0F, 1.0F, 1.0F, alpha);
VertexHelper.renderPosTexColor(vertexBuilder, matrix4f, matrix3f, max, max, ping.type.minU, ping.type.maxV, 1.0F, 1.0F, 1.0F, alpha);
VertexHelper.renderPosTexColor(vertexBuilder, matrix4f, matrix3f, max, min, ping.type.minU, ping.type.maxV, 1.0F, 1.0F, 1.0F, alpha);
VertexHelper.renderPosTexColor(vertexBuilder, matrix4f, matrix3f, min, min, ping.type.minU, ping.type.maxV, 1.0F, 1.0F, 1.0F, alpha);
tessellator.draw();
int alpha = ping.type == PingType.ALERT ? (int) (mc.world != null ? (1.3F + Math.sin(mc.world.getDayTime())) : 173) : 173;
VertexHelper.renderPosTexColorNoZ(vertexBuilder, matrix4f, min, max, ping.type.minU, ping.type.maxV, 255, 255, 255, alpha);
VertexHelper.renderPosTexColorNoZ(vertexBuilder, matrix4f, max, max, ping.type.minU, ping.type.maxV, 255, 255, 255, alpha);
VertexHelper.renderPosTexColorNoZ(vertexBuilder, matrix4f, max, min, ping.type.minU, ping.type.maxV, 255, 255, 255, alpha);
VertexHelper.renderPosTexColorNoZ(vertexBuilder, matrix4f, min, min, ping.type.minU, ping.type.maxV, 255, 255, 255, alpha);
buffer.finish(pingIcon);

matrixStack.pop(); //pop
}
Expand Down
23 changes: 9 additions & 14 deletions src/main/java/dmillerw/ping/client/PingRenderType.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,30 +5,25 @@
import net.minecraft.client.renderer.RenderState;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
import net.minecraft.util.ResourceLocation;

public class PingRenderType extends RenderState {
protected static final RenderState.TransparencyState OVERLAY_TRANSPARENCY = new RenderState.TransparencyState("overlay_transparency", () -> {
RenderSystem.enableBlend();
RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO);
RenderSystem.disableDepthTest();
}, () -> {
RenderSystem.enableDepthTest();
RenderSystem.disableBlend();
RenderSystem.defaultBlendFunc();
});
}, RenderSystem::disableBlend);
protected static final RenderState.LayerState DEPTH = new RenderState.LayerState("depth", GlStateManager::disableDepthTest, GlStateManager::enableDepthTest);

public PingRenderType(String string, Runnable r, Runnable r1) {
super(string, r, r1);
}

public static RenderType getPingOverlay() {
RenderType.State renderTypeState = RenderType.State.builder().transparency(OVERLAY_TRANSPARENCY)
//.func_228716_a_(field_228533_y_)
//.func_228713_a_(field_228517_i_)
//.func_228719_a_(field_228529_u_)
//.func_228722_a_(field_228530_v_)
.build(true);
return RenderType.get("ping_overlay_transparent", DefaultVertexFormats.BLOCK, 7, 256, true, true, renderTypeState);
RenderType.State renderTypeState = RenderType.State.builder().transparency(OVERLAY_TRANSPARENCY).texture(BLOCK_SHEET).layer(DEPTH).build(true);
return RenderType.get("ping_overlay", DefaultVertexFormats.POSITION_TEX_COLOR, 7, 262144, true, true, renderTypeState);
}

public static RenderType getPingIcon() {
RenderType.State renderTypeState = RenderType.State.builder().texture(BLOCK_SHEET).layer(DEPTH).build(true);
return RenderType.get("ping_icon", DefaultVertexFormats.POSITION_TEX_COLOR, 7, 262144, true, true, renderTypeState);
}
}

0 comments on commit 2baf7d9

Please sign in to comment.