From 81c8ece1c31284b645f371705aff87efceb5fb07 Mon Sep 17 00:00:00 2001 From: Joshua Sigona Date: Thu, 11 Nov 2021 22:11:43 +0900 Subject: [PATCH] Implement staircase model --- models/#staircase.wings# | Bin 0 -> 2386 bytes models/Cube1_auv.png | Bin 0 -> 868 bytes models/staircase.obj | 126 ++++++++++++---------------------- models/staircase.wings | Bin 2374 -> 2381 bytes models/staircase.wings~ | Bin 0 -> 2435 bytes models/staircase_original.mtl | 11 +++ models/staircase_original.obj | 81 ++++++++++++++++++++++ src/sig/Block.java | 54 ++++++++------- src/sig/Cube.java | 34 ++++++++- src/sig/FaceList.java | 12 ++-- src/sig/Mesh.java | 8 ++- src/sig/Panel.java | 25 +------ src/sig/SigRenderer.java | 87 +++++++++++++---------- src/sig/models/Staircase.java | 58 ++++++++++++++++ 14 files changed, 322 insertions(+), 174 deletions(-) create mode 100644 models/#staircase.wings# create mode 100644 models/Cube1_auv.png create mode 100644 models/staircase.wings~ create mode 100644 models/staircase_original.mtl create mode 100644 models/staircase_original.obj create mode 100644 src/sig/models/Staircase.java diff --git a/models/#staircase.wings# b/models/#staircase.wings# new file mode 100644 index 0000000000000000000000000000000000000000..1c78876070c242b536b7be5678c19d18f26530ea GIT binary patch literal 2386 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 literal 0 HcmV?d00001 diff --git a/models/Cube1_auv.png b/models/Cube1_auv.png new file mode 100644 index 0000000000000000000000000000000000000000..b9f1f2d2dffc49aa18f99cdf8bfaa96e88cb3d4d GIT binary patch literal 868 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRSEX7WqAsj$Z!;#X#z`!i+>Eakt zG3V`F>uixgiT01NlBvDZkFl)Q&0%pA*v3`HDE<11=9@L2Q~zj)iIq(YYf4C-=p`hr zpSZDe?bV;k`s+7;ve{p@X|wh0cIINs^y&F=dv`?f%!!@TZ?--9z5JB8{de=)Z=bKP z$*=vtbLs#4TkF4AZduI3aE{>tf>`#2{iTh?-1Pmm|0{R=&G@`v%l{I&_|Uz4MFqdl z6;%KF^YZKJtFPAEU!E_+h@=f{z@yRzmAS|5>UP9e)lND$d2-3zM?WvSFa5jxwM4Of z{sRt%bcO;pBw~9_Qx?wyjAz|*RNBKu8(T}AwfqL(|NK}|UE8#?|Nd9T zkR(*!n1^0J{QldoyT>1X`%=wv^||b&&pe@b&pR)vlSNr`JL-)}ib@fKyKU!m`eEa7Y!^@pNzSuZ_f3LLcE9az={rju`GPtAK zYs|1?rB(ettN*qu*L@DZTmQZIXJMRk;XUVHe=xlgyz73<-`d}={{DFPn!)o|-KCFb zYxmn@dM0|_Jej!CeFx9J{8jM#dcM8)@BQW9!!rNhea*h)=l}HhW8Z&Y|DJtbd52v? g8zMb|S#`|6rXQPs)snd$m~9w5UHx3vIVCg!0OALPvH$=8 literal 0 HcmV?d00001 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 ae4ed70867c7cc7c519ac4a65a54f595dac351c9..562573c704ec9fcca0e47ab8cf6fc5d82a6069c7 100644 GIT binary patch literal 2381 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 diff --git a/models/staircase.wings~ b/models/staircase.wings~ new file mode 100644 index 0000000000000000000000000000000000000000..e442dfec2fa910f34ff9d9aa77399c9863d647c6 GIT binary patch literal 2435 zcmb7?doeJrCzgliPGt0%fkn(p6^pJiBJzFH7%ZRIUJU31id|&r6D1|Jw5xj zjMN^xbIiUD3yW z#uYr>r`k&oCg(_V8RgyUYO(yE$&rx0`I4gpz^-gylqejvj`tv1UwVIKWaqekALu5ffis2{M6hfDfc*KL z%37%F>?~6aDeM}xVeV^3wryI=AYk$_OxF8unhi`6J2vns zTAq?1k&HO5;kJLXMvUFK!L3iHvq-j)TWeU<=BOBPnlCTwrhdM|34)MzPK;m|I}4ZY zL-Mf4ykkLj4-=E=b(M-T^Z8A5xFjhmA+y3^8xiieA8ZBnw9q5t6Y&WZSDz4?fBv|s z)JIukrdQ0t40~0Ds`2t%unaI zQAv!++iCjv;4oJS=IJ9g^|Tx5yVbx_}Ui7r(< zaS#`o3OinEbJ-VJhc5`2k-TV@gtIpVcm~P2!LhEA{pN&7UrlMOozmEZKJWB&7O55NTx} zNFje5Dz%wji0{6!m=e77osu`nPB`ePX8(1_!ZhuW;rHwelg0=O;MUoXz1PIVq!O3( zYTo)f9d=ufF7mdtAc3*^ncLOWZ)Oa1w)uSQN1r=knUG#)mpHH1gPTdXrLu1I>Vbvo zYng_V9_fW$_qn9&QR&$m!)_%87GG8)cf@DR?KMxo(VRc4A=ez1CN}RjA zk)GlDjfSj3$<9$nLN4I`qm^|>3aKb{#si@p7TRE#OASv>kFyEfSXa5+b;g*k2q2!_ zGNK6w!MJd4iM!sL=CiFgPpc|;rItXEt%Wxr4diVutD=q@iT==2*2{a0cV!T>O^SQ< zxC!@+r+P+Rw1OeA5KmQhFS2s6M->~I59ocG zcRxC~m;1;(;zv2uskUSUF|L4GGqCL;HV<#=Bm%s|Efmbs*s|&~dBA z*bBB=9U@B@=2l$dNsP~7!YNQr4Ek66!2&a;_AH$xh^B4jZUrn6hI^JczsI%!VXJIB zZg^{gOTR(W)Pb*pfM21(wsP0jxx9mZ6xug7TPG9=P+0ul-zv6HY&km1;Cj9g?8NY| zp9Gkp!jFtOj8Od7F@N_6ivj91E0zYAIFl4NucQ^%~3OLc} zwaq!%!-A;arv5#Csi)JqWRAs_Ci8jlrab35I-?H#|Gwi$bOjquju3wET_30U`F~@e zcl@dXBosbDn{D#=!c#fZ?2D+9xu6KHqwts3|9ok(Tl^_>0F*G!@!#O@|1AhurD$`o zJoZ6ylP{YAJO~S)oO=J8(mFBWax?l*4AABSG)@uLLxp1h!(|JgzNx*rltG}e=(VWH z4G%kqEgSJdSkcHvhY+p`VvY`@-KrPaoLN}VR1KG?Lh zGJ&_dZb}HNV;Kv7&Le-c_BBhbGVoZ@eFRviLpCS$Ey=em8Z?G~WK(AaAnIe6=)VA! C03w?J literal 0 HcmV?d00001 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; + } +}