4747import net .querz .nbt .tag .ListTag ;
4848import net .querz .nbt .io .NBTUtil ;
4949import net .querz .nbt .tag .StringTag ;
50-
5150import java .io .IOException ;
5251import java .util .ArrayList ;
5352import 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