From 0f0a94811f9388966a893c57589e79d938d517ad Mon Sep 17 00:00:00 2001 From: opfromthestart Date: Sat, 25 Sep 2021 20:45:17 -0400 Subject: [PATCH] Cleaning -Cleaned up offsets to make it look like a cube and not 6 squares. -Fixed error where regions would incorrectly reset files -Some additions to try to match the intended look. I really dont understand layouts. --- .../server/world/io/region/Region.java | 1 + .../server/world/io/region/RegionFile.java | 12 +++++++----- .../progressia/test/CubeComponent.java | 16 +++++++++------- .../windcorp/progressia/test/LayerTitle.java | 17 +++++++++++------ .../assets/textures/title/progressia.png | Bin 2248 -> 11920 bytes 5 files changed, 28 insertions(+), 18 deletions(-) diff --git a/src/main/java/ru/windcorp/progressia/server/world/io/region/Region.java b/src/main/java/ru/windcorp/progressia/server/world/io/region/Region.java index b25535c..1839034 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/io/region/Region.java +++ b/src/main/java/ru/windcorp/progressia/server/world/io/region/Region.java @@ -60,6 +60,7 @@ public class Region { } catch (IOException e) { RegionWorldContainer.LOG.debug("Uh the file broke"); + RegionWorldContainer.LOG.debug(e.getLocalizedMessage()); if (RESET_CORRUPTED) { this.file.makeHeader(regionCoords); } diff --git a/src/main/java/ru/windcorp/progressia/server/world/io/region/RegionFile.java b/src/main/java/ru/windcorp/progressia/server/world/io/region/RegionFile.java index 520d24e..c68f252 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/io/region/RegionFile.java +++ b/src/main/java/ru/windcorp/progressia/server/world/io/region/RegionFile.java @@ -63,9 +63,10 @@ public class RegionFile { } - char prog; + byte prog; + file.seek(0); for (int i=0;i<4;i++) { - prog = file.readChar(); + prog = file.readByte(); if (prog != HEADER_ID[i]) { throw new IOException("File is not a .progressia_chunk file"); @@ -131,14 +132,15 @@ public class RegionFile { } public void makeHeader(Vec3i regionCoords) throws IOException { + file.seek(0); + for (int i = 0; i < HEADER_SIZE; i++) { + file.write(0); + } file.seek(0); file.write(HEADER_ID); file.writeInt(regionCoords.x); file.writeInt(regionCoords.y); file.writeInt(regionCoords.z); - for (int i = 0; i < HEADER_SIZE; i++) { - file.write(0); - } } public void writeBuffer(byte[] buffer, int dataOffset, Vec3i pos) throws IOException { diff --git a/src/main/java/ru/windcorp/progressia/test/CubeComponent.java b/src/main/java/ru/windcorp/progressia/test/CubeComponent.java index cce31a2..90eaf30 100644 --- a/src/main/java/ru/windcorp/progressia/test/CubeComponent.java +++ b/src/main/java/ru/windcorp/progressia/test/CubeComponent.java @@ -20,7 +20,7 @@ public class CubeComponent extends Component { private ScheduledExecutorService executor = Executors.newScheduledThreadPool(1); - private int size = 250; + private int size = 400; public CubeComponent(String name) { super(name); @@ -59,12 +59,12 @@ public class CubeComponent extends Component { normals[i] = transforms[i].rotate((float) (time%(6000*6.28) )/ 6000, new Vec3(0,1,0)).rotate((float) 24, new Vec3(1,.5,0)).mul_(normals[i]); } - transforms[0].translate(new Vec3(-size/2,-size/2,size/2+13)); - transforms[1].translate(new Vec3(-size/2,-size/2-13,-size/2)).rotate((float) pi2, new Vec3(1,0,0)); + transforms[0].translate(new Vec3(-size/2,-size/2,size/2+11)); + transforms[1].translate(new Vec3(-size/2,-size/2-12,-size/2)).rotate((float) pi2, new Vec3(1,0,0)); transforms[2].translate(new Vec3(-size/2+13,-size/2,size/2)).rotate((float) pi2, new Vec3(0,1,0)); - transforms[3].translate(new Vec3(-size/2,-size/2,-size/2+13)); - transforms[4].translate(new Vec3(-size/2,size/2-13,-size/2)).rotate((float) pi2, new Vec3(1,0,0)); - transforms[5].translate(new Vec3(size/2+13,-size/2,size/2)).rotate((float) pi2, new Vec3(0,1,0)); + transforms[3].translate(new Vec3(-size/2,-size/2,-size/2+14)); + transforms[4].translate(new Vec3(-size/2,size/2-15.5,-size/2)).rotate((float) pi2, new Vec3(1,0,0)); + transforms[5].translate(new Vec3(size/2+15.5,-size/2,size/2)).rotate((float) pi2, new Vec3(0,1,0)); } @Override @@ -72,7 +72,9 @@ public class CubeComponent extends Component { { computeTransforms(); - target.pushTransform(new Mat4(1).translate(new Vec3(getX()+size*r3/2,getY()+size*r3/2,0))); + setPosition(750,780); + + target.pushTransform(new Mat4(1).translate(new Vec3(getX()+size*r3/2,getY()-size*r3/2,0))); //-size*r3/2 for (int b=0; b<6;b++) { diff --git a/src/main/java/ru/windcorp/progressia/test/LayerTitle.java b/src/main/java/ru/windcorp/progressia/test/LayerTitle.java index 850fb61..baa5e06 100644 --- a/src/main/java/ru/windcorp/progressia/test/LayerTitle.java +++ b/src/main/java/ru/windcorp/progressia/test/LayerTitle.java @@ -31,30 +31,35 @@ public class LayerTitle extends Background { private final BasicButton resetButton; public LayerTitle(String name) { - super(name, new LayoutAlign(0.5f, 0.7f, 15), SimpleTextures.get("title/background")); + super(name, new LayoutAlign(0, 1f, 15), SimpleTextures.get("title/background")); Group content = new Group("Layer" + name + ".Group", new LayoutVertical(15)); + Group buttonContent = new Group("Layer" + name + ".ButtonGroup", new LayoutVertical(15)); Font titleFont = new Font().deriveBold().withColor(Colors.BLUE).withAlign(0.5f); content.addChild(new TextureComponent(name + ".Title", SimpleTextures.get("title/progressia"))); Font buttonFont = titleFont.deriveNotBold(); MutableString playText = new MutableStringLocalized("Layer" + name + ".Play"); - content.addChild(new Button(name + ".Play", new Label(name + ".Play", buttonFont, playText)).addAction(this::startGame)); + buttonContent.addChild(new Button(name + ".Play", new Label(name + ".Play", buttonFont, playText)).addAction(this::startGame)); MutableString resetText = new MutableStringLocalized("Layer" + name + ".Reset"); this.resetButton = new Button(name + ".Reset", new Label(name + ".Reset", buttonFont, resetText)).addAction(this::resetWorld); - content.addChild(resetButton); + buttonContent.addChild(resetButton); updateResetButton(); MutableString quitText = new MutableStringLocalized("Layer" + name + ".Quit"); - content.addChild(new Button(name + "Quit", new Label(name + ".Quit", buttonFont, quitText)).addAction(b -> { + buttonContent.addChild(new Button(name + "Quit", new Label(name + ".Quit", buttonFont, quitText)).addAction(b -> { System.exit(0); })); - content.addChild(new CubeComponent(name+".Cube")); - + content.addChild(buttonContent); getRoot().addChild(content); + buttonContent.setPreferredSize(500, 1000); + + CubeComponent cube = new CubeComponent(name+".Cube"); + + getRoot().addChild(cube); } private void updateResetButton() { diff --git a/src/main/resources/assets/textures/title/progressia.png b/src/main/resources/assets/textures/title/progressia.png index 7d8ff7c986e924b94554e1efe928561b40a41c20..1506b138f3ba6e2ae81338a74f283934af53432c 100644 GIT binary patch literal 11920 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 literal 2248 zcmW-ic~}$Y7RCc%lf}?5?37p&Gy01bkq z3Zg*}H%iLVLQzpOh*yONu1Z8KZKxKlwhvy{Td4ON|M(@DyyyGQH|M-_Mv;^lYh&qR zNg|PK;`lKl5{Zm~-#iO4_`ISzp$1<@rJ~qqQs=1Kb8um@m6O0Bk+esw7PgoIO^_6y z%yko$!8_0Ul$-$pUh*1R_Az5~OP``szNH$Mggg@)DioPw>EUM|xq-rpvUF$IM@c-T z`;Cmru1JYX{5H=`U)u(7DE^Vl(hr&1I{Fl~tZIF>;^gCi!`J-2(vmH#Lt1|IE;wms z=ii2Zda#l7!F(R9Kr0sP}-tNHJXl!EU#6yGClTf%Q=-8N7))5<@5O&=dv|79z zRg#R1X<0{I5(^j=mz{;V^qhvqNV^$O#3e<1Nhyi6^d^DPt-=mDiDYgb7sE;3x%t)f z?>mw+ZEwwIF!kJ+6$o_Q!3yCZF-+SE#|jSK`RS9C5tXsybv@&KE$zRRGr!?4gDd_z zwMh5fI`*ic!QHOxUT*(3_V49S-i8kUaj4m@jCNdAa6|v_o}M>g`u@(#6t~%O*He!l zz5>_eMtSaJvz|9q(|`V_uIfJXRlEUL*~I4Rxc3=%|M+?3M!WAC8hYO@8K8_M{^VJj z^|!}RSPI2Ze||BQx7$J{HSek^vz290qN++SdEgAGxwhtw)9`VRnW3O5yPf;me79Y@ z*K&i*Unh$X|C*g+CrcU2GeF(FNl>OkcT&BiI#KIaY>BN``~$U7TMNu`P8(s-^apZzbqFNOx#fcYtwGfG&`G$XxEjcBZ<2H?wW)~TUy z9gZRLG;5*OcRU85(umL`EJFDRe$C{y=^L`o=o{u@5r4KH_c&e#NgNJ{BBmR%PwN}! zcnFKlEB`!kK*2&3TE=#!Pn%xrRO_`t zg8|6gR^2bqV~1{0p0t{$Vj*i)tl~Xbiej7*!fJ2R_c&F1rE99Z(hV=6d(@laJjq?5 zHk0kZ-5(Ri-LLCsOnDEV(|4)W=uH&Hs0tJiEN)t3__Pmwf@WdmN)?RJ1q_TnDlE2C zlw+|=p$ZS#L=!Zb4m!P;Ge4)S+k7Kr0)i%wT&d2dFUMzpOrG%9^DZPs?B8Mj{KLi2 z;fvApEAwbq0_s8o@n-eO3!+N$Sai68os)>2^IBX#ePjAQeXsqDF6hKjgYJp@1TBm0kN4>~+UW)8a!UYc zgGybG#)2fH`!(Ze1{SFZW4t4_h=8Y+6v_u}2IeB<1vr<*J3CUZuJ#fW zvPv@noN%vjmy~JG?F7eb0v5%0LXW6oL@soL?(~b2CDyU3K(-zCDj^4QYw&Eylxl}S zd?1I3lT)pEh!^qj5b`Q+Kb{J4ssBlW;)vB^NP01Y-A*OqvyXnGoXxkxFho_xTY zciL<=wcKsi`|O8bWAQJCLqrD+SFhlSd#YrEeoz!1GO;xjzZ6|e`LnUdN>+E+@Zw>P z+wA(*4<8-%v42x3sfm2#-Lnhjy~u*4Od5?fw0{&B7Sm_lE?VMgGru@}XUUZWVKZP1 zSmGCS7|uaNE?AH<8t@Nvkm?WGcgMk;8@CI_n80$(0dc*6Db5ox)7&6$Zw;)4+hOfo z0>aetwKT1~IH|r~p&8ON0fM>xIx60&t0Fe_!zz`QfU96OSV7LzAEaRYQ_VW@5P}JW+q|yiA0p>%XI9V|GxdsjBEilM#fmv`;CxjkQw-ALnjy~3?(8q=asD{cJUpB8H z)^ElVlqrC2agSh-KTee`bJULoK*o2?iXH@xjv`dO;}W9_FOBHwI^