Started work on a Digital Miner visual render thing. For some reason it's culling all oceans.

This commit is contained in:
Aidan C. Brady 2014-07-21 01:10:53 -04:00
parent 7e525e10c6
commit 69a411813e
8 changed files with 134 additions and 55 deletions

View file

@ -579,16 +579,4 @@ public class ClientProxy extends CommonProxy
return Minecraft.getMinecraft().thePlayer;
}
}
@Override
public void toggleMinerRender(Coord4D coord)
{
if(MekanismClient.renderingMiners.contains(coord))
{
MekanismClient.renderingMiners.remove(coord);
}
else {
MekanismClient.renderingMiners.add(coord);
}
}
}

View file

@ -23,8 +23,6 @@ public class MekanismClient extends Mekanism
public static SoundHandler audioHandler;
public static VoiceClient voiceClient;
public static Set<Coord4D> renderingMiners = new HashSet<Coord4D>();
//General Configuration
public static boolean enableSounds = true;
@ -66,8 +64,6 @@ public class MekanismClient extends Mekanism
Mekanism.gasmaskOn.clear();
Mekanism.flamethrowerActive.clear();
Mekanism.activeVibrators.clear();
renderingMiners.clear();
Mekanism.proxy.loadConfiguration();

View file

@ -123,7 +123,7 @@ public class MekanismRenderer
public Block baseBlock = Blocks.sand;
public final void setBlockBounds(float xNeg, float yNeg, float zNeg, float xPos, float yPos, float zPos)
public final void setBlockBounds(double xNeg, double yNeg, double zNeg, double xPos, double yPos, double zPos)
{
minX = xNeg;
minY = yNeg;

View file

@ -1,32 +1,156 @@
package mekanism.client.render;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import mekanism.api.EnumColor;
import mekanism.client.render.MekanismRenderer.DisplayInteger;
import mekanism.client.render.MekanismRenderer.Model3D;
import mekanism.common.tile.TileEntityDigitalMiner;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher;
import net.minecraft.init.Blocks;
import net.minecraftforge.common.util.ForgeDirection;
import org.lwjgl.opengl.GL11;
public final class MinerVisualRenderer
{
private Map<MinerRenderData, DisplayInteger> cachedVisuals = new HashMap<MinerRenderData, DisplayInteger>();
private static Minecraft mc = Minecraft.getMinecraft();
public class MinerRenderData
private static Map<MinerRenderData, DisplayInteger> cachedVisuals = new HashMap<MinerRenderData, DisplayInteger>();
private static final double offset = 0.01;
public static void render(TileEntityDigitalMiner miner)
{
GL11.glPushMatrix();
GL11.glTranslated(getX(miner.xCoord), getY(miner.yCoord), getZ(miner.zCoord));
MekanismRenderer.blendOn();
GL11.glEnable(GL11.GL_CULL_FACE);
GL11.glColor4f(1.0F, 1.0F, 1.0F, 0.4F);
mc.getTextureManager().bindTexture(MekanismRenderer.getBlocksTexture());
getList(new MinerRenderData(miner)).render();
MekanismRenderer.blendOff();
GL11.glPopMatrix();
}
private static DisplayInteger getList(MinerRenderData data)
{
if(cachedVisuals.containsKey(data))
{
return cachedVisuals.get(data);
}
DisplayInteger display = DisplayInteger.createAndStart();
cachedVisuals.put(data, display);
List<Model3D> models = new ArrayList<Model3D>();
if(data.radius == 0)
{
//Single vertical render
models.add(createModel(-offset, (data.minY-data.yCoord)-offset, -offset, 1+offset, (data.maxY-data.yCoord)+1+offset, 1+offset));
}
else if(data.maxY-data.minY == 0)
{
//Flat panel render
models.add(createModel(-data.radius-offset, (data.minY-data.yCoord)-offset, -data.radius-offset, data.radius+1+offset, (data.maxY-data.yCoord)+1+offset, data.radius+1+offset));
}
else {
//Complete render: Top face
models.add(createModel(-data.radius-offset+1, (data.maxY-data.yCoord)-offset, -data.radius-offset+1, data.radius+offset, (data.maxY-data.yCoord)+1+offset, data.radius+offset, ForgeDirection.NORTH, ForgeDirection.SOUTH, ForgeDirection.EAST, ForgeDirection.WEST));
//Bottom face
models.add(createModel(-data.radius-offset+1, (data.minY-data.yCoord)-offset, -data.radius-offset+1, data.radius+offset, (data.minY-data.yCoord)+1+offset, data.radius+offset, ForgeDirection.NORTH, ForgeDirection.SOUTH, ForgeDirection.EAST, ForgeDirection.WEST));
//Northwest strip
models.add(createModel(-data.radius-offset, (data.minY-data.yCoord)-offset, -data.radius-offset, -data.radius+1+offset, (data.maxY-data.yCoord)+1+offset, -data.radius+1+offset, ForgeDirection.SOUTH, ForgeDirection.EAST));
//Northeast strip
models.add(createModel(data.radius-offset, (data.minY-data.yCoord)-offset, -data.radius-offset, data.radius+1+offset, (data.maxY-data.yCoord)+1+offset, -data.radius+1+offset, ForgeDirection.SOUTH, ForgeDirection.WEST));
//Southwest strip
models.add(createModel(-data.radius-offset, (data.minY-data.yCoord)-offset, data.radius-offset, -data.radius+1+offset, (data.maxY-data.yCoord)+1+offset, data.radius+1+offset, ForgeDirection.NORTH, ForgeDirection.EAST));
//Southeast strip
models.add(createModel(data.radius-offset, (data.minY-data.yCoord)-offset, data.radius-offset, data.radius+1+offset, (data.maxY-data.yCoord)+1+offset, data.radius+1+offset, ForgeDirection.NORTH, ForgeDirection.WEST));
//North face
models.add(createModel(-data.radius-offset+1, (data.minY-data.yCoord)-offset, -data.radius-offset, data.radius+offset, (data.maxY-data.yCoord)+1+offset, -data.radius+1+offset, ForgeDirection.EAST, ForgeDirection.WEST));
//South face
models.add(createModel(-data.radius-offset+1, (data.minY-data.yCoord)-offset, data.radius-offset, data.radius+offset, (data.maxY-data.yCoord)+1+offset, data.radius+1+offset, ForgeDirection.EAST, ForgeDirection.WEST));
//West face
models.add(createModel(-data.radius-offset, (data.minY-data.yCoord)-offset, -data.radius-offset+1, -data.radius+1+offset, (data.maxY-data.yCoord)+1+offset, data.radius+offset, ForgeDirection.NORTH, ForgeDirection.SOUTH));
//East face
models.add(createModel(data.radius-offset, (data.minY-data.yCoord)-offset, -data.radius-offset+1, data.radius+1+offset, (data.maxY-data.yCoord)+1+offset, data.radius+offset, ForgeDirection.NORTH, ForgeDirection.SOUTH));
}
for(Model3D model : models)
{
MekanismRenderer.renderObject(model);
}
display.endList();
return display;
}
private static Model3D createModel(double minX, double minY, double minZ, double maxX, double maxY, double maxZ, ForgeDirection... ignoreDirs)
{
Model3D toReturn = new Model3D();
for(ForgeDirection dir : ignoreDirs)
{
toReturn.setSideRender(dir, false);
}
toReturn.setBlockBounds(minX, minY, minZ, maxX, maxY, maxZ);
toReturn.baseBlock = Blocks.water;
toReturn.setTexture(MekanismRenderer.getColorIcon(EnumColor.WHITE));
return toReturn;
}
private static double getX(int x)
{
return x - TileEntityRendererDispatcher.staticPlayerX;
}
private static double getY(int y)
{
return y - TileEntityRendererDispatcher.staticPlayerY;
}
private static double getZ(int z)
{
return z - TileEntityRendererDispatcher.staticPlayerZ;
}
public static class MinerRenderData
{
public int minY;
public int maxY;
public int radius;
public int yCoord;
public MinerRenderData(int min, int max, int rad)
public MinerRenderData(int min, int max, int rad, int y)
{
minY = min;
maxY = max;
radius = rad;
yCoord = y;
}
public MinerRenderData(TileEntityDigitalMiner miner)
{
this(miner.minY, miner.maxY, miner.radius, miner.yCoord);
}
@Override
public boolean equals(Object data)
{
return data instanceof MinerRenderData && super.equals(data) && ((MinerRenderData)data).minY == minY &&
((MinerRenderData)data).maxY == maxY && ((MinerRenderData)data).radius == radius;
((MinerRenderData)data).maxY == maxY && ((MinerRenderData)data).radius == radius &&
((MinerRenderData)data).yCoord == yCoord;
}
@Override
@ -37,6 +161,7 @@ public final class MinerVisualRenderer
code = 31 * code + minY;
code = 31 * code + maxY;
code = 31 * code + radius;
code = 31 * code + yCoord;
return code;
}
}

View file

@ -1,22 +1,17 @@
package mekanism.client.render;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Random;
import java.util.Set;
import org.lwjgl.opengl.GL11;
import mekanism.api.Coord4D;
import mekanism.api.EnumColor;
import mekanism.api.Pos3D;
import mekanism.client.MekanismClient;
import mekanism.common.Mekanism;
import mekanism.common.item.ItemFlamethrower;
import mekanism.common.item.ItemJetpack;
import mekanism.common.item.ItemScubaTank;
import mekanism.common.tile.TileEntityDigitalMiner;
import mekanism.common.util.MekanismUtils;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.FontRenderer;
@ -213,32 +208,9 @@ public class RenderTickHandler
}
}
}
for(Iterator<Coord4D> iter = MekanismClient.renderingMiners.iterator(); iter.hasNext();)
{
Coord4D coord = iter.next();
if(coord.exists(mc.theWorld))
{
if(coord.getTileEntity(mc.theWorld) instanceof TileEntityDigitalMiner)
{
}
else {
iter.remove();
}
}
}
}
}
}
public void renderMinerVisual(TileEntityDigitalMiner tileEntity)
{
GL11.glPushMatrix();
GL11.glPopMatrix();
}
public void spawnAndSetParticle(String s, World world, double x, double y, double z, double velX, double velY, double velZ)
{

View file

@ -1,6 +1,7 @@
package mekanism.client.render.tileentity;
import mekanism.client.model.ModelDigitalMiner;
import mekanism.client.render.MinerVisualRenderer;
import mekanism.common.tile.TileEntityDigitalMiner;
import mekanism.common.util.MekanismUtils;
import mekanism.common.util.MekanismUtils.ResourceType;
@ -41,5 +42,7 @@ public class RenderDigitalMiner extends TileEntitySpecialRenderer
GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F);
model.render(0.0625F, tileEntity.isActive);
GL11.glPopMatrix();
MinerVisualRenderer.render(tileEntity);
}
}

View file

@ -469,6 +469,4 @@ public class CommonProxy
{
return context.getServerHandler().playerEntity;
}
public void toggleMinerRender(Coord4D coord) {}
}

View file

@ -1377,10 +1377,7 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I
@Override
public boolean onSneakRightClick(EntityPlayer player, int side)
{
if(worldObj.isRemote)
{
Mekanism.proxy.toggleMinerRender(Coord4D.get(this));
}
//TODO
return true;
}