editor fixes and undo/redo

This commit is contained in:
Emmaline Autumn 2025-02-10 04:41:23 -07:00
parent 69475b1bd8
commit e3194e45ff
2 changed files with 44 additions and 6 deletions

View File

@ -2043,8 +2043,7 @@
this.ghostSegment = void 0;
this.closestEnd = void 0;
} else if (this.selectedSegment) {
track2.registerSegment(this.selectedSegment);
this.selectedSegment = new StraightTrack();
track2.registerSegment(this.selectedSegment.cleanCopy());
} else {
this.selectedSegment = void 0;
}
@ -2056,13 +2055,32 @@
this.ghostRotated = false;
this.ghostSegment = void 0;
});
this.currentSegment = track.lastSegment;
inputManager2.onKey("z", () => {
if (inputManager2.getKeyState("Control")) {
const segment = track.lastSegment;
if (!segment) return;
this.redoBuffer.push(segment);
if (this.redoBuffer.length > 100) {
this.redoBuffer.shift();
}
track.unregisterSegment(segment);
}
});
inputManager2.onKey("y", () => {
if (inputManager2.getKeyState("Control")) {
const segment = this.redoBuffer.pop();
if (!segment) return;
track.registerSegment(segment);
}
});
}
redoBuffer = [];
stop() {
const inputManager2 = getContextItem("inputManager");
inputManager2.offKey("e");
inputManager2.offKey("w");
inputManager2.offKey("Escape");
inputManager2.offMouse("left");
if (this.heldEvents.size > 0) {
for (const [key, cb] of this.heldEvents) {
if (cb) {

View File

@ -324,8 +324,8 @@ export class EditTrackState extends State<States> {
this.ghostSegment = undefined;
this.closestEnd = undefined;
} else if (this.selectedSegment) {
track.registerSegment(this.selectedSegment);
this.selectedSegment = new StraightTrack();
track.registerSegment(this.selectedSegment.cleanCopy());
// this.selectedSegment = new StraightTrack();
} else {
this.selectedSegment = undefined;
}
@ -355,16 +355,36 @@ export class EditTrackState extends State<States> {
this.ghostSegment = undefined;
});
this.currentSegment = track.lastSegment;
// this.currentSegment = track.lastSegment;
inputManager.onKey("z", () => {
if (inputManager.getKeyState("Control")) {
const segment = track.lastSegment;
if (!segment) return;
this.redoBuffer.push(segment);
if (this.redoBuffer.length > 100) {
this.redoBuffer.shift();
}
track.unregisterSegment(segment);
}
});
inputManager.onKey("y", () => {
if (inputManager.getKeyState("Control")) {
const segment = this.redoBuffer.pop();
if (!segment) return;
track.registerSegment(segment);
}
});
// TODO
// Cache trains and save
}
redoBuffer: TrackSegment[] = [];
override stop(): void {
const inputManager = getContextItem<InputManager>("inputManager");
inputManager.offKey("e");
inputManager.offKey("w");
inputManager.offKey("Escape");
inputManager.offMouse("left");
if (this.heldEvents.size > 0) {
for (const [key, cb] of this.heldEvents) {
if (cb) {