Skip to content

Commit

Permalink
Initial work on moving ping to MatrixStack
Browse files Browse the repository at this point in the history
  • Loading branch information
GirafiStudios committed Dec 29, 2019
1 parent 55a6a53 commit 7035301
Showing 1 changed file with 33 additions and 31 deletions.
64 changes: 33 additions & 31 deletions src/main/java/dmillerw/ping/client/PingHandler.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package dmillerw.ping.client;

import com.mojang.blaze3d.matrix.MatrixStack;
import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.IVertexBuilder;
import dmillerw.ping.Ping;
import dmillerw.ping.data.PingType;
import dmillerw.ping.data.PingWrapper;
Expand All @@ -11,8 +13,8 @@
import net.minecraft.block.Blocks;
import net.minecraft.client.Minecraft;
import net.minecraft.client.audio.SimpleSound;
import net.minecraft.client.renderer.BufferBuilder;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.*;
import net.minecraft.client.renderer.texture.OverlayTexture;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher;
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
Expand All @@ -25,7 +27,6 @@
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.client.event.RenderGameOverlayEvent;
import net.minecraftforge.client.event.RenderWorldLastEvent;
import net.minecraftforge.client.model.pipeline.TRSRTransformer;
import net.minecraftforge.event.TickEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
Expand All @@ -42,6 +43,7 @@
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.func_228638_b_(TEXTURE);
private static List<PingWrapper> active_pings = new ArrayList<>();

public void onPingPacket(ServerBroadcastPing packet) {
Expand All @@ -67,6 +69,7 @@ public static void onRenderWorld(RenderWorldLastEvent event) {
//Frustum camera = new Frustum();
//camera.setPosition(interpX, interpY, interpZ);


for (PingWrapper ping : active_pings) {
double px = ping.pos.getX() + 0.5D - interpX;
double py = ping.pos.getY() + 0.5D - interpY + 1 - renderEntity.getEyeHeight();
Expand All @@ -76,9 +79,9 @@ public static void onRenderWorld(RenderWorldLastEvent event) {
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(), ping);
//renderPingOverlay(ping.pos.getX() - staticPos.getX(), ping.pos.getY() - staticPos.getY(), ping.pos.getZ() - staticPos.getZ(), ping);
}
renderPing(px, py, pz, renderEntity, ping);
renderPing(px, py, pz, event.getMatrixStack(), renderEntity, ping);
/*} else {
ping.isOffscreen = true;
translatePingCoordinates(px, py, pz, ping);
Expand Down Expand Up @@ -193,48 +196,43 @@ public static void onClientTick(TickEvent.ClientTickEvent event) {
}
}

private static void renderPing(double px, double py, double pz, Entity renderEntity, PingWrapper ping) {
private static void renderPing(double px, double py, double pz, MatrixStack matrixStack, Entity renderEntity, PingWrapper ping) {
Minecraft mc = Minecraft.getInstance();
RenderSystem.pushMatrix();
RenderSystem.disableDepthTest();
RenderSystem.translated(px, py, pz);
matrixStack.func_227860_a_(); //push
matrixStack.func_227861_a_(px, py, pz); //translate
//System.out.println("X:" + px + " Y:" + py + " Z:" + pz);
matrixStack.func_227863_a_(Vector3f.field_229181_d_.func_229187_a_(-renderEntity.rotationYaw)); //rotate
matrixStack.func_227863_a_(Vector3f.field_229179_b_.func_229187_a_(renderEntity.rotationPitch)); //rotate
matrixStack.func_227863_a_(Vector3f.field_229183_f_.func_229187_a_(180.0F)); //rotate

RenderSystem.rotatef(-renderEntity.rotationYaw, 0.0F, 1.0F, 0.0F);
RenderSystem.rotatef(renderEntity.rotationPitch, 1.0F, 0.0F, 0.0F);
RenderSystem.rotatef(180.0F, 0.0F, 0.0F, 1.0F);

mc.textureManager.bindTexture(TEXTURE);

MatrixStack.Entry matrixEntry = matrixStack.func_227866_c_();
Matrix4f matrix4f = matrixEntry.func_227870_a_();
Matrix3f matrix3f = matrixEntry.func_227872_b_();
Tessellator tessellator = Tessellator.getInstance();
BufferBuilder bufferBuilder = tessellator.getBuffer();
IRenderTypeBuffer renderTypeBuffer = IRenderTypeBuffer.func_228455_a_(tessellator.getBuffer());
IVertexBuilder vertexBuilder = renderTypeBuffer.getBuffer(PING_RENDER);

float min = -0.25F - (0.25F * (float) ping.animationTimer / 20F);
float max = 0.25F + (0.25F * (float) ping.animationTimer / 20F);

// Block Overlay Background
bufferBuilder.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR);
int r = ping.color >> 16 & 255;
int g = ping.color >> 8 & 255;
int b = ping.color & 255;
bufferBuilder.func_225582_a_(min, max, 0).func_225583_a_(PingType.BACKGROUND.minU, PingType.BACKGROUND.maxV).func_225586_a_(r, g, b, 255).endVertex();
bufferBuilder.func_225582_a_(max, max, 0).func_225583_a_(PingType.BACKGROUND.maxU, PingType.BACKGROUND.maxV).func_225586_a_(r, g, b, 255).endVertex();
bufferBuilder.func_225582_a_(max, min, 0).func_225583_a_(PingType.BACKGROUND.maxU, PingType.BACKGROUND.minV).func_225586_a_(r, g, b, 255).endVertex();
bufferBuilder.func_225582_a_(min, min, 0).func_225583_a_(PingType.BACKGROUND.minU, PingType.BACKGROUND.minV).func_225586_a_(r, g, b, 255).endVertex();
tessellator.draw();

int alpha = ping.type == PingType.ALERT ? mc.world != null ? (int) (1.3F + Math.sin(mc.world.getDayTime())) : 175 : 175;
renderPosTexColor(vertexBuilder, matrix4f, matrix3f, min, max, PingType.BACKGROUND.minU, PingType.BACKGROUND.maxV, r, g, b, 255);
renderPosTexColor(vertexBuilder, matrix4f, matrix3f, max, max, PingType.BACKGROUND.minU, PingType.BACKGROUND.maxV, r, g, b, 255);
renderPosTexColor(vertexBuilder, matrix4f, matrix3f, max, min, PingType.BACKGROUND.minU, PingType.BACKGROUND.maxV, r, g, b, 255);
renderPosTexColor(vertexBuilder, matrix4f, matrix3f, min, min, PingType.BACKGROUND.minU, PingType.BACKGROUND.maxV, r, g, b, 255);

// Block Overlay Icon
bufferBuilder.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR);
bufferBuilder.func_225582_a_(min, max, 0).func_225583_a_(ping.type.minU, ping.type.maxV).func_227885_a_(1.0F, 1.0F, 1.0F, alpha).endVertex();
bufferBuilder.func_225582_a_(max, max, 0).func_225583_a_(ping.type.maxU, ping.type.maxV).func_227885_a_(1.0F, 1.0F, 1.0F, alpha).endVertex();
bufferBuilder.func_225582_a_(max, min, 0).func_225583_a_(ping.type.maxU, ping.type.minV).func_227885_a_(1.0F, 1.0F, 1.0F, alpha).endVertex();
bufferBuilder.func_225582_a_(min, min, 0).func_225583_a_(ping.type.minU, ping.type.minV).func_227885_a_(1.0F, 1.0F, 1.0F, alpha).endVertex();
int alpha = ping.type == PingType.ALERT ? mc.world != null ? (int) (1.3F + Math.sin(mc.world.getDayTime())) : 175 : 175;
renderPosTexColor(vertexBuilder, matrix4f, matrix3f, min, max, ping.type.minU, ping.type.maxV, 1.0F, 1.0F, 1.0F, alpha);
renderPosTexColor(vertexBuilder, matrix4f, matrix3f, max, max, ping.type.minU, ping.type.maxV, 1.0F, 1.0F, 1.0F, alpha);
renderPosTexColor(vertexBuilder, matrix4f, matrix3f, max, min, ping.type.minU, ping.type.maxV, 1.0F, 1.0F, 1.0F, alpha);
renderPosTexColor(vertexBuilder, matrix4f, matrix3f, min, min, ping.type.minU, ping.type.maxV, 1.0F, 1.0F, 1.0F, alpha);
tessellator.draw();

RenderSystem.enableDepthTest();
RenderSystem.popMatrix();
matrixStack.func_227865_b_(); //pop
}

private static void renderPingOverlay(double x, double y, double z, PingWrapper ping) {
Expand Down Expand Up @@ -273,4 +271,8 @@ private static void translatePingCoordinates(double px, double py, double pz, Pi
ping.screenY = screenCoords.get(1);
}
}

private static void renderPosTexColor(IVertexBuilder builder, Matrix4f matrix4f, Matrix3f matrix3f, float x, float y, float u, float v, float r, float g, float b, float a) {
builder.func_227888_a_(matrix4f, x - 0.5F, y - 0.5F, 0.0F).func_227885_a_(r, g, b, 0).func_225583_a_(u, v).func_227891_b_(OverlayTexture.field_229196_a_).func_227886_a_(1).func_227887_a_(matrix3f, 0.0F, 1.0F, 0.0F).endVertex();
}
}

0 comments on commit 7035301

Please sign in to comment.