From a5e877028e7cad3eb4da3c21aecd4be9d566af4e Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 1 Sep 2017 15:59:01 -0400 Subject: [PATCH] Fixed a crash related to tile entities not being removed on save load --- core/src/io/anuke/mindustry/World.java | 36 ++++++++++++++++++++++--- desktop/mindustry-saves/0.mins | Bin 3156 -> 1461 bytes 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/core/src/io/anuke/mindustry/World.java b/core/src/io/anuke/mindustry/World.java index 601cff27c7..7cc701edad 100644 --- a/core/src/io/anuke/mindustry/World.java +++ b/core/src/io/anuke/mindustry/World.java @@ -88,6 +88,26 @@ public class World{ } } + private static void createTiles(){ + for(int x = 0; x < tiles.length; x ++){ + for(int y = 0; y < tiles[0].length; y ++){ + if(tiles[x][y] == null){ + tiles[x][y] = new Tile(x, y, Blocks.stone); + } + } + } + } + + private static void clearTileEntities(){ + for(int x = 0; x < tiles.length; x ++){ + for(int y = 0; y < tiles[0].length; y ++){ + if(tiles[x][y] != null && tiles[x][y].entity != null){ + tiles[x][y].entity.remove(); + } + } + } + } + public static void loadMap(int id){ loadMap(id, MathUtils.random(0, 99999)); } @@ -99,13 +119,21 @@ public class World{ int size = mapPixmaps[id].getWidth(); worldsize = size; pixsize = worldsize*tilesize; - tiles = new Tile[worldsize][worldsize]; currentMap = id; - for(int x = 0; x < worldsize; x ++){ - for(int y = 0; y < worldsize; y ++){ - tiles[x][y] = new Tile(x, y, Blocks.stone); + if(tiles != null){ + clearTileEntities(); + + if(tiles.length != worldsize || tiles[0].length != worldsize){ + tiles = new Tile[worldsize][worldsize]; } + + createTiles(); + }else{ + + tiles = new Tile[worldsize][worldsize]; + + createTiles(); } Entities.resizeTree(0, 0, pixsize, pixsize); diff --git a/desktop/mindustry-saves/0.mins b/desktop/mindustry-saves/0.mins index c9487e3939b200a8a55e86123084c8e1bb126ee6..a8f92b17b00a5b6c10e2a2d930cdb604bc289d6b 100644 GIT binary patch literal 1461 zcmZ9L%WG3X6vj`i;se{{ClKIbp+Fh#UIEHgh*))labiq~PR7$9$; zV-q^NZX${&0G$f_c)^&`ZImkt0iv!uD0eG}Nr_=7rV$0QfPw+{E==?uAeaNh4J2m7 z@a~arL~aitX29MG6Dafd@XAgvqOby+tT7b>)~s|m3K&Qz@b&t4 zO2m8F3fzg$iQ#Blp8%WKLqOz_0GB&<0}}m+oX3FZ9zaQf%b6!IJ$nK6Q~us5E;G3) zXF#SA8T8_Ow5HBhODUF=lSn^f{6!83@v%blqL){(Ycg$K#n#e_<%-i(6s4^&_1$>! zm#1CxJjfQMngG8;S%FP(5K(ABcb7p9Z4Y{<-qi7?NnM1OZ5@);7(zpy$3xF#>N&No zjTPl1|4-hwsn|kObviXp)x-Q!O;4=XtW4EOvL}g#sd15J@6(mbR6oM)rj^!ddxEMX zWIw0hC3>|)Goy6r7LmJr>P63~?fu@VH+B9?rAIu(76s&5UkdO=>^K0h4+7lR0^CV1 z0n!F4htLV~3uq^7plrZ;izsFwc@)Mv28g@^WYq96I*n<2kH|d^h#F}BV9ZAWerk(> z)F+tW33Q4lVM+$vVVFV#;Qx$r`v^?tiva%@b6-vL4W{+G0B^eSG@|GaL>tCoDhBcs RFxfNc^zx5KZ>;i5;UBbAd=UTu literal 3156 zcmZuzTWnNS6kXGIj5BkF&P;C~Q~RK$v?Z;yls@D`Y@`Ar3Mit0^^p)kG{*P?re`o3 zqM`{=LrBoXM3I;n`O)}+2?hxdMIIFqC>GQYG4aD_3?C-$eb^_Reec|llXcf#YwdmR zJ$G6Fr9f;${n*3}041Yi*QZ7^FIC^QbHP!%e-dR>t~^b!VowR9nA{SB18>nX2`sGU zI|B@+86<##jDXH811fdC%ODB#cxIr684`Ey6);jKpf4vN`JRB@_XX6n3TX2n+vZCi z)P5+;d=HvGVurgrKurhRnW4dQ`=!+6L5~BZ>7BzR0_`0PNL+tFnA}_e^<4rQJ`vE- z&49#p^MslEsW6Sb!c-p=kn^B-J~K37Vu66<=b}k};h8}JeM3?*!@@M*A)smz1L{8O zkT7Y-P;#vYIbZ7cOzT(Ts<=~JDF-Mgdss>X9t=A`f$6VfRIBGYKcLKFzRmLDo>vU} zEU`}1NF>_0Hv`yNez{%MwPEJM4iu zCQQq50YmpNpo!y4*&5JC=$>x;gt|@WYC>0&x|-BgqpRj-mE$|ywExjNUP^avie*f> zPuRUQYr~(=NpqcN&U7pWlg+*5$m3jO+fx~(1 z+YY;nx`gdz)MZ7qi=zs<&^+dp?ox)$7LyhSEp}N-4qHeazb~5ny-umX5{p*yTTEGe zY4HwcIiGGHU+Ijz_*WG_9ib9YRU)cNMpenE%0yM>rmEm@JZI6d9p&3_?Nuz_%o}){ zH{hLln0c^RIyn6@}%@d{h+=d!j0GnN)A@-=XVS2}j)fvDb`)h$XfY>~CNXeqyl zJ_zY4d5At_cbd(rBKhZZei@#y(qcEaC}Igh77913izH9#d?s=VC&OaV$i@z*R zS-i;&3S1NtgbYMAo~MO>PkJ2SSN+gTCn}jAb(2zTvS@crkSdU}imxD~C(5kVi5GNY z467`SszpIaL@^^5XyH-K!#eLLomYyL7XMg$%&A%$grt;b*6FZ|I;;dYUPt8+C23s{ z(os^wI$GR(kLbutI@1|5OO<(d6kLrlaIwFR}mdskzaM_#JYx9&gmtd>K zG4_Xa8?^0;w#D!_d$g$eito8mn|}_Qo7t>IO&h)WF>RjKW>TfJqHUU;^v|Uk*Uqa^ zr&i>~*-3{e`?!EE50bwKGslDYQ_Rpe(dWV7Z^GQRi2+T}|GO~54p4H{bzyFQTEH!T V2