Update connections after a full-level transform

This commit is contained in:
Eevee (Evelyn Woods) 2024-04-22 10:09:04 -06:00
parent 0a5e5c66c2
commit 20e2b64390

View File

@ -1052,12 +1052,12 @@ export class Editor extends PrimaryView {
// Load connections
// TODO what if the source tile is not connectable?
this.connections_g.textContent = '';
this.connections_arrows = {};
this.connections_arrows = new Map;
for (let [src, dest] of this.stored_level.custom_connections) {
let [sx, sy] = this.scalar_to_coords(src);
let [dx, dy] = this.scalar_to_coords(dest);
let arrow = new SVGConnection(sx, sy, dx, dy);
this.connections_arrows[src] = arrow;
this.connections_arrows.set(src, arrow);
arrow.element.setAttribute(
'data-source', this.stored_level.linear_cells[src][LAYERS.terrain].type.name);
this.connections_g.append(arrow.element);
@ -1700,6 +1700,25 @@ export class Editor extends PrimaryView {
}
this.stored_level.linear_cells = new_cells;
// Update all the coordinates in explicit connections
let old_connections = this.stored_level.custom_connections;
let old_arrows = this.connections_arrows;
this.stored_level.custom_connections = new Map;
this.connections_arrows = new Map;
for (let [old_src, old_dest] of old_connections) {
let [sx, sy] = convert_coords(old_src % old_w, Math.floor(old_src / old_w), w, h);
let [dx, dy] = convert_coords(old_dest % old_w, Math.floor(old_dest / old_w), w, h);
let new_src = this.coords_to_scalar(sx, sy);
let new_dest = this.coords_to_scalar(dx, dy);
this.stored_level.custom_connections.set(new_src, new_dest);
let arrow = old_arrows.get(old_src);
arrow.set_source(sx, sy);
arrow.set_dest(dx, dy);
this.connections_arrows.set(new_src, arrow);
}
// All the implicit connections are nonsense now, so fuck it
this.recreate_implicit_connections();
}
rotate_level_right() {
@ -1843,27 +1862,27 @@ export class Editor extends PrimaryView {
}
_set_custom_connection(src, dest) {
if ((dest ?? null) === null) {
if (this.connections_arrows[src]) {
this.connections_arrows[src].element.remove();
if (this.connections_arrows.has(src)) {
this.connections_arrows.get(src).element.remove();
}
this.stored_level.custom_connections.delete(src)
delete this.connections_arrows[src];
this.connections_arrows.delete(src);
}
else {
this.stored_level.custom_connections.set(src, dest);
if (this.connections_arrows[src]) {
this.connections_arrows[src].set_dest(
if (this.connections_arrows.has(src)) {
this.connections_arrows.get(src).set_dest(
...this.scalar_to_coords(dest));
}
else {
let arrow = new SVGConnection(
...this.scalar_to_coords(src),
...this.scalar_to_coords(dest));
this.connections_arrows[src] = arrow;
this.connections_arrows.set(src, arrow);
this.connections_g.append(arrow.element);
}
this.connections_arrows[src].element.setAttribute(
this.connections_arrows.get(src).element.setAttribute(
'data-source', this.stored_level.linear_cells[src][LAYERS.terrain].type.name);
}
}