From dac299bf253da72a0a6d1ab44666d6c8b298cc36 Mon Sep 17 00:00:00 2001 From: Anuken Date: Sun, 10 Aug 2025 11:07:01 +0200 Subject: [PATCH] Fixed mirror filter not accoounting for data --- core/src/mindustry/core/Control.java | 7 +++++-- .../src/mindustry/editor/MapGenerateDialog.java | 9 ++++++--- .../mindustry/maps/filters/GenerateFilter.java | 15 ++++++++++----- .../mindustry/maps/filters/MirrorFilter.java | 1 + core/src/mindustry/world/Tile.java | 17 +++++++++++++++++ 5 files changed, 39 insertions(+), 10 deletions(-) diff --git a/core/src/mindustry/core/Control.java b/core/src/mindustry/core/Control.java index 539bac203b..5e72549a30 100644 --- a/core/src/mindustry/core/Control.java +++ b/core/src/mindustry/core/Control.java @@ -313,11 +313,14 @@ public class Control implements ApplicationListener, Loadable{ "lastBuild", 0 ); - createPlayer(); - saves.load(); } + @Override + public void loadSync(){ + createPlayer(); + } + /** Automatically unlocks things with no requirements and no locked parents. */ public void checkAutoUnlocks(){ if(net.client()) return; diff --git a/core/src/mindustry/editor/MapGenerateDialog.java b/core/src/mindustry/editor/MapGenerateDialog.java index 19d435a6ac..1527053bee 100644 --- a/core/src/mindustry/editor/MapGenerateDialog.java +++ b/core/src/mindustry/editor/MapGenerateDialog.java @@ -151,6 +151,7 @@ public class MapGenerateDialog extends BaseDialog{ public void applyToEditor(Seq filters){ //writeback buffer long[] writeTiles = new long[editor.width() * editor.height()]; + long[] writeData = new long[writeTiles.length]; for(GenerateFilter filter : filters){ input.begin(editor.width(), editor.height(), editor::tile); @@ -158,10 +159,10 @@ public class MapGenerateDialog extends BaseDialog{ //write to buffer for(int x = 0; x < editor.width(); x++){ for(int y = 0; y < editor.height(); y++){ - Tile tile = editor.tile(x, y); - input.set(x, y, tile.block(), tile.floor(), tile.overlay()); + input.set(editor.tile(x, y)); filter.apply(input); writeTiles[x + y*world.width()] = PackTile.get(input.block.id, input.floor.id, input.overlay.id); + writeData[x + y*world.width()] = input.packedData; } } @@ -178,6 +179,8 @@ public class MapGenerateDialog extends BaseDialog{ tile.setBlock(block); } + tile.setPackedData(writeData[i]); + tile.setFloor((Floor)floor); tile.setOverlay(overlay); } @@ -431,7 +434,7 @@ public class MapGenerateDialog extends BaseDialog{ pixmap.each((px, py) -> { int x = px * scaling, y = py * scaling; long tile = buffer1[px + py * w]; - input.set(x, y, content.block(PackTile.block(tile)), content.block(PackTile.floor(tile)), content.block(PackTile.overlay(tile))); + input.set(x, y, content.block(PackTile.block(tile)), content.block(PackTile.floor(tile)), content.block(PackTile.overlay(tile)), 0); filter.apply(input); buffer2[px + py * w] = PackTile.get(input.block.id, input.floor.id, input.overlay.id); }); diff --git a/core/src/mindustry/maps/filters/GenerateFilter.java b/core/src/mindustry/maps/filters/GenerateFilter.java index 9ce29045f6..33ae5c3208 100644 --- a/core/src/mindustry/maps/filters/GenerateFilter.java +++ b/core/src/mindustry/maps/filters/GenerateFilter.java @@ -22,9 +22,7 @@ public abstract class GenerateFilter implements Cloneable{ long[] buffer = new long[tiles.width * tiles.height]; for(int i = 0; i < tiles.width * tiles.height; i++){ - Tile tile = tiles.geti(i); - - in.set(tile.x, tile.y, tile.block(), tile.floor(), tile.overlay()); + in.set(tiles.geti(i)); apply(in); buffer[i] = PackTile.get(in.block.id, in.floor.id, in.overlay.id); @@ -48,7 +46,7 @@ public abstract class GenerateFilter implements Cloneable{ } }else{ for(Tile tile : tiles){ - in.set(tile.x, tile.y, tile.block(), tile.floor(), tile.overlay()); + in.set(tile); apply(in); if(in.floor instanceof Floor floor){ @@ -59,6 +57,7 @@ public abstract class GenerateFilter implements Cloneable{ if(!tile.block().synthetic() && !in.block.synthetic()){ tile.setBlock(in.block); } + tile.setPackedData(in.packedData); } } } @@ -148,15 +147,21 @@ public abstract class GenerateFilter implements Cloneable{ /** output parameters */ public Block floor, block, overlay; + public long packedData; TileProvider buffer; - public void set(int x, int y, Block block, Block floor, Block overlay){ + public void set(int x, int y, Block block, Block floor, Block overlay, long packedData){ this.floor = floor; this.block = block; this.overlay = overlay; this.x = x; this.y = y; + this.packedData = packedData; + } + + public void set(Tile tile){ + set(tile.x, tile.y, tile.block(), tile.floor(), tile.overlay(), tile.getPackedData()); } public void begin(int width, int height, TileProvider buffer){ diff --git a/core/src/mindustry/maps/filters/MirrorFilter.java b/core/src/mindustry/maps/filters/MirrorFilter.java index f37dcf14b3..0bc62f80a0 100644 --- a/core/src/mindustry/maps/filters/MirrorFilter.java +++ b/core/src/mindustry/maps/filters/MirrorFilter.java @@ -47,6 +47,7 @@ public class MirrorFilter extends GenerateFilter{ in.block = tile.block(); } in.overlay = tile.overlay(); + in.packedData = tile.getPackedData(); } } diff --git a/core/src/mindustry/world/Tile.java b/core/src/mindustry/world/Tile.java index 45f8ecfa93..78f5cdb1cf 100644 --- a/core/src/mindustry/world/Tile.java +++ b/core/src/mindustry/world/Tile.java @@ -683,6 +683,17 @@ public class Tile implements Position, QuadTreeObject, Displayable{ } } + public long getPackedData(){ + return PackedTileData.get(extraData, data, floorData, overlayData); + } + + public void setPackedData(long packed){ + extraData = PackedTileData.extraData(packed); + data = PackedTileData.data(packed); + floorData = PackedTileData.floorData(packed); + overlayData = PackedTileData.overlayData(packed); + } + @Override public void display(Table table){ @@ -809,4 +820,10 @@ public class Tile implements Position, QuadTreeObject, Displayable{ } } } + + @Struct + class PackedTileDataStruct{ + int extraData; + byte data, floorData, overlayData; + } }