fix image deletion makes other undos impossible
This commit is contained in:
parent
c8c3b79ac2
commit
0b36b71b86
2 changed files with 21 additions and 5 deletions
|
@ -418,7 +418,7 @@ pub fn inspector_sys(
|
|||
std::mem::swap(&mut nid, &mut *id);
|
||||
let transform = transforms.get(e).map(|t| *t).unwrap_or_default();
|
||||
let handle = image_handles.get(e).unwrap().clone();
|
||||
undo.push(UndoItem::DeleteImage { id: nid, transform: transform, handle });
|
||||
undo.push(UndoItem::DeleteImage { id: nid, transform: transform, handle, old_entity: e });
|
||||
}
|
||||
coms.entity(e).despawn_recursive();
|
||||
**selected = None;
|
||||
|
|
24
src/undo.rs
24
src/undo.rs
|
@ -16,7 +16,7 @@ pub enum UndoItem {
|
|||
ChangeZ { entity: Entity, from: f32, to: f32 },
|
||||
ReScale { entity: Entity, from: Vec2, to: Vec2 },
|
||||
CreateImage { entity: Entity },
|
||||
DeleteImage { id: ImageData, transform: Transform, handle: Handle<Image> },
|
||||
DeleteImage { id: ImageData, transform: Transform, handle: Handle<Image>, old_entity: Entity },
|
||||
}
|
||||
pub struct UndoStack {
|
||||
items: Vec<UndoItem>,
|
||||
|
@ -170,11 +170,11 @@ pub fn undo_redo_sys(
|
|||
let mut nid = ImageData::default();
|
||||
std::mem::swap(&mut *id, &mut nid);
|
||||
|
||||
coms.entity(*entity).despawn();
|
||||
*item = UndoItem::DeleteImage { id: nid, transform, handle: handle.clone() };
|
||||
coms.entity(*entity).despawn_recursive();
|
||||
*item = UndoItem::DeleteImage { id: nid, transform, handle: handle.clone(), old_entity: *entity };
|
||||
}
|
||||
},
|
||||
UndoItem::DeleteImage { transform, handle, id } => {
|
||||
UndoItem::DeleteImage { transform, handle, id, old_entity } => {
|
||||
let mut nid = ImageData::default();
|
||||
std::mem::swap(id, &mut nid);
|
||||
|
||||
|
@ -185,7 +185,23 @@ pub fn undo_redo_sys(
|
|||
})
|
||||
.insert(nid).id();
|
||||
|
||||
let oe = *old_entity;
|
||||
*item = UndoItem::CreateImage { entity: e };
|
||||
|
||||
// Update each item with the same entity id
|
||||
let f = |ne: &mut Entity| { if *ne == oe { *ne = e; }};
|
||||
for i in stack.items.iter_mut() {
|
||||
match i {
|
||||
UndoItem::CreateShape { entity } => f(entity),
|
||||
UndoItem::MoveItem { shape, .. } => f(shape),
|
||||
UndoItem::Rotate { entity, .. } => f(entity),
|
||||
UndoItem::NameChange { entity, .. } => f(entity),
|
||||
UndoItem::NoteChange { entity, .. } => f(entity),
|
||||
UndoItem::ChangeZ { entity, .. } => f(entity),
|
||||
UndoItem::ReScale { entity, .. } => f(entity),
|
||||
_ => {},
|
||||
}
|
||||
}
|
||||
},
|
||||
UndoItem::NoteChange { entity, from } => {
|
||||
if let Ok(mut sd) = shapes.get_mut(*entity) {
|
||||
|
|
Loading…
Reference in a new issue