diff --git a/models/#staircase.wings# b/models/#staircase.wings# new file mode 100644 index 0000000..1c78876 Binary files /dev/null and b/models/#staircase.wings# differ diff --git a/models/Cube1_auv.png b/models/Cube1_auv.png new file mode 100644 index 0000000..b9f1f2d Binary files /dev/null and b/models/Cube1_auv.png differ diff --git a/models/staircase.obj b/models/staircase.obj index 7463841..7ab573a 100644 --- a/models/staircase.obj +++ b/models/staircase.obj @@ -1,85 +1,47 @@ # Exported from Wings 3D 2.2.6.1 mtllib staircase.mtl o Cube1 -#14 vertices, 24 faces -v -1.00000000 0.0000000e+0 -1.00000000 -v -1.00000000 0.0000000e+0 1.00000000 -v -1.00000000 1.00000000 -1.00000000 -v -1.00000000 1.00000000 1.00000000 -v 1.00000000 0.0000000e+0 -1.00000000 -v 1.00000000 0.0000000e+0 1.00000000 -v 1.00000000 1.00000000 -1.00000000 -v 1.00000000 1.00000000 1.00000000 -v -1.00000000 1.00000000 0.0000000e+0 -v 1.00000000 1.00000000 0.0000000e+0 -v -1.00000000 2.00000000 -1.00000000 -v -1.00000000 2.00000000 0.0000000e+0 -v 1.00000000 2.00000000 0.0000000e+0 -v 1.00000000 2.00000000 -1.00000000 -vt -3.3222222e-3 -3.8777778e-3 -vt -3.3222222e-3 0.49612222 -vt -2.1666667e-3 3.5555556e-3 -vt -2.1666667e-3 0.50355556 -vt -1.5888889e-3 6.4011111e-2 -vt -1.5888889e-3 0.56401111 -vt -1.5888889e-3 1.06401111 -vt 1.3530843e-16 3.2959746e-17 -vt 1.3530843e-16 0.50000000 -vt 5.7777778e-4 3.3888889e-3 -vt 5.7777778e-4 0.50338889 -vt 2.0539683e-3 -2.5777778e-3 -vt 2.0539683e-3 0.49665556 -vt 2.0539683e-3 0.99588889 -vt 2.2111111e-3 0.49387778 -vt 2.2111111e-3 0.99387778 -vt 5.5222222e-3 5.0888889e-3 -vt 5.5222222e-3 0.99548889 -vt 0.50000000 0.50000000 -vt 0.50000000 1.00000000 -vt 0.50128730 0.49665556 -vt 0.50128730 0.99588889 -vt 0.99592222 5.0888889e-3 -vt 0.99592222 0.99548889 -vt 0.99667778 -3.8777778e-3 -vt 0.99667778 0.49612222 -vt 0.99783333 3.5555556e-3 -vt 0.99783333 0.50355556 -vt 0.99841111 6.4011111e-2 -vt 0.99841111 0.56401111 -vt 0.99841111 1.06401111 -vt 1.00000000 3.2959746e-17 -vt 1.00000000 0.50000000 -vt 1.00000000 1.00000000 -vt 1.00052063 -2.5777778e-3 -vt 1.00052063 0.49665556 -vt 1.00057778 3.3888889e-3 -vt 1.00057778 0.50338889 -vt 1.00221111 0.49387778 -vt 1.00221111 0.99387778 -g Cube1_Cube1_auv -usemtl Cube1_auv -s 1 -f 1/17/ 5/23/ 2/18/ -f 1/12/ 9/21/ 3/13/ -f 2/18/ 5/23/ 6/24/ -f 2/15/ 6/39/ 4/16/ -f 2/35/ 9/21/ 1/12/ -f 3/6/ 5/31/ 1/7/ -f 3/6/ 14/29/ 7/30/ -f 4/16/ 6/39/ 8/40/ -f 4/36/ 9/21/ 2/35/ -f 4/10/ 10/38/ 9/11/ -f 5/32/ 10/19/ 6/8/ -f 6/8/ 10/19/ 8/9/ -f 7/30/ 5/31/ 3/6/ -f 7/33/ 10/19/ 5/32/ -f 7/33/ 14/34/ 10/19/ -f 8/37/ 10/38/ 4/10/ -f 9/21/ 12/22/ 3/13/ -f 10/25/ 12/2/ 9/1/ -f 11/14/ 3/13/ 12/22/ -f 11/5/ 14/29/ 3/6/ -f 12/2/ 10/25/ 13/26/ -f 12/3/ 14/28/ 11/4/ -f 13/20/ 10/19/ 14/34/ -f 13/27/ 14/28/ 12/3/ +#14 vertices, 20 faces +v 1 0.0000000e+0 1 #1 +v 1 0.0000000e+0 0 #2 +v 1 0.50000000 1 #3 +v 1 0.50000000 0 #4 +v 0 0.0000000e+0 1 #5 +v 0 0.0000000e+0 0 #6 +v 0 0.50000000 1 #7 +v 0 0.50000000 0 #8 +v 1 0.50000000 0.5 #9 +v 0 0.50000000 0.5 #10 +v 1 1.00000000 1 #11 +v 1 1.00000000 0.5 #12 +v 0 1.00000000 0.5 #13 +v 0 1.00000000 1 #14 +vt 0 0 #1 +vt 0 0.5 #2 +vt 1 0.5 #3 +vt 1 0 #4 +vt 0 1 #5 +vt 0.5 1 #6 +vt 0.5 0.5 #7 +vt 1 1 #8 +vt 1 0.5 #9 +f 2/1 8/3 4/2 #1 FRONT FRONT +f 6/4 8/3 2/1 #2 +f 13/8 12/5 9/2 #3 FRONT TOP +f 10/9 13/8 9/2 #4 +f 14/3 11/2 12/1 #5 TOP TOP +f 13/4 14/3 12/1 #6 +f 10/3 9/2 4/1 #7 TOP FRONT +f 8/4 10/3 4/1 #8 +f 11/8 14/5 5/1 #9 BACK +f 1/4 11/8 5/1 #10 +f 6/8 2/5 1/1 #11 BOTTOM +f 5/4 6/8 1/1 #12 +f 10/7 14/8 13/6 #13 RIGHT TOP +f 10/7 7/9 14/8 #14 +f 7/3 8/2 6/1 #15 RIGHT BOTTOM +f 5/4 7/3 6/1 #16 +f 3/2 12/6 11/5 #17 LEFT TOP +f 9/7 12/6 3/2 #18 +f 1/1 4/3 3/2 #19 LEFT BOTTOM +f 1/1 2/4 4/3 #20 \ No newline at end of file diff --git a/models/staircase.wings b/models/staircase.wings index ae4ed70..562573c 100644 Binary files a/models/staircase.wings and b/models/staircase.wings differ diff --git a/models/staircase.wings~ b/models/staircase.wings~ new file mode 100644 index 0000000..e442dfe Binary files /dev/null and b/models/staircase.wings~ differ diff --git a/models/staircase_original.mtl b/models/staircase_original.mtl new file mode 100644 index 0000000..ae3d397 --- /dev/null +++ b/models/staircase_original.mtl @@ -0,0 +1,11 @@ +# Exported from Wings 3D 2.2.6.1 +newmtl Cube1_auv +Ns 19.999999999999996 +d 1.0 +illum 2 +Kd 1.0 1.0 1.0 +Ka 0.0 0.0 0.0 +Ks 0.19 0.19 0.19 +Ke 0.0 0.0 0.0 +map_Kd Cube1_auv.png + diff --git a/models/staircase_original.obj b/models/staircase_original.obj new file mode 100644 index 0000000..15d6ba1 --- /dev/null +++ b/models/staircase_original.obj @@ -0,0 +1,81 @@ +# Exported from Wings 3D 2.2.6.1 +mtllib staircase_original.mtl +o Cube1 +#14 vertices, 20 faces +v 0.50000000 0.0000000e+0 0.48571429 +v 0.50000000 0.0000000e+0 -0.51428571 +v 0.50000000 0.50000000 0.48571429 +v 0.50000000 0.50000000 -0.51428571 +v -0.50000000 0.0000000e+0 0.48571429 +v -0.50000000 0.0000000e+0 -0.51428571 +v -0.50000000 0.50000000 0.48571429 +v -0.50000000 0.50000000 -0.51428571 +v 0.50000000 0.50000000 -1.4285714e-2 +v -0.50000000 0.50000000 -1.4285714e-2 +v 0.50000000 1.00000000 0.48571429 +v 0.50000000 1.00000000 -1.4285714e-2 +v -0.50000000 1.00000000 -1.4285714e-2 +v -0.50000000 1.00000000 0.48571429 +vt -3.3222222e-3 -3.8777778e-3 +vt -3.3222222e-3 0.49612222 +vt -2.1666667e-3 3.5555556e-3 +vt -2.1666667e-3 0.50355556 +vt -1.5888889e-3 6.4011111e-2 +vt -1.5888889e-3 0.56401111 +vt -1.5888889e-3 1.06401111 +vt 1.3530843e-16 3.2959746e-17 +vt 1.3530843e-16 0.50000000 +vt 5.7777778e-4 3.3888889e-3 +vt 5.7777778e-4 0.50338889 +vt 2.0539683e-3 -2.5777778e-3 +vt 2.0539683e-3 0.49665556 +vt 2.0539683e-3 0.99588889 +vt 2.2111111e-3 0.49387778 +vt 2.2111111e-3 0.99387778 +vt 5.5222222e-3 5.0888889e-3 +vt 5.5222222e-3 0.99548889 +vt 0.50000000 0.50000000 +vt 0.50000000 1.00000000 +vt 0.50128730 0.49665556 +vt 0.50128730 0.99588889 +vt 0.99592222 5.0888889e-3 +vt 0.99592222 0.99548889 +vt 0.99667778 -3.8777778e-3 +vt 0.99667778 0.49612222 +vt 0.99783333 3.5555556e-3 +vt 0.99783333 0.50355556 +vt 0.99841111 6.4011111e-2 +vt 0.99841111 0.56401111 +vt 0.99841111 1.06401111 +vt 1.00000000 3.2959746e-17 +vt 1.00000000 0.50000000 +vt 1.00000000 1.00000000 +vt 1.00052063 -2.5777778e-3 +vt 1.00052063 0.49665556 +vt 1.00057778 3.3888889e-3 +vt 1.00057778 0.50338889 +vt 1.00221111 0.49387778 +vt 1.00221111 0.99387778 +g Cube1_Cube1_auv +usemtl Cube1_auv +s 1 +f 1/7/ 3/6/ 11/5/ 5/31/ +f 1/17/ 6/24/ 2/18/ +f 2/35/ 4/36/ 1/12/ +f 2/15/ 8/40/ 4/16/ +f 3/13/ 1/12/ 4/36/ 9/21/ +f 4/10/ 10/38/ 9/11/ +f 5/23/ 6/24/ 1/17/ +f 5/32/ 7/33/ 6/8/ +f 6/8/ 7/33/ 10/19/ 8/9/ +f 6/39/ 8/40/ 2/15/ +f 7/33/ 14/34/ 10/19/ +f 8/37/ 10/38/ 4/10/ +f 9/21/ 12/22/ 3/13/ +f 10/25/ 13/26/ 9/1/ +f 11/14/ 3/13/ 12/22/ +f 12/2/ 9/1/ 13/26/ +f 12/3/ 14/28/ 11/4/ +f 13/20/ 10/19/ 14/34/ +f 13/27/ 14/28/ 12/3/ +f 14/29/ 7/30/ 5/31/ 11/5/ diff --git a/src/sig/Block.java b/src/sig/Block.java index 6b59425..e5a0323 100644 --- a/src/sig/Block.java +++ b/src/sig/Block.java @@ -1,5 +1,6 @@ package sig; +import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.List; @@ -11,40 +12,43 @@ public class Block { final static int NORTH = 2; final static int EAST = 3; Vector pos; - Mesh block; - FaceList neighbors; + public Mesh block; + public FaceList neighbors; private FacingDirection facingDir; Block(Vector pos,Mesh block,FacingDirection facingDir) { this.neighbors=new FaceList(); this.pos=pos; - List newTris = new ArrayList<>(); - for (Triangle t : block.triangles) { - Triangle newT = (Triangle)t.clone(); - newT.b=this; - newTris.add(newT); + try { + this.block=block.getClass().getConstructor(BlockType.class).newInstance(block.type); + for (Triangle t : this.block.triangles) { + t.b = this; + } + } catch (NoSuchMethodException | SecurityException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { + e.printStackTrace(); } - this.block=new Mesh(newTris); this.facingDir=facingDir; } private void updateFacingDirection(FacingDirection targetDirection) { while (facingDir!=targetDirection) { - Texture t1 = block.triangles.get(Texture.SOUTH).tex; - Texture t2 = block.triangles.get(Texture.SOUTH+1).tex; - block.triangles.get(Texture.SOUTH).tex=block.triangles.get(Texture.EAST).tex; - block.triangles.get(Texture.SOUTH+1).tex=block.triangles.get(Texture.EAST+1).tex; - block.triangles.get(Texture.EAST).tex=block.triangles.get(Texture.NORTH).tex; - block.triangles.get(Texture.EAST+1).tex=block.triangles.get(Texture.NORTH+1).tex; - block.triangles.get(Texture.NORTH).tex=block.triangles.get(Texture.WEST).tex; - block.triangles.get(Texture.NORTH+1).tex=block.triangles.get(Texture.WEST+1).tex; - block.triangles.get(Texture.WEST).tex=t1; - block.triangles.get(Texture.WEST+1).tex=t2; - for (int i=8;i<=11;i++) { - Triangle t = block.triangles.get(i); - Vector2[] tt = new Vector2[]{t.T,t.U,t.V}; - for (Vector2 vec : tt) { - VertexOrder newOrder = VertexOrder.getOrder((int)vec.u,(int)vec.v).clockwise(); - vec.u=newOrder.u; - vec.v=newOrder.v; + if (block instanceof Cube) { + Texture t1 = block.triangles.get(Texture.SOUTH).tex; + Texture t2 = block.triangles.get(Texture.SOUTH+1).tex; + block.triangles.get(Texture.SOUTH).tex=block.triangles.get(Texture.EAST).tex; + block.triangles.get(Texture.SOUTH+1).tex=block.triangles.get(Texture.EAST+1).tex; + block.triangles.get(Texture.EAST).tex=block.triangles.get(Texture.NORTH).tex; + block.triangles.get(Texture.EAST+1).tex=block.triangles.get(Texture.NORTH+1).tex; + block.triangles.get(Texture.NORTH).tex=block.triangles.get(Texture.WEST).tex; + block.triangles.get(Texture.NORTH+1).tex=block.triangles.get(Texture.WEST+1).tex; + block.triangles.get(Texture.WEST).tex=t1; + block.triangles.get(Texture.WEST+1).tex=t2; + for (int i=8;i<=11;i++) { + Triangle t = block.triangles.get(i); + Vector2[] tt = new Vector2[]{t.T,t.U,t.V}; + for (Vector2 vec : tt) { + VertexOrder newOrder = VertexOrder.getOrder((int)vec.u,(int)vec.v).clockwise(); + vec.u=newOrder.u; + vec.v=newOrder.v; + } } } facingDir=facingDir.clockwise(); diff --git a/src/sig/Cube.java b/src/sig/Cube.java index 29cf7f1..bb27ca7 100644 --- a/src/sig/Cube.java +++ b/src/sig/Cube.java @@ -1,11 +1,15 @@ package sig; +import java.util.List; +import java.util.ArrayList; + import sig.utils.OBJReader; public class Cube extends Mesh{ - Cube(BlockType type) { + public Cube(BlockType type) { super(type); + this.type = type; this.triangles=OBJReader.ReadOBJFile("cube.obj",true); triangles.get(0).tex=type.getTexture(BlockType.FRONT); triangles.get(1).tex=type.getTexture(BlockType.FRONT); @@ -27,4 +31,32 @@ public class Cube extends Mesh{ triangles.get(10).dir=triangles.get(11).dir=BlockType.BOTTOM; } + protected List prepareRender(Block b) { + List tris = new ArrayList(); + if (!b.neighbors.UP) { + tris.add(b.block.triangles.get(8)); + tris.add(b.block.triangles.get(9)); + } + if (!b.neighbors.DOWN) { + tris.add(b.block.triangles.get(10)); + tris.add(b.block.triangles.get(11)); + } + if (!b.neighbors.LEFT) { + tris.add(b.block.triangles.get(6)); + tris.add(b.block.triangles.get(7)); + } + if (!b.neighbors.RIGHT) { + tris.add(b.block.triangles.get(2)); + tris.add(b.block.triangles.get(3)); + } + if (!b.neighbors.FORWARD) { + tris.add(b.block.triangles.get(4)); + tris.add(b.block.triangles.get(5)); + } + if (!b.neighbors.BACKWARD) { + tris.add(b.block.triangles.get(0)); + tris.add(b.block.triangles.get(1)); + } + return tris; + } } diff --git a/src/sig/FaceList.java b/src/sig/FaceList.java index ea1ce75..caac570 100644 --- a/src/sig/FaceList.java +++ b/src/sig/FaceList.java @@ -1,10 +1,10 @@ package sig; public class FaceList { - boolean UP=false; //+Y - boolean DOWN=false; - boolean FORWARD=false; //+Z - boolean RIGHT=false; //+X - boolean LEFT=false; - boolean BACKWARD=false; + public boolean UP=false; //+Y + public boolean DOWN=false; + public boolean FORWARD=false; //+Z + public boolean RIGHT=false; //+X + public boolean LEFT=false; + public boolean BACKWARD=false; } diff --git a/src/sig/Mesh.java b/src/sig/Mesh.java index f6115ef..221d2a7 100644 --- a/src/sig/Mesh.java +++ b/src/sig/Mesh.java @@ -7,7 +7,8 @@ import java.util.List; import sig.utils.OBJReader; public class Mesh { - List triangles = new ArrayList<>(); + public List triangles = new ArrayList<>(); + protected BlockType type; Mesh(List tris) { this.triangles=tris; } @@ -21,6 +22,9 @@ public class Mesh { t.tex=te; } } - Mesh(BlockType type) {; + protected Mesh(BlockType type) {; + } + protected List prepareRender(Block b) { + return b.block.triangles; } } diff --git a/src/sig/Panel.java b/src/sig/Panel.java index 84b311e..9f26a8e 100644 --- a/src/sig/Panel.java +++ b/src/sig/Panel.java @@ -134,30 +134,9 @@ public class Panel extends JPanel implements Runnable { ConcurrentLinkedQueue newTris = new ConcurrentLinkedQueue<>(); for (String key : SigRenderer.blockGrid.keySet()) { Block b = SigRenderer.blockGrid.get(key); - if (!b.neighbors.UP) { - prepareTriForRender(matWorld2, matView, b.block.triangles.get(8), newTris); - prepareTriForRender(matWorld2, matView, b.block.triangles.get(9), newTris); + for (Triangle t : b.block.prepareRender(b)) { + prepareTriForRender(matWorld2, matView, t, newTris); } - if (!b.neighbors.DOWN) { - prepareTriForRender(matWorld2, matView, b.block.triangles.get(10), newTris); - prepareTriForRender(matWorld2, matView, b.block.triangles.get(11), newTris); - } - if (!b.neighbors.LEFT) { - prepareTriForRender(matWorld2, matView, b.block.triangles.get(6), newTris); - prepareTriForRender(matWorld2, matView, b.block.triangles.get(7), newTris); - } - if (!b.neighbors.RIGHT) { - prepareTriForRender(matWorld2, matView, b.block.triangles.get(2), newTris); - prepareTriForRender(matWorld2, matView, b.block.triangles.get(3), newTris); - } - if (!b.neighbors.FORWARD) { - prepareTriForRender(matWorld2, matView, b.block.triangles.get(4), newTris); - prepareTriForRender(matWorld2, matView, b.block.triangles.get(5), newTris); - } - if (!b.neighbors.BACKWARD) { - prepareTriForRender(matWorld2, matView, b.block.triangles.get(0), newTris); - prepareTriForRender(matWorld2, matView, b.block.triangles.get(1), newTris); - } } if (renderFirst) { accumulatedTris2.clear(); diff --git a/src/sig/SigRenderer.java b/src/sig/SigRenderer.java index 5c691b6..e4020d0 100644 --- a/src/sig/SigRenderer.java +++ b/src/sig/SigRenderer.java @@ -2,6 +2,8 @@ package sig; import javax.imageio.ImageIO; import javax.swing.JFrame; +import sig.models.Staircase; + import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; @@ -28,7 +30,7 @@ public class SigRenderer implements KeyListener,MouseListener,MouseMotionListene public static boolean WIREFRAME = false; public static boolean PROFILING = false; - public static boolean FLYING_MODE = false; + public static boolean FLYING_MODE = true; public static int SCREEN_WIDTH=1280; public static int SCREEN_HEIGHT=720; public final static long TIMEPERTICK = 16666667l; @@ -166,37 +168,38 @@ public class SigRenderer implements KeyListener,MouseListener,MouseMotionListene } public void runGameLoop() { - move(); - - if (checkCollisionSquare(0,-gravity,0)) { - fallSpd=Math.max(-maxCameraSpeed.y,fallSpd-gravity); - friction(vCameraSpeed,0.004f); //Air friction. - } else { - if (!(wHeld||sHeld||aHeld||dHeld)) { - friction(vCameraSpeed,MOVESPEED/4); - } - if (fallSpd<0) { - vCamera.y=(float)Math.ceil(vCamera.y); - fallSpd=0; - jumpsAvailable=1; + if (!FLYING_MODE) { + move(); + if (checkCollisionSquare(0,-gravity,0)) { + fallSpd=Math.max(-maxCameraSpeed.y,fallSpd-gravity); + friction(vCameraSpeed,0.004f); //Air friction. + } else { + if (!(wHeld||sHeld||aHeld||dHeld)) { + friction(vCameraSpeed,MOVESPEED/4); + } + if (fallSpd<0) { + vCamera.y=(float)Math.ceil(vCamera.y); + fallSpd=0; + jumpsAvailable=1; + } } - } - if (fallSpd!=0) { - if (fallSpd>0) { - if (checkCollisionSquare(0,fallSpd+0.5f,0)) { - vCamera.y+=fallSpd; + if (fallSpd!=0) { + if (fallSpd>0) { + if (checkCollisionSquare(0,fallSpd+0.5f,0)) { + vCamera.y+=fallSpd; + } else { + fallSpd=0; + } } else { - fallSpd=0; + vCamera.y+=fallSpd; } - } else { - vCamera.y+=fallSpd; } - } - if (spaceHeld&&jumpsAvailable==1&&fallSpd==0&&!checkCollisionSquare(0,-gravity,0)) { - jumpsAvailable=0; - fallSpd=0.2f; + if (spaceHeld&&jumpsAvailable==1&&fallSpd==0&&!checkCollisionSquare(0,-gravity,0)) { + jumpsAvailable=0; + fallSpd=0.2f; + } } if (upHeld) { @@ -217,26 +220,34 @@ public class SigRenderer implements KeyListener,MouseListener,MouseMotionListene forward.y=0; } if (wLast&&wHeld) { + if (FLYING_MODE) { + vCamera = Vector.add(vCamera,forward); + } addSpeed(forward); // move(MOVESPEED); } if (!wLast&&sHeld) { + if (FLYING_MODE) { + vCamera = Vector.subtract(vCamera,forward); + } addSpeed(Vector.multiply(forward,-1)); //move(MOVESPEED); } } if (aLast&&aHeld) { Vector leftStrafe = Vector.multiply(Matrix.MultiplyVector(Matrix.MakeRotationY((float)-Math.PI/2), vLookDir),MOVESPEED); - if (!FLYING_MODE) { - leftStrafe.y=0; + leftStrafe.y=0; + if (FLYING_MODE) { + vCamera = Vector.add(vCamera,leftStrafe); } addSpeed(leftStrafe); //move(MOVESPEED); } if (!aLast&&dHeld) { Vector rightStrafe = Vector.multiply(Matrix.MultiplyVector(Matrix.MakeRotationY((float)Math.PI/2), vLookDir),MOVESPEED); - if (!FLYING_MODE) { - rightStrafe.y=0; + rightStrafe.y=0; + if (FLYING_MODE) { + vCamera = Vector.add(vCamera,rightStrafe); } addSpeed(rightStrafe); //move(MOVESPEED); @@ -275,7 +286,7 @@ public class SigRenderer implements KeyListener,MouseListener,MouseMotionListene } public static void addBlock(Vector pos,BlockType type,FacingDirection facingDir) { - Block b = new Block(pos,new Cube(type),FacingDirection.SOUTH); + Block b = new Block(pos,new Staircase(type),FacingDirection.SOUTH); b.setFacingDirection(facingDir); blockGrid.put(pos.x+"_"+pos.y+"_"+pos.z,b); b.updateFaces(); @@ -308,10 +319,12 @@ public class SigRenderer implements KeyListener,MouseListener,MouseMotionListene Random r = new Random(438107); for (int x=0;x<64;x++) { for (int z=0;z<64;z++) { - addBlock(new Vector(x,0,z),BlockType.GRASS,FacingDirection.SOUTH); - for (int y=1;y prepareRender(Block b) { + List tris = new ArrayList(); + if (!b.neighbors.UP) { + } + if (!b.neighbors.DOWN) { + } + if (!b.neighbors.LEFT) { + tris.add(b.block.triangles.get(12)); + tris.add(b.block.triangles.get(13)); + tris.add(b.block.triangles.get(14)); + tris.add(b.block.triangles.get(15)); + } + if (!b.neighbors.RIGHT) { + tris.add(b.block.triangles.get(16)); + tris.add(b.block.triangles.get(17)); + tris.add(b.block.triangles.get(18)); + tris.add(b.block.triangles.get(19)); + } + if (!b.neighbors.FORWARD) { + } + if (!b.neighbors.BACKWARD) { + tris.add(b.block.triangles.get(0)); + tris.add(b.block.triangles.get(1)); + } + tris.add(b.block.triangles.get(4)); + tris.add(b.block.triangles.get(5)); + tris.add(b.block.triangles.get(10)); + tris.add(b.block.triangles.get(11)); + tris.add(b.block.triangles.get(8)); + tris.add(b.block.triangles.get(9)); + tris.add(b.block.triangles.get(2)); + tris.add(b.block.triangles.get(3)); + tris.add(b.block.triangles.get(6)); + tris.add(b.block.triangles.get(7)); + return tris; + } +}