Fixed mirror filter not accoounting for data

This commit is contained in:
Anuken
2025-08-10 11:07:01 +02:00
parent a6e8683b45
commit dac299bf25
5 changed files with 39 additions and 10 deletions

View File

@@ -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;

View File

@@ -151,6 +151,7 @@ public class MapGenerateDialog extends BaseDialog{
public void applyToEditor(Seq<GenerateFilter> 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);
});

View File

@@ -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){

View File

@@ -47,6 +47,7 @@ public class MirrorFilter extends GenerateFilter{
in.block = tile.block();
}
in.overlay = tile.overlay();
in.packedData = tile.getPackedData();
}
}

View File

@@ -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;
}
}