mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
287 lines
9.8 KiB
Java
287 lines
9.8 KiB
Java
package com.hbm.render.entity;
|
|
|
|
import java.util.Random;
|
|
|
|
import org.lwjgl.opengl.GL11;
|
|
|
|
import com.hbm.entity.effect.EntityFalloutRain;
|
|
import com.hbm.lib.RefStrings;
|
|
|
|
import net.minecraft.client.Minecraft;
|
|
import net.minecraft.client.multiplayer.WorldClient;
|
|
import net.minecraft.client.renderer.OpenGlHelper;
|
|
import net.minecraft.client.renderer.Tessellator;
|
|
import net.minecraft.client.renderer.entity.Render;
|
|
import net.minecraft.entity.Entity;
|
|
import net.minecraft.entity.EntityLivingBase;
|
|
import net.minecraft.util.MathHelper;
|
|
import net.minecraft.util.ResourceLocation;
|
|
import net.minecraft.util.Vec3;
|
|
import net.minecraft.world.biome.BiomeGenBase;
|
|
import net.minecraftforge.client.IRenderHandler;
|
|
|
|
public class RenderFallout extends Render {
|
|
|
|
private Minecraft mc;
|
|
private Random random = new Random();
|
|
float[] rainXCoords;
|
|
float[] rainYCoords;
|
|
private int rendererUpdateCount;
|
|
long lastTime = System.nanoTime();
|
|
private static final ResourceLocation falloutTexture = new ResourceLocation(RefStrings.MODID,
|
|
"textures/entity/fallout.png");
|
|
|
|
@Override
|
|
public void doRender(Entity p_76986_1_, double p_76986_2_, double p_76986_4_, double p_76986_6_, float p_76986_8_,
|
|
float p_76986_9_) {
|
|
|
|
if (p_76986_1_ instanceof EntityFalloutRain)
|
|
this.render((EntityFalloutRain) p_76986_1_, p_76986_2_, p_76986_4_, p_76986_6_, p_76986_8_, p_76986_9_);
|
|
|
|
}
|
|
|
|
public void render(EntityFalloutRain p_76986_1_, double p_76986_2_, double p_76986_4_, double p_76986_6_,
|
|
float p_76986_8_, float p_76986_9_) {
|
|
|
|
this.mc = Minecraft.getMinecraft();
|
|
|
|
EntityLivingBase entitylivingbase = this.mc.renderViewEntity;
|
|
Vec3 vector = Vec3.createVectorHelper(entitylivingbase.posX - p_76986_1_.posX,
|
|
entitylivingbase.posY - p_76986_1_.posY, entitylivingbase.posZ - p_76986_1_.posZ);
|
|
|
|
double d = vector.lengthVector();
|
|
|
|
if (d <= p_76986_1_.getScale()) {
|
|
rendererUpdateCount++;
|
|
long time = System.nanoTime();
|
|
float t = (time - lastTime) / 50000000;
|
|
if (t <= 1.0F)
|
|
renderRainSnow(t);
|
|
else
|
|
renderRainSnow(1.0F);
|
|
|
|
lastTime = time;
|
|
}
|
|
}
|
|
|
|
@Override
|
|
protected ResourceLocation getEntityTexture(Entity p_110775_1_) {
|
|
return null;
|
|
}
|
|
|
|
protected void renderRainSnow(float p_78474_1_) {
|
|
|
|
IRenderHandler renderer = null;
|
|
if ((renderer = this.mc.theWorld.provider.getWeatherRenderer()) != null) {
|
|
renderer.render(p_78474_1_, this.mc.theWorld, mc);
|
|
return;
|
|
}
|
|
|
|
// float f1 = this.mc.theWorld.getRainStrength(p_78474_1_);
|
|
|
|
float f1 = 1;
|
|
|
|
if (f1 > 0.0F) {
|
|
// this.enableLightmap((double)p_78474_1_);
|
|
|
|
if (this.rainXCoords == null) {
|
|
this.rainXCoords = new float[1024];
|
|
this.rainYCoords = new float[1024];
|
|
|
|
for (int i = 0; i < 32; ++i) {
|
|
for (int j = 0; j < 32; ++j) {
|
|
float f2 = j - 16;
|
|
float f3 = i - 16;
|
|
float f4 = MathHelper.sqrt_float(f2 * f2 + f3 * f3);
|
|
this.rainXCoords[i << 5 | j] = -f3 / f4;
|
|
this.rainYCoords[i << 5 | j] = f2 / f4;
|
|
}
|
|
}
|
|
}
|
|
|
|
EntityLivingBase entitylivingbase = this.mc.renderViewEntity;
|
|
WorldClient worldclient = this.mc.theWorld;
|
|
int k2 = MathHelper.floor_double(entitylivingbase.posX);
|
|
int l2 = MathHelper.floor_double(entitylivingbase.posY);
|
|
int i3 = MathHelper.floor_double(entitylivingbase.posZ);
|
|
Tessellator tessellator = Tessellator.instance;
|
|
GL11.glDisable(GL11.GL_CULL_FACE);
|
|
GL11.glNormal3f(0.0F, 1.0F, 0.0F);
|
|
GL11.glEnable(GL11.GL_BLEND);
|
|
OpenGlHelper.glBlendFunc(770, 771, 1, 0);
|
|
GL11.glAlphaFunc(GL11.GL_GREATER, 0.1F);
|
|
double d0 = entitylivingbase.lastTickPosX
|
|
+ (entitylivingbase.posX - entitylivingbase.lastTickPosX) * p_78474_1_;
|
|
double d1 = entitylivingbase.lastTickPosY
|
|
+ (entitylivingbase.posY - entitylivingbase.lastTickPosY) * p_78474_1_;
|
|
double d2 = entitylivingbase.lastTickPosZ
|
|
+ (entitylivingbase.posZ - entitylivingbase.lastTickPosZ) * p_78474_1_;
|
|
int k = MathHelper.floor_double(d1);
|
|
byte b0 = 5;
|
|
|
|
if (this.mc.gameSettings.fancyGraphics) {
|
|
b0 = 10;
|
|
}
|
|
|
|
boolean flag = false;
|
|
byte b1 = -1;
|
|
float f5 = this.rendererUpdateCount + p_78474_1_;
|
|
|
|
if (this.mc.gameSettings.fancyGraphics) {
|
|
b0 = 10;
|
|
}
|
|
|
|
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
|
|
flag = false;
|
|
|
|
for (int l = i3 - b0; l <= i3 + b0; ++l) {
|
|
for (int i1 = k2 - b0; i1 <= k2 + b0; ++i1) {
|
|
int j1 = (l - i3 + 16) * 32 + i1 - k2 + 16;
|
|
float f6 = this.rainXCoords[j1] * 0.5F;
|
|
float f7 = this.rainYCoords[j1] * 0.5F;
|
|
BiomeGenBase biomegenbase = worldclient.getBiomeGenForCoords(i1, l);
|
|
|
|
if (true) {
|
|
int k1 = worldclient.getPrecipitationHeight(i1, l);
|
|
int l1 = l2 - b0;
|
|
int i2 = l2 + b0;
|
|
|
|
if (l1 < k1) {
|
|
l1 = k1;
|
|
}
|
|
|
|
if (i2 < k1) {
|
|
i2 = k1;
|
|
}
|
|
|
|
float f8 = 1.0F;
|
|
int j2 = k1;
|
|
|
|
if (k1 < k) {
|
|
j2 = k;
|
|
}
|
|
|
|
if (l1 != i2) {
|
|
this.random.setSeed(i1 * i1 * 3121 + i1 * 45238971 ^ l * l * 418711 + l * 13761);
|
|
float f9 = biomegenbase.getFloatTemperature(i1, l1, l);
|
|
float f10;
|
|
double d4;
|
|
|
|
/*
|
|
* if (false) { if (b1 != 0) { if (b1 >= 0) {
|
|
* tessellator.draw(); }
|
|
*
|
|
* b1 = 0;
|
|
* this.mc.getTextureManager().bindTexture(this.
|
|
* falloutTexture); tessellator.startDrawingQuads();
|
|
* //System.out.println("Called!"); }
|
|
*
|
|
* f10 = ((float)(this.rendererUpdateCount + i1 * i1
|
|
* * 3121 + i1 * 45238971 + l * l * 418711 + l *
|
|
* 13761 & 31) + p_78474_1_) / 32.0F * (3.0F +
|
|
* this.random.nextFloat()); double d3 =
|
|
* (double)((float)i1 + 0.5F) -
|
|
* entitylivingbase.posX; d4 = (double)((float)l +
|
|
* 0.5F) - entitylivingbase.posZ; float f12 =
|
|
* MathHelper.sqrt_double(d3 * d3 + d4 * d4) /
|
|
* (float)b0; float f13 = 1.0F;
|
|
* tessellator.setBrightness(worldclient.
|
|
* getLightBrightnessForSkyBlocks(i1, j2, l, 0));
|
|
* tessellator.setColorRGBA_F(f13, f13, f13, ((1.0F
|
|
* - f12 * f12) * 0.5F + 0.5F) * f1);
|
|
* tessellator.setTranslation(-d0 * 1.0D, -d1 *
|
|
* 1.0D, -d2 * 1.0D);
|
|
* tessellator.addVertexWithUV((double)((float)i1 -
|
|
* f6) + 0.5D, (double)l1, (double)((float)l - f7) +
|
|
* 0.5D, (double)(0.0F * f8), (double)((float)l1 *
|
|
* f8 / 4.0F + f10 * f8));
|
|
* tessellator.addVertexWithUV((double)((float)i1 +
|
|
* f6) + 0.5D, (double)l1, (double)((float)l + f7) +
|
|
* 0.5D, (double)(1.0F * f8), (double)((float)l1 *
|
|
* f8 / 4.0F + f10 * f8));
|
|
* tessellator.addVertexWithUV((double)((float)i1 +
|
|
* f6) + 0.5D, (double)i2, (double)((float)l + f7) +
|
|
* 0.5D, (double)(1.0F * f8), (double)((float)i2 *
|
|
* f8 / 4.0F + f10 * f8));
|
|
* tessellator.addVertexWithUV((double)((float)i1 -
|
|
* f6) + 0.5D, (double)i2, (double)((float)l - f7) +
|
|
* 0.5D, (double)(0.0F * f8), (double)((float)i2 *
|
|
* f8 / 4.0F + f10 * f8));
|
|
* tessellator.setTranslation(0.0D, 0.0D, 0.0D); }
|
|
* else
|
|
*/
|
|
{
|
|
if (b1 != 1) {
|
|
if (b1 >= 0) {
|
|
tessellator.draw();
|
|
}
|
|
|
|
b1 = 1;
|
|
this.mc.getTextureManager().bindTexture(RenderFallout.falloutTexture);
|
|
tessellator.startDrawingQuads();
|
|
}
|
|
|
|
f10 = ((this.rendererUpdateCount & 511) + p_78474_1_) / 512.0F;
|
|
float f16 = this.random.nextFloat() + f5 * 0.01F * (float) this.random.nextGaussian();
|
|
float f11 = this.random.nextFloat() + f5 * (float) this.random.nextGaussian() * 0.001F;
|
|
d4 = i1 + 0.5F - entitylivingbase.posX;
|
|
double d5 = l + 0.5F - entitylivingbase.posZ;
|
|
float f14 = MathHelper.sqrt_double(d4 * d4 + d5 * d5) / b0;
|
|
float f15 = 1.0F;
|
|
tessellator.setBrightness(
|
|
(worldclient.getLightBrightnessForSkyBlocks(i1, j2, l, 0) * 3 + 15728880) / 4);
|
|
tessellator.setColorRGBA_F(f15, f15, f15, ((1.0F - f14 * f14) * 0.3F + 0.5F) * f1);
|
|
tessellator.setTranslation(-d0 * 1.0D, -d1 * 1.0D, -d2 * 1.0D);
|
|
tessellator.addVertexWithUV(i1 - f6 + 0.5D, l1,
|
|
l - f7 + 0.5D, 0.0F * f8 + f16,
|
|
l1 * f8 / 4.0F + f10 * f8 + f11);
|
|
tessellator.addVertexWithUV(i1 + f6 + 0.5D, l1,
|
|
l + f7 + 0.5D, 1.0F * f8 + f16,
|
|
l1 * f8 / 4.0F + f10 * f8 + f11);
|
|
tessellator.addVertexWithUV(i1 + f6 + 0.5D, i2,
|
|
l + f7 + 0.5D, 1.0F * f8 + f16,
|
|
i2 * f8 / 4.0F + f10 * f8 + f11);
|
|
tessellator.addVertexWithUV(i1 - f6 + 0.5D, i2,
|
|
l - f7 + 0.5D, 0.0F * f8 + f16,
|
|
i2 * f8 / 4.0F + f10 * f8 + f11);
|
|
tessellator.setTranslation(0.0D, 0.0D, 0.0D);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (b1 >= 0) {
|
|
tessellator.draw();
|
|
// System.out.println("Fired!");
|
|
}
|
|
|
|
GL11.glEnable(GL11.GL_CULL_FACE);
|
|
GL11.glDisable(GL11.GL_BLEND);
|
|
GL11.glAlphaFunc(GL11.GL_GREATER, 0.1F);
|
|
// this.disableLightmap((double)p_78474_1_);
|
|
}
|
|
}
|
|
|
|
/*
|
|
* public void enableLightmap(double p_78463_1_) {
|
|
* OpenGlHelper.setActiveTexture(OpenGlHelper.lightmapTexUnit);
|
|
* GL11.glMatrixMode(GL11.GL_TEXTURE); GL11.glLoadIdentity(); float f =
|
|
* 0.00390625F; GL11.glScalef(f, f, f); GL11.glTranslatef(8.0F, 8.0F, 8.0F);
|
|
* GL11.glMatrixMode(GL11.GL_MODELVIEW);
|
|
* this.mc.getTextureManager().bindTexture(this.locationLightMap);
|
|
* GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER,
|
|
* GL11.GL_LINEAR); GL11.glTexParameteri(GL11.GL_TEXTURE_2D,
|
|
* GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_LINEAR);
|
|
* GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER,
|
|
* GL11.GL_LINEAR); GL11.glTexParameteri(GL11.GL_TEXTURE_2D,
|
|
* GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_LINEAR);
|
|
* GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S,
|
|
* GL11.GL_CLAMP); GL11.glTexParameteri(GL11.GL_TEXTURE_2D,
|
|
* GL11.GL_TEXTURE_WRAP_T, GL11.GL_CLAMP); GL11.glColor4f(1.0F, 1.0F, 1.0F,
|
|
* 1.0F); GL11.glEnable(GL11.GL_TEXTURE_2D);
|
|
* OpenGlHelper.setActiveTexture(OpenGlHelper.defaultTexUnit); }
|
|
*/
|
|
|
|
}
|