Started work on a Digital Miner visual render thing. For some reason it's culling all oceans.
This commit is contained in:
parent
7e525e10c6
commit
69a411813e
8 changed files with 134 additions and 55 deletions
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -469,6 +469,4 @@ public class CommonProxy
|
|||
{
|
||||
return context.getServerHandler().playerEntity;
|
||||
}
|
||||
|
||||
public void toggleMinerRender(Coord4D coord) {}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue