aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/common/render
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/gregtech/common/render')
-rw-r--r--src/main/java/gregtech/common/render/PollutionRenderer.java251
1 files changed, 0 insertions, 251 deletions
diff --git a/src/main/java/gregtech/common/render/PollutionRenderer.java b/src/main/java/gregtech/common/render/PollutionRenderer.java
deleted file mode 100644
index 3b97fc820f..0000000000
--- a/src/main/java/gregtech/common/render/PollutionRenderer.java
+++ /dev/null
@@ -1,251 +0,0 @@
-package gregtech.common.render;
-
-import net.minecraft.block.Block;
-import net.minecraft.block.material.Material;
-import net.minecraft.client.Minecraft;
-import net.minecraft.client.entity.EntityClientPlayerMP;
-import net.minecraft.client.particle.EntityFX;
-import net.minecraft.client.renderer.OpenGlHelper;
-import net.minecraft.potion.Potion;
-import net.minecraft.util.MathHelper;
-import net.minecraft.world.ChunkCoordIntPair;
-import net.minecraft.world.World;
-import net.minecraftforge.client.event.EntityViewRenderEvent;
-import net.minecraftforge.event.world.WorldEvent;
-
-import org.lwjgl.opengl.GL11;
-
-import cpw.mods.fml.common.FMLCommonHandler;
-import cpw.mods.fml.common.eventhandler.EventPriority;
-import cpw.mods.fml.common.eventhandler.SubscribeEvent;
-import cpw.mods.fml.common.gameevent.TickEvent;
-import cpw.mods.fml.relauncher.Side;
-import cpw.mods.fml.relauncher.SideOnly;
-import gregtech.GTMod;
-import gregtech.common.entities.EntityFXPollution;
-import gregtech.common.misc.GTClientPollutionMap;
-
-@SideOnly(Side.CLIENT)
-public class PollutionRenderer {
-
- private static GTClientPollutionMap pollutionMap;
- private static int playerPollution = 0;
-
- private static final boolean DEBUG = false;
-
- // PARTICLES_POLLUTION_START + PARTICLES_POLLUTION_END -> Max Particles
- private static final int PARTICLES_MAX_NUM = 100;
- private static final int PARTICLES_POLLUTION_START = 400000;
- private static final int PARTICLES_POLLUTION_END = 3500000;
-
- private static final int FOG_START_AT_POLLUTION = 400000;
- private static final int FOG_MAX_AT_POLLUTION = 7000000;
- // jump from linear to exponential fog. x*FOG_MAX_AT_POLLUTION+FOG_START_AT_POLLUTION
- private static final double FOG_START_EXP_RATIO = 0.02D;
-
- private static final float[] fogColor = { 0.3f, 0.25f, 0.1f };
- private static final short[] grassColor = { 230, 180, 40 };
- private static final short[] leavesColor = { 160, 80, 15 };
- private static final short[] liquidColor = { 160, 200, 10 };
- private static final short[] foliageColor = { 160, 80, 15 };
-
- // TODO need to soft update some blocks, grass and leaves does more often than liquid it looks like.
-
- public PollutionRenderer() {
- pollutionMap = new GTClientPollutionMap();
- }
-
- public void preLoad() {
- net.minecraftforge.common.MinecraftForge.EVENT_BUS.register(this);
- FMLCommonHandler.instance()
- .bus()
- .register(this);
- }
-
- public void processPacket(ChunkCoordIntPair chunk, int pollution) {
- pollutionMap.addChunkPollution(chunk.chunkXPos, chunk.chunkZPos, pollution);
- }
-
- @SubscribeEvent(priority = EventPriority.HIGH)
- public void enteredWorld(WorldEvent.Load event) {
- EntityClientPlayerMP p = Minecraft.getMinecraft().thePlayer;
- if (!event.world.isRemote || p == null) return;
- pollutionMap.reset();
- }
-
- private static int color(int color, int pollution, int low, float high, short[] colors) {
- if (pollution < low) return color;
-
- int r = (color >> 16) & 0xFF;
- int g = (color >> 8) & 0xFF;
- int b = color & 0xFF;
- float p = (pollution - low) / high;
- if (p > 1) p = 1;
- float pi = 1 - p;
-
- r = ((int) (r * pi + p * colors[0])) & 0xFF;
- g = ((int) (g * pi + p * colors[1])) & 0xFF;
- b = ((int) (b * pi + p * colors[2])) & 0xFF;
-
- return (r & 0xFF) << 16 | (g & 0xFF) << 8 | b & 0xFF;
- }
-
- // Methods for hodgepodge to color grass / foliage blocks etc.
- public static int colorGrass(int oColor, int x, int z) {
- return color(oColor, pollutionMap.getPollution(x, z) / 1000, 350, 600, grassColor);
- }
-
- public static int colorLeaves(int oColor, int x, int z) {
- return color(oColor, pollutionMap.getPollution(x, z) / 1000, 300, 500, leavesColor);
- }
-
- public static int colorLiquid(int oColor, int x, int z) {
- return color(oColor, pollutionMap.getPollution(x, z) / 1000, 300, 500, liquidColor);
- }
-
- public static int colorFoliage(int oColor, int x, int z) {
- return color(oColor, pollutionMap.getPollution(x, z) / 1000, 300, 500, foliageColor);
- }
-
- public static int getKnownPollution(int x, int z) {
- return pollutionMap.getPollution(x, z);
- }
-
- @SubscribeEvent(priority = EventPriority.LOW)
- public void manipulateColor(EntityViewRenderEvent.FogColors event) {
- if (!DEBUG && Minecraft.getMinecraft().thePlayer.capabilities.isCreativeMode) return;
-
- if (event.block.getMaterial() == Material.water || event.block.getMaterial() == Material.lava) return;
-
- float x = fogIntensityLastTick > 1 ? 1F : (float) fogIntensityLastTick;
- float xi = 1 - x;
-
- event.red = xi * event.red + x * fogColor[0];
- event.green = xi * event.green + x * fogColor[1];
- event.blue = xi * event.blue + x * fogColor[2];
- }
-
- private static final int END_MAX_DISTANCE = 192 - 1;
- private static double fogIntensityLastTick = 0;
-
- @SubscribeEvent(priority = EventPriority.LOWEST)
- public void renderGTPollutionFog(EntityViewRenderEvent.RenderFogEvent event) {
- if (!GTMod.gregtechproxy.mRenderPollutionFog) return;
-
- if ((!DEBUG && Minecraft.getMinecraft().thePlayer.capabilities.isCreativeMode)
- || (fogIntensityLastTick < FOG_START_EXP_RATIO)) return;
-
- if (event.fogMode == 0) {
- double v = 1 - fogIntensityLastTick / FOG_START_EXP_RATIO;
- // trying to smooth out jump from linear to exponential
- GL11.glFogi(GL11.GL_FOG_MODE, GL11.GL_LINEAR);
- GL11.glFogf(GL11.GL_FOG_START, (float) ((END_MAX_DISTANCE - 20) * 0.75F * v + 20));
- GL11.glFogf(GL11.GL_FOG_END, (float) (END_MAX_DISTANCE * (0.75F + v * 0.25F)));
- }
- // else if ( event.fogMode < 0) { }
- }
-
- @SubscribeEvent(priority = EventPriority.LOWEST)
- public void renderGTPollutionFog(EntityViewRenderEvent.FogDensity event) {
- if (!GTMod.gregtechproxy.mRenderPollutionFog) return;
-
- if (!DEBUG && Minecraft.getMinecraft().thePlayer.capabilities.isCreativeMode) return;
-
- if (event.entity.isPotionActive(Potion.blindness) || (fogIntensityLastTick < FOG_START_EXP_RATIO)
- || event.block.getMaterial() == Material.water
- || event.block.getMaterial() == Material.lava) return;
-
- GL11.glFogi(GL11.GL_FOG_MODE, GL11.GL_EXP2);
- event.density = (float) Math.pow(fogIntensityLastTick - FOG_START_EXP_RATIO, .75F) / 5 + 0.01F;
- event.setCanceled(true);
- }
-
- private double lastUpdate = 0;
-
- @SubscribeEvent(priority = EventPriority.HIGHEST)
- public void onRenderTick(TickEvent.RenderTickEvent event) {
- Minecraft mc = Minecraft.getMinecraft();
- if (mc == null) return;
- EntityClientPlayerMP player = mc.thePlayer;
- if (player == null) return;
-
- if (event.phase == TickEvent.Phase.START) {
- if (event.renderTickTime < lastUpdate) lastUpdate = lastUpdate - 1;
- float step = (float) ((event.renderTickTime - lastUpdate) / 50);
- lastUpdate = event.renderTickTime;
-
- float fogIntensity = (playerPollution - FOG_START_AT_POLLUTION) / (float) FOG_MAX_AT_POLLUTION;
- if (fogIntensity > 1) fogIntensity = 1;
- else if (fogIntensity < 0) fogIntensity = 0;
-
- double e = fogIntensity - fogIntensityLastTick;
- if (e != 0) {
- if (e > 0.2) e = 0.2D;
- else if (e < -0.5) e = -0.5D;
-
- if (e > 0.001D || e < -0.001D) fogIntensityLastTick += step * e;
- else fogIntensityLastTick = fogIntensity;
- }
- } else if (DEBUG) {
- drawPollution("Intensity: " + (fogIntensityLastTick * 10000), 0);
- drawPollution(
- "Pollution: " + pollutionMap.getPollution(
- Minecraft.getMinecraft().thePlayer.lastTickPosX,
- Minecraft.getMinecraft().thePlayer.lastTickPosZ),
- 20);
- drawPollution(
- "Density: "
- + ((float) (Math.pow(fogIntensityLastTick - FOG_START_EXP_RATIO, .75F) / 5 + 0.01F) * 10000),
- 40);
- }
- }
-
- // Adding dirt particles in the air
- @SubscribeEvent(priority = EventPriority.HIGHEST)
- public void onClientTick(TickEvent.ClientTickEvent event) {
- if (!GTMod.gregtechproxy.mRenderDirtParticles) return;
- Minecraft mc = Minecraft.getMinecraft();
- if (mc == null) return;
- EntityClientPlayerMP player = mc.thePlayer;
- if (player == null || (player.capabilities.isCreativeMode && !DEBUG)) return;
-
- World w = player.worldObj;
- playerPollution = pollutionMap.getPollution(player.lastTickPosX, player.lastTickPosZ);
-
- float intensity = ((float) playerPollution - PARTICLES_POLLUTION_START) / PARTICLES_POLLUTION_END;
- if (intensity < 0) return;
- else if (intensity > 1) intensity = 1;
- else intensity *= intensity;
-
- int x = MathHelper.floor_double(player.posX);
- int y = MathHelper.floor_double(player.posY);
- int z = MathHelper.floor_double(player.posZ);
-
- int numParticles = Math.round(intensity * PARTICLES_MAX_NUM);
-
- for (int l = 0; l < numParticles; ++l) {
- int i1 = x + w.rand.nextInt(16) - w.rand.nextInt(16);
- int j1 = y + w.rand.nextInt(16) - w.rand.nextInt(16);
- int k1 = z + w.rand.nextInt(16) - w.rand.nextInt(16);
- Block block = w.getBlock(i1, j1, k1);
-
- if (block.getMaterial() == Material.air) {
- EntityFX fx = new EntityFXPollution(
- w,
- (float) i1 + w.rand.nextFloat(),
- (float) j1 + w.rand.nextFloat(),
- (float) k1 + w.rand.nextFloat());
- mc.effectRenderer.addEffect(fx);
- }
- }
- }
-
- private void drawPollution(String text, int off) {
- GL11.glPushMatrix();
- GL11.glEnable(GL11.GL_BLEND);
- OpenGlHelper.glBlendFunc(770, 771, 1, 0);
- Minecraft.getMinecraft().fontRenderer.drawStringWithShadow(text, 0, off, 0xFFFFFFFF);
- GL11.glDisable(GL11.GL_BLEND);
- GL11.glPopMatrix();
- }
-}