Skip to content

Commit e23c419

Browse files
committed
banner locations are not updated properly when changing center and scale values
1 parent ec71504 commit e23c419

4 files changed

Lines changed: 76 additions & 22 deletions

File tree

src/main/java/net/querz/mcmapviewer/InfoPanel.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@
1111
import javafx.scene.layout.GridPane;
1212
import javafx.scene.layout.HBox;
1313
import javafx.util.StringConverter;
14+
import javafx.util.converter.IntegerStringConverter;
1415
import javafx.util.converter.NumberStringConverter;
1516
import net.querz.mcmapviewer.map.Dimension;
1617
import net.querz.mcmapviewer.map.MapView;
1718
import net.querz.mcmapviewer.map.Scale;
18-
1919
import java.text.NumberFormat;
2020

2121
public class InfoPanel extends BorderPane {
@@ -91,12 +91,15 @@ public InfoPanel(MapView mapView) {
9191
trackingPositionField.selectedProperty().bindBidirectional(mapView.trackingPositionProperty());
9292
unlimitedTrackingField.selectedProperty().bindBidirectional(mapView.unlimitedTrackingProperty());
9393
lockedField.selectedProperty().bindBidirectional(mapView.lockedProperty());
94-
NumberFormat format = NumberFormat.getIntegerInstance();
95-
format.setGroupingUsed(false);
96-
StringConverter<Number> converter = new NumberStringConverter(format);
94+
95+
StringConverter<Integer> converter = new IntegerStringConverter();
9796
Bindings.bindBidirectional(xCenterField.textProperty(), mapView.xCenterProperty(), converter);
9897
Bindings.bindBidirectional(zCenterField.textProperty(), mapView.zCenterProperty(), converter);
99-
Bindings.bindBidirectional(dataVersionField.textProperty(), mapView.dataVersionProperty(), converter);
98+
99+
NumberFormat format = NumberFormat.getIntegerInstance();
100+
format.setGroupingUsed(false);
101+
StringConverter<Number> numberConverter = new NumberStringConverter(format);
102+
Bindings.bindBidirectional(dataVersionField.textProperty(), mapView.dataVersionProperty(), numberConverter);
100103

101104
scaleField.valueProperty().addListener((v, o, n) -> {if (!loading) mapView.getMapFile().setEdited(true);});
102105
dimensionField.valueProperty().addListener((v, o, n) -> {if (!loading) mapView.getMapFile().setEdited(true);});

src/main/java/net/querz/mcmapviewer/Window.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@
66
import javafx.scene.layout.BorderPane;
77
import javafx.stage.Stage;
88
import net.querz.mcmapviewer.map.MapView;
9-
10-
import java.io.IOException;
119
import java.net.URL;
1210

1311
public class Window extends Application {

src/main/java/net/querz/mcmapviewer/map/MapIconData.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
package net.querz.mcmapviewer.map;
22

33
import javafx.scene.text.Text;
4-
import net.querz.mcmapviewer.point.Point2i;
54
import net.querz.mcmapviewer.point.Point3i;
5+
import net.querz.nbt.io.SNBTUtil;
66
import net.querz.nbt.tag.CompoundTag;
77
import org.json.JSONArray;
88
import org.json.JSONObject;
9+
import java.io.IOException;
910
import java.util.ArrayList;
1011
import java.util.List;
1112

@@ -112,16 +113,21 @@ private void addTextElement(JSONObject map, List<Text> textElements) {
112113
textElements.add(textElement);
113114
}
114115

115-
public CompoundTag toTag(Point2i offset) {
116+
public CompoundTag toTag() {
116117
CompoundTag icon = new CompoundTag();
117118

118119
icon.putString("Color", color.getName());
119120
icon.putString("Name", name);
120121
CompoundTag pos = new CompoundTag();
121-
pos.putInt("X", this.pos.getX() + offset.getX());
122+
pos.putInt("X", this.pos.getX());
122123
pos.putInt("Y", this.pos.getY());
123-
pos.putInt("Z", this.pos.getZ() + offset.getZ());
124+
pos.putInt("Z", this.pos.getZ());
124125
icon.put("Pos", pos);
126+
try {
127+
System.out.println("saving banner pos: " + SNBTUtil.toSNBT(pos));
128+
} catch (IOException e) {
129+
e.printStackTrace();
130+
}
125131
return icon;
126132
}
127133
}

src/main/java/net/querz/mcmapviewer/map/MapView.java

Lines changed: 58 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@
4747
import net.querz.nbt.tag.ListTag;
4848
import net.querz.nbt.io.NBTUtil;
4949
import net.querz.nbt.tag.StringTag;
50-
5150
import java.io.IOException;
5251
import java.util.ArrayList;
5352
import java.util.List;
@@ -70,8 +69,8 @@ public class MapView extends StackPane {
7069
private static Image backgroundImage = FileHelper.getIconFromResources("map_background");
7170

7271
private IntegerProperty dataVersion = new SimpleIntegerProperty();
73-
private IntegerProperty xCenter = new SimpleIntegerProperty();
74-
private IntegerProperty zCenter = new SimpleIntegerProperty();
72+
private ObjectProperty<Integer> xCenter = new SimpleObjectProperty<>();
73+
private ObjectProperty<Integer> zCenter = new SimpleObjectProperty<>();
7574
private ObjectProperty<Scale> scale = new SimpleObjectProperty<>();
7675
private ObjectProperty<Dimension> dimension = new SimpleObjectProperty<>();
7776
private BooleanProperty trackingPosition = new SimpleBooleanProperty();
@@ -110,6 +109,54 @@ public MapView() {
110109

111110
getChildren().addAll(background, canvas, overlay);
112111

112+
scaleProperty().addListener((v, o, n) -> {
113+
if (o == null || n == null) {
114+
return;
115+
}
116+
System.out.println("changed scale from " + o + " to " + n);
117+
// 1 --> 2; meaning we will multiply pos by 2
118+
// 2 --> 1; meaning we will multiply pos by 0.5;
119+
int diff = n.getId() - o.getId();
120+
double change = Math.pow(2, diff);
121+
for (MapIconData banner : banners) {
122+
Point3i pos = banner.getPos();
123+
124+
Point3i relativePos = pos.sub(xCenter.getValue(), 0, zCenter.getValue());
125+
126+
relativePos.setX((int) (relativePos.getX() * change));
127+
relativePos.setZ((int) (relativePos.getZ() * change));
128+
129+
banner.setPos(relativePos.add(xCenter.getValue(), 0, zCenter.getValue()));
130+
}
131+
});
132+
133+
xCenterProperty().addListener((v, o, n) -> {
134+
if (o == null || n == null) {
135+
return;
136+
}
137+
138+
int diff = n.intValue() - o.intValue();
139+
for (MapIconData banner : banners) {
140+
banner.getPos().setX(banner.getPos().getX() + diff);
141+
}
142+
143+
System.out.println("changed xCenter from " + o + " to " + n);
144+
145+
});
146+
zCenterProperty().addListener((v, o, n) -> {
147+
if (o == null || n == null) {
148+
return;
149+
}
150+
151+
int diff = n.intValue() - o.intValue();
152+
for (MapIconData banner : banners) {
153+
banner.getPos().setZ(banner.getPos().getZ() + diff);
154+
}
155+
156+
System.out.println("changed zCenter from " + o + " to " + n);
157+
158+
});
159+
113160
updateBackground();
114161
}
115162

@@ -322,9 +369,9 @@ public void loadMapFile(EditableFile mapFile) {
322369
public void clear() {
323370
dataVersion.setValue(0);
324371
imageData = null;
325-
xCenter.setValue(0);
326-
zCenter.setValue(0);
327-
scale.setValue(Scale.SCALE_0);
372+
xCenter.setValue(null);
373+
zCenter.setValue(null);
374+
scale.setValue(null);
328375
dimension.setValue(Dimension.OVERWORLD);
329376
trackingPosition.setValue(false);
330377
unlimitedTracking.setValue(false);
@@ -393,10 +440,8 @@ public void writeFile() throws IOException {
393440
data.putString("dimension", dimension.getValue().getTextID());
394441
data.putByteArray("colors", imageData);
395442

396-
Point2i offset = new Point2i(xCenter.get() - data.getInt("xCenter"), zCenter.get() - data.getInt("zCenter"));
397-
398443
ListTag<CompoundTag> icons = new ListTag<>(CompoundTag.class);
399-
banners.forEach(b -> icons.add(b.toTag(offset)));
444+
banners.forEach(b -> icons.add(b.toTag()));
400445
data.put("banners", icons);
401446

402447
data.putInt("xCenter", xCenter.getValue());
@@ -426,6 +471,8 @@ public void update() {
426471
Point2i nil = new Point2i(xCenter.getValue(), zCenter.getValue())
427472
.sub(IMAGE_WIDTH * (int) Math.pow(2, scale.getValue().getId()) / 2, IMAGE_HEIGHT * (int) Math.pow(2, scale.getValue().getId()) / 2);
428473

474+
System.out.println("nil: " + nil);
475+
429476
for (MapIconData banner : banners) {
430477

431478
Point2i pos = banner.getPos().toPoint2i()
@@ -564,7 +611,7 @@ public int getxCenter() {
564611
return xCenter.get();
565612
}
566613

567-
public IntegerProperty xCenterProperty() {
614+
public ObjectProperty<Integer> xCenterProperty() {
568615
return xCenter;
569616
}
570617

@@ -576,7 +623,7 @@ public int getzCenter() {
576623
return zCenter.get();
577624
}
578625

579-
public IntegerProperty zCenterProperty() {
626+
public ObjectProperty<Integer> zCenterProperty() {
580627
return zCenter;
581628
}
582629

0 commit comments

Comments
 (0)