42 lines
1.5 KiB
Java
42 lines
1.5 KiB
Java
package eu.crushedpixel.replaymod.video.entity;
|
|
|
|
import eu.crushedpixel.replaymod.video.frame.TilingFrameRenderer;
|
|
|
|
import static net.minecraft.client.renderer.GlStateManager.scale;
|
|
import static net.minecraft.client.renderer.GlStateManager.translate;
|
|
import static org.lwjgl.opengl.GL11.glFrustum;
|
|
|
|
public class TilingEntityRenderer extends CustomEntityRenderer {
|
|
private final TilingFrameRenderer renderer;
|
|
private int tileX, tileY;
|
|
|
|
public TilingEntityRenderer(TilingFrameRenderer renderer) {
|
|
this.renderer = renderer;
|
|
}
|
|
|
|
public void setTile(int tileX, int tileY) {
|
|
this.tileX = tileX;
|
|
this.tileY = tileY;
|
|
}
|
|
|
|
@Override
|
|
public void gluPerspective(float fovY, float aspect, float zNear, float zFar) {
|
|
double height = Math.tan(fovY / 360 * Math.PI) * zNear;
|
|
double width = height * aspect;
|
|
|
|
int videoWidth = renderer.getVideoWidth();
|
|
int videoHeight = renderer.getVideoHeight();
|
|
int tileWidth = renderer.getTileWidth();
|
|
int tileHeight = renderer.getTileHeight();
|
|
double tilesX = (double) videoWidth / tileWidth;
|
|
double tilesY = (double) videoHeight / tileHeight;
|
|
double tilesMin = Math.min(tilesX, tilesY);
|
|
scale(tilesMin, tilesMin, 1);
|
|
double xOffset = (2 * tileX - tilesX + 1) / tilesMin;
|
|
double yOffset = (2 * tileY - tilesY + 1) / tilesMin;
|
|
translate(-xOffset, yOffset, 0);
|
|
|
|
glFrustum(-width, width, -height, height, zNear, zFar);
|
|
}
|
|
}
|