Properly render spectator hand in all custom rendering modes

Fix hand clipping with nearby blocks
Immediately show hand/item if a different player is spectated
This commit is contained in:
johni0702
2015-05-31 17:24:37 +02:00
parent 39fe6dec4e
commit 779d0841d6
4 changed files with 55 additions and 4 deletions

View File

@@ -29,6 +29,7 @@ import org.lwjgl.util.glu.Project;
public class SpectatorRenderer {
private final Minecraft mc = Minecraft.getMinecraft();
private EntityPlayer currentPlayer;
private EntityPlayer getSpectatedPlayer() {
Entity current = ReplayHandler.getCurrentEntity();
@@ -36,7 +37,16 @@ public class SpectatorRenderer {
return (EntityPlayer)current;
}
protected void gluPerspective(float fovY, float aspect, float zNear, float zFar) {
Project.gluPerspective(fovY, aspect, zNear, zFar);
}
public void renderSpectatorHand(EntityPlayer entityPlayer, float partialTicks, int renderPass) {
if (entityPlayer != currentPlayer) {
updateNow(entityPlayer);
}
GlStateManager.clear(GL11.GL_DEPTH_BUFFER_BIT);
GlStateManager.matrixMode(GL11.GL_PROJECTION);
GlStateManager.loadIdentity();
@@ -47,7 +57,7 @@ public class SpectatorRenderer {
GlStateManager.translate((float)(-(renderPass * 2 - 1)) * f1, 0.0F, 0.0F);
}
Project.gluPerspective(mc.entityRenderer.getFOVModifier(partialTicks, false),
gluPerspective(mc.entityRenderer.getFOVModifier(partialTicks, false),
(float) this.mc.displayWidth / (float) this.mc.displayHeight, 0.05F, mc.entityRenderer.farPlaneDistance * 2.0F);
GlStateManager.matrixMode(GL11.GL_MODELVIEW);
@@ -441,6 +451,17 @@ public class SpectatorRenderer {
mc.entityRenderer.itemRenderer.equippedItemSlot = player.inventory.currentItem;
}
}
public void updateNow(EntityPlayer player) {
this.currentPlayer = player;
prevEquippedProgress = equippedProgress = 1;
itemToRender = player.inventory.getCurrentItem();
mc.entityRenderer.itemRenderer.equippedItemSlot = player.inventory.currentItem;
renderArmYaw = prevRenderArmYaw = player.rotationYaw;
renderArmPitch = prevRenderArmPitch = player.rotationPitch;
}
/**
* The GUI Overlays (Fire, Water)

View File

@@ -106,4 +106,9 @@ public class CubicEntityRenderer extends CustomEntityRenderer {
GlStateManager.translate(0.0F, 0.0F, 0.1F);
super.orientCamera(partialTicks);
}
@Override
protected void renderSpectatorHand(float partialTicks, int renderPass) {
// No spectator hands during 360° view
}
}

View File

@@ -1,6 +1,6 @@
package eu.crushedpixel.replaymod.video.entity;
import eu.crushedpixel.replaymod.ReplayMod;
import eu.crushedpixel.replaymod.renderer.SpectatorRenderer;
import eu.crushedpixel.replaymod.replay.ReplayHandler;
import net.minecraft.client.Minecraft;
import net.minecraft.client.particle.EffectRenderer;
@@ -21,6 +21,12 @@ import static org.lwjgl.opengl.GL11.*;
public abstract class CustomEntityRenderer {
protected final Minecraft mc = Minecraft.getMinecraft();
protected final EntityRenderer proxied = mc.entityRenderer;
protected final SpectatorRenderer spectatorRenderer = new SpectatorRenderer(){
@Override
protected void gluPerspective(float fovY, float aspect, float zNear, float zFar) {
CustomEntityRenderer.this.gluPerspective(fovY, aspect, zNear, zFar);
}
};
protected int frameCount;
protected void gluPerspective(float fovY, float aspect, float zNear, float zFar) {
@@ -176,8 +182,14 @@ public abstract class CustomEntityRenderer {
net.minecraftforge.client.ForgeHooksClient.dispatchRenderLast(renderglobal, partialTicks);
if(!ReplayHandler.isCamera() && ReplayHandler.getCurrentEntity() instanceof EntityPlayer)
ReplayMod.spectatorRenderer.renderSpectatorHand((EntityPlayer)ReplayHandler.getCurrentEntity(), partialTicks, renderPass);
renderSpectatorHand(partialTicks, renderPass);
}
protected void renderSpectatorHand(float partialTicks, int renderPass) {
Entity currentEntity = ReplayHandler.getCurrentEntity();
if(!ReplayHandler.isCamera() && currentEntity instanceof EntityPlayer) {
spectatorRenderer.renderSpectatorHand((EntityPlayer) currentEntity, partialTicks, renderPass);
}
}
protected void setupCameraTransform(float partialTicks) {

View File

@@ -16,6 +16,14 @@ public class StereoscopicEntityRenderer extends CustomEntityRenderer {
this.leftEye = leftEye;
}
@Override
public void updateCameraAndRender(float renderPartialTicks) {
boolean wasAnaglyph = mc.gameSettings.anaglyph;
mc.gameSettings.anaglyph = true;
super.updateCameraAndRender(renderPartialTicks);
mc.gameSettings.anaglyph = wasAnaglyph;
}
protected void translateStereoscopic() {
GlStateManager.translate(leftEye ? 0.07 : -0.07, 0, 0);
}
@@ -36,4 +44,9 @@ public class StereoscopicEntityRenderer extends CustomEntityRenderer {
orientCamera(partialTicks);
}
@Override
protected void renderSpectatorHand(float partialTicks, int renderPass) {
super.renderSpectatorHand(partialTicks, leftEye ? 1 : 0);
}
}