mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
even more CT garbage
This commit is contained in:
parent
9577435865
commit
cf54665bbd
@ -1,6 +1,8 @@
|
||||
package com.hbm.blocks.test;
|
||||
|
||||
import com.hbm.render.block.ct.IBlockCT;
|
||||
import com.hbm.render.block.ct.IconCT;
|
||||
import com.hbm.render.block.ct.IconGeneric;
|
||||
|
||||
import cpw.mods.fml.client.registry.RenderingRegistry;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
@ -12,7 +14,7 @@ import net.minecraft.client.renderer.texture.TextureAtlasSprite;
|
||||
import net.minecraft.client.renderer.texture.TextureMap;
|
||||
import net.minecraft.util.IIcon;
|
||||
|
||||
public class TestCT extends Block {
|
||||
public class TestCT extends Block implements IBlockCT {
|
||||
|
||||
public TestCT(Material p_i45394_1_) {
|
||||
super(p_i45394_1_);
|
||||
@ -30,20 +32,11 @@ public class TestCT extends Block {
|
||||
@SideOnly(Side.CLIENT)
|
||||
public void registerBlockIcons(IIconRegister reg) {
|
||||
this.blockIcon = reg.registerIcon(this.getTextureName());
|
||||
|
||||
IIcon ct = new SevenUp(this.getTextureName() + "_ct");
|
||||
reg.registerIcon(this.getTextureName() + "_ct");
|
||||
|
||||
for(int i = 0; i < frags.length; i++) {
|
||||
frags[i] = new IconCT(i < 4 ? this.blockIcon : ct, i);
|
||||
}
|
||||
this.frags = IBlockCT.registerIcons(reg, this.getTextureName(), this.blockIcon);
|
||||
}
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public static class SevenUp extends TextureAtlasSprite {
|
||||
|
||||
protected SevenUp(String tex) {
|
||||
super(tex);
|
||||
}
|
||||
@Override
|
||||
public IIcon[] getFragments() {
|
||||
return frags;
|
||||
}
|
||||
}
|
||||
|
||||
42
src/main/java/com/hbm/render/block/RenderBlockCT.java
Normal file
42
src/main/java/com/hbm/render/block/RenderBlockCT.java
Normal file
@ -0,0 +1,42 @@
|
||||
package com.hbm.render.block;
|
||||
|
||||
import com.hbm.blocks.test.TestCT;
|
||||
import com.hbm.render.block.ct.CTContext;
|
||||
import com.hbm.render.block.ct.RenderBlocksCT;
|
||||
|
||||
import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.client.renderer.RenderBlocks;
|
||||
import net.minecraft.world.IBlockAccess;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public class RenderBlockCT implements ISimpleBlockRenderingHandler {
|
||||
|
||||
@Override
|
||||
public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) {
|
||||
renderer.renderBlockAsItem(block, 1, 1.0F);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) {
|
||||
|
||||
RenderBlocksCT rbct = RenderBlocksCT.instance;
|
||||
|
||||
CTContext.loadContext((World)world, x, y, z, block);
|
||||
rbct.renderStandardBlock(block, x, y, z);
|
||||
CTContext.dropContext();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldRender3DInInventory(int modelId) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRenderId() {
|
||||
return TestCT.renderID;
|
||||
}
|
||||
|
||||
}
|
||||
35
src/main/java/com/hbm/render/block/ct/CT.java
Normal file
35
src/main/java/com/hbm/render/block/ct/CT.java
Normal file
@ -0,0 +1,35 @@
|
||||
package com.hbm.render.block.ct;
|
||||
|
||||
public class CT {
|
||||
|
||||
public static final int l = 0; //left
|
||||
public static final int r = 1; //right
|
||||
public static final int t = 0; //top
|
||||
public static final int b = 2; //bottom
|
||||
public static final int f = 0; //full/unconnected
|
||||
public static final int c = 4; //connected
|
||||
public static final int j = 8; //junction
|
||||
public static final int h = 12; //horizontal
|
||||
public static final int v = 16; //vertical
|
||||
|
||||
public static final int ftl = 0;
|
||||
public static final int ftr = 1;
|
||||
public static final int fbl = 2;
|
||||
public static final int fbr = 3;
|
||||
public static final int ctl = 4;
|
||||
public static final int ctr = 5;
|
||||
public static final int cbl = 6;
|
||||
public static final int cbr = 7;
|
||||
public static final int jtl = 8;
|
||||
public static final int jtr = 9;
|
||||
public static final int jbl = 10;
|
||||
public static final int jbr = 11;
|
||||
public static final int htl = 12;
|
||||
public static final int htr = 13;
|
||||
public static final int hbl = 14;
|
||||
public static final int hbr = 15;
|
||||
public static final int vtl = 16;
|
||||
public static final int vtr = 17;
|
||||
public static final int vbl = 18;
|
||||
public static final int vbr = 19;
|
||||
}
|
||||
131
src/main/java/com/hbm/render/block/ct/CTContext.java
Normal file
131
src/main/java/com/hbm/render/block/ct/CTContext.java
Normal file
@ -0,0 +1,131 @@
|
||||
package com.hbm.render.block.ct;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.util.IIcon;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import static com.hbm.render.block.ct.CT.*;
|
||||
|
||||
public class CTContext {
|
||||
|
||||
public static CTFace[] faces;
|
||||
|
||||
//dim 1: faces (forgeDir)
|
||||
//dim 2: neighbors (TL, TC, TR, CL, CR, BL, BC, BR)
|
||||
//dim 3: coord (x/y/z, [-1;1])
|
||||
public static int[][][] access = new int[][][] {
|
||||
{ {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} },
|
||||
{ {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} },
|
||||
{ {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} },
|
||||
{ {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} },
|
||||
{ {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} },
|
||||
{ {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }
|
||||
//TODO
|
||||
};
|
||||
|
||||
/**
|
||||
* Generates the six CTFaces and fills the faces array, the faces contain the information on what icon types should be used
|
||||
* @param world
|
||||
* @param x
|
||||
* @param y
|
||||
* @param z
|
||||
* @param block
|
||||
*/
|
||||
public static void loadContext(World world, int x, int y, int z, Block block) {
|
||||
|
||||
faces = new CTFace[6];
|
||||
|
||||
for(int i = 0; i < 6; i++) {
|
||||
|
||||
boolean[] cons = new boolean[8];
|
||||
int[][] dirs = access[i];
|
||||
|
||||
for(int j = 0; j < 8; j++) {
|
||||
|
||||
int[] coord = dirs[j];
|
||||
Block neighbor = world.getBlock(x + coord[0], y + coord[1], z + coord[2]);
|
||||
|
||||
if(neighbor instanceof IBlockCT && ((IBlockCT) neighbor).canConnect(world, x + coord[0], y + coord[1], z + coord[2], (IBlockCT)block)) {
|
||||
cons[j] = true;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* 1 2 3
|
||||
* 4 5
|
||||
* 6 7 8
|
||||
*/
|
||||
|
||||
int itl = t | l | cornerType(cons[4], cons[1], cons[2]);
|
||||
int itr = t | r | cornerType(cons[5], cons[3], cons[2]);
|
||||
int ibl = b | l | cornerType(cons[4], cons[6], cons[7]);
|
||||
int ibr = b | r | cornerType(cons[5], cons[8], cons[7]);
|
||||
|
||||
faces[i] = new CTFace((IBlockCT)block, itl, itr, ibl, ibr);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the overarching texture type based on whether the horizontal, vertical and corner are connected
|
||||
* @param vert
|
||||
* @param hor
|
||||
* @param corner
|
||||
* @return the bitmask for the full texture type that should be used (f/c/j/h/v)
|
||||
*/
|
||||
public static int cornerType(boolean vert, boolean hor, boolean corner) {
|
||||
|
||||
if(vert && hor && corner)
|
||||
return c;
|
||||
else if(vert && hor)
|
||||
return j;
|
||||
else if(vert)
|
||||
return v;
|
||||
else if(hor)
|
||||
return h;
|
||||
else
|
||||
return f;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return whether there's currently a context available
|
||||
*/
|
||||
public static boolean isContextLoaded() {
|
||||
return faces != null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets rid of the current context
|
||||
*/
|
||||
public static void dropContext() {
|
||||
faces = null;
|
||||
}
|
||||
|
||||
/**
|
||||
* The buffered context information for a single side. Also stores the block itself for easier access.
|
||||
* @author hbm
|
||||
*
|
||||
*/
|
||||
public static class CTFace {
|
||||
|
||||
IBlockCT ct;
|
||||
int index_tl;
|
||||
int index_tr;
|
||||
int index_bl;
|
||||
int index_br;
|
||||
|
||||
public CTFace() { }
|
||||
|
||||
public CTFace(IBlockCT block, int i, int j, int k, int l) {
|
||||
this.ct = block;
|
||||
this.index_tl = i;
|
||||
this.index_tr = j;
|
||||
this.index_bl = k;
|
||||
this.index_br = l;
|
||||
}
|
||||
|
||||
public IIcon getTopLeft() { return ct.getFragments()[index_tl]; }
|
||||
public IIcon getTopRight() { return ct.getFragments()[index_tr]; }
|
||||
public IIcon getBottomLeft() { return ct.getFragments()[index_bl]; }
|
||||
public IIcon getBottomRight() { return ct.getFragments()[index_br]; }
|
||||
}
|
||||
}
|
||||
27
src/main/java/com/hbm/render/block/ct/IBlockCT.java
Normal file
27
src/main/java/com/hbm/render/block/ct/IBlockCT.java
Normal file
@ -0,0 +1,27 @@
|
||||
package com.hbm.render.block.ct;
|
||||
|
||||
import net.minecraft.client.renderer.texture.IIconRegister;
|
||||
import net.minecraft.util.IIcon;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public interface IBlockCT {
|
||||
|
||||
public IIcon[] getFragments();
|
||||
|
||||
public default boolean canConnect(World world, int x, int y, int z, IBlockCT block) {
|
||||
return this == block;
|
||||
}
|
||||
|
||||
public static IIcon[] registerIcons(IIconRegister reg, String textureName, IIcon blockIcon) {
|
||||
IIcon[] frags = new IIcon[20];
|
||||
|
||||
IIcon ct = new IconGeneric(textureName + "_ct");
|
||||
reg.registerIcon(textureName + "_ct");
|
||||
|
||||
for(int i = 0; i < frags.length; i++) {
|
||||
frags[i] = new IconCT(i < 4 ? blockIcon : ct, i);
|
||||
}
|
||||
|
||||
return frags;
|
||||
}
|
||||
}
|
||||
@ -1,39 +1,9 @@
|
||||
package com.hbm.render.block.ct;
|
||||
|
||||
import static com.hbm.render.block.ct.CT.*;
|
||||
import net.minecraft.util.IIcon;
|
||||
|
||||
public class IconCT implements IIcon {
|
||||
|
||||
public static final int l = 0; //left
|
||||
public static final int r = 1; //right
|
||||
public static final int t = 0; //top
|
||||
public static final int b = 2; //bottom
|
||||
public static final int f = 0; //full
|
||||
public static final int c = 4; //connected
|
||||
public static final int j = 8; //junction
|
||||
public static final int h = 12; //horizontal
|
||||
public static final int v = 16; //vertical
|
||||
|
||||
public static final int ftl = 0;
|
||||
public static final int ftr = 1;
|
||||
public static final int fbl = 2;
|
||||
public static final int fbr = 3;
|
||||
public static final int ctl = 4;
|
||||
public static final int ctr = 5;
|
||||
public static final int cbl = 6;
|
||||
public static final int cbr = 7;
|
||||
public static final int jtl = 8;
|
||||
public static final int jtr = 9;
|
||||
public static final int jbl = 10;
|
||||
public static final int jbr = 11;
|
||||
public static final int htl = 12;
|
||||
public static final int htr = 13;
|
||||
public static final int hbl = 14;
|
||||
public static final int hbr = 15;
|
||||
public static final int vtl = 16;
|
||||
public static final int vtr = 17;
|
||||
public static final int vbl = 18;
|
||||
public static final int vbr = 19;
|
||||
|
||||
private IIcon parent;
|
||||
private int type;
|
||||
@ -42,38 +12,37 @@ public class IconCT implements IIcon {
|
||||
private float minV;
|
||||
private float maxV;
|
||||
|
||||
/// none of this is going to work because that's just not how icon UV works! ///
|
||||
public IconCT(IIcon parent, int type) {
|
||||
this.parent = parent;
|
||||
this.type = type;
|
||||
|
||||
int sub = ((type & f) != 0) ? 2 : 4;
|
||||
float len = 1F / sub;
|
||||
float lenU = (parent.getMaxU() - parent.getMinU()) / sub;
|
||||
float lenV = (parent.getMaxV() - parent.getMinV()) / sub;
|
||||
|
||||
float du = 0F;
|
||||
float dv = 0F;
|
||||
float du = parent.getMinU();
|
||||
float dv = parent.getMinV();
|
||||
|
||||
//set pos to full block (coarse positioning)
|
||||
if((type & v) > 0 || (type & j) > 0) {
|
||||
du += len * 2;
|
||||
du += lenU * 2;
|
||||
}
|
||||
if((type & h) > 0 || (type & j) > 0) {
|
||||
dv += len * 2;
|
||||
dv += lenV * 2;
|
||||
}
|
||||
|
||||
//set pos to sub-block (fine positioning)
|
||||
if((type & r) > 0) {
|
||||
du += len;
|
||||
du += lenU;
|
||||
}
|
||||
if((type & b) > 0) {
|
||||
dv += len;
|
||||
dv += lenV;
|
||||
}
|
||||
|
||||
minU = du;
|
||||
maxU = du + len;
|
||||
maxU = du + lenU;
|
||||
minV = dv;
|
||||
maxV = dv + len;
|
||||
//what moron wrote this
|
||||
maxV = dv + lenV;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
13
src/main/java/com/hbm/render/block/ct/IconGeneric.java
Normal file
13
src/main/java/com/hbm/render/block/ct/IconGeneric.java
Normal file
@ -0,0 +1,13 @@
|
||||
package com.hbm.render.block.ct;
|
||||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public class IconGeneric extends TextureAtlasSprite {
|
||||
|
||||
public IconGeneric(String name) {
|
||||
super(name);
|
||||
}
|
||||
}
|
||||
@ -1,11 +1,15 @@
|
||||
package com.hbm.render.block.ct;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.client.renderer.RenderBlocks;
|
||||
import net.minecraft.client.renderer.Tessellator;
|
||||
import net.minecraft.util.IIcon;
|
||||
|
||||
public class RenderBlocksCT extends RenderBlocks {
|
||||
|
||||
public static RenderBlocksCT instance = new RenderBlocksCT();
|
||||
|
||||
VertInfo tl;
|
||||
VertInfo tc;
|
||||
@ -42,6 +46,11 @@ public class RenderBlocksCT extends RenderBlocks {
|
||||
this.cc = VertInfo.avg(tl, tr, bl, br);
|
||||
}
|
||||
|
||||
/*@Override
|
||||
public boolean renderStandardBlock(Block block, int x, int y, int z) {
|
||||
return super.renderStandardBlock(block, x, y, z);
|
||||
}*/
|
||||
|
||||
@Override
|
||||
public void renderFaceXPos(Block block, double x, double y, double z, IIcon icon) {
|
||||
super.renderFaceXPos(block, x, y, z, icon);
|
||||
@ -149,4 +158,42 @@ public class RenderBlocksCT extends RenderBlocks {
|
||||
return new VertInfo(r, g, b, l);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderBlockAsItem(Block block, int meta, float mult) {
|
||||
|
||||
block.setBlockBoundsForItemRender();
|
||||
this.setRenderBoundsFromBlock(block);
|
||||
GL11.glRotatef(90.0F, 0.0F, 1.0F, 0.0F);
|
||||
GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
|
||||
|
||||
tess.startDrawingQuads();
|
||||
tess.setNormal(0.0F, -1.0F, 0.0F);
|
||||
this.renderFaceYNeg(block, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(block, 0, meta));
|
||||
tess.draw();
|
||||
tess.startDrawingQuads();
|
||||
tess.setNormal(0.0F, 1.0F, 0.0F);
|
||||
this.renderFaceYPos(block, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(block, 1, meta));
|
||||
tess.draw();
|
||||
|
||||
tess.startDrawingQuads();
|
||||
tess.setNormal(0.0F, 0.0F, -1.0F);
|
||||
this.renderFaceZNeg(block, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(block, 2, meta));
|
||||
tess.draw();
|
||||
tess.startDrawingQuads();
|
||||
tess.setNormal(0.0F, 0.0F, 1.0F);
|
||||
this.renderFaceZPos(block, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(block, 3, meta));
|
||||
tess.draw();
|
||||
|
||||
tess.startDrawingQuads();
|
||||
tess.setNormal(-1.0F, 0.0F, 0.0F);
|
||||
this.renderFaceXNeg(block, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(block, 4, meta));
|
||||
tess.draw();
|
||||
tess.startDrawingQuads();
|
||||
tess.setNormal(1.0F, 0.0F, 0.0F);
|
||||
this.renderFaceXPos(block, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(block, 5, meta));
|
||||
tess.draw();
|
||||
|
||||
GL11.glTranslatef(0.5F, 0.5F, 0.5F);
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user