mirror of
https://github.com/overte-org/overte.git
synced 2025-07-23 16:04:51 +02:00
fixed child of parent not being added when performing an undo
This commit is contained in:
parent
19b5e7cd86
commit
cb0e01bfa4
1 changed files with 74 additions and 14 deletions
|
@ -1027,19 +1027,76 @@ function selectAllEtitiesInCurrentSelectionBox(keepIfTouching) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function sortDeleteSelected (selected) {
|
||||||
|
var tempArray = selected;
|
||||||
|
var begin = 0;
|
||||||
|
while (begin < tempArray.length) {
|
||||||
|
var elementRemoved = false;
|
||||||
|
var next = begin + 1;
|
||||||
|
while (next < tempArray.length) {
|
||||||
|
var beginID = tempArray[begin];
|
||||||
|
var nextID = tempArray[next];
|
||||||
|
var beginProperties = Entities.getEntityProperties(beginID);
|
||||||
|
var nextProperties = Entities.getEntityProperties(nextID);
|
||||||
|
var nextParentID = nextProperties.parentID;
|
||||||
|
var beginParentID = beginProperties.parentID;
|
||||||
|
|
||||||
|
if (beginID == nextParentID) {
|
||||||
|
var temp = beginID;
|
||||||
|
tempArray[begin] = nextID
|
||||||
|
tempArray[next] = beginID
|
||||||
|
tempArray.splice(begin, 1);
|
||||||
|
elementRemoved = true;
|
||||||
|
break;
|
||||||
|
} else if (nextID == beginParentID) {
|
||||||
|
tempArray.splice(begin, 1);
|
||||||
|
elementRemoved = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
next++;
|
||||||
|
}
|
||||||
|
if (!elementRemoved) {
|
||||||
|
begin++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return tempArray;
|
||||||
|
}
|
||||||
|
|
||||||
|
function recursiveDelete(entities, list) {
|
||||||
|
var entitiesLength = entities.length;
|
||||||
|
for (var i = 0; i < entitiesLength; i++) {
|
||||||
|
var entityID = entities[i];
|
||||||
|
var children = Entities.getChildrenIDs(entityID);
|
||||||
|
var childList = []
|
||||||
|
recursiveDelete(children, childList);
|
||||||
|
var initialProperties = Entities.getEntityProperties(entityID);
|
||||||
|
list.push({
|
||||||
|
entityID: entityID,
|
||||||
|
properties: initialProperties,
|
||||||
|
children: childList
|
||||||
|
});
|
||||||
|
Entities.deleteEntity(entityID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function deleteSelectedEntities() {
|
function deleteSelectedEntities() {
|
||||||
if (SelectionManager.hasSelection()) {
|
if (SelectionManager.hasSelection()) {
|
||||||
selectedParticleEntity = 0;
|
selectedParticleEntity = 0;
|
||||||
particleExplorerTool.destroyWebView();
|
particleExplorerTool.destroyWebView();
|
||||||
SelectionManager.saveProperties();
|
SelectionManager.saveProperties();
|
||||||
var savedProperties = [];
|
var savedProperties = [];
|
||||||
for (var i = 0; i < selectionManager.selections.length; i++) {
|
var newSortedSelection = sortDeleteSelected(selectionManager.selections);
|
||||||
var entityID = SelectionManager.selections[i];
|
for (var i = 0; i < newSortedSelection.length; i++) {
|
||||||
|
var entityID = newSortedSelection[i];
|
||||||
var initialProperties = SelectionManager.savedProperties[entityID];
|
var initialProperties = SelectionManager.savedProperties[entityID];
|
||||||
SelectionManager.savedProperties[entityID];
|
var children = Entities.getChildrenIDs(entityID);
|
||||||
|
var childList = []
|
||||||
|
recursiveDelete(children, childList);
|
||||||
savedProperties.push({
|
savedProperties.push({
|
||||||
entityID: entityID,
|
entityID: entityID,
|
||||||
properties: initialProperties
|
properties: initialProperties,
|
||||||
|
children: childList
|
||||||
});
|
});
|
||||||
Entities.deleteEntity(entityID);
|
Entities.deleteEntity(entityID);
|
||||||
}
|
}
|
||||||
|
@ -1253,6 +1310,16 @@ Controller.keyReleaseEvent.connect(function (event) {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
function recursiveAdd(newParnetID, parentData) {
|
||||||
|
var children = parentData.children;
|
||||||
|
for (var i = 0; i < children.length; i++) {
|
||||||
|
var childProperties = children[i].properties;
|
||||||
|
childProperties.parentID = newParnetID;
|
||||||
|
var newChildID = Entities.addEntity(childProperties);
|
||||||
|
recursiveAdd(newChildID, children[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// When an entity has been deleted we need a way to "undo" this deletion. Because it's not currently
|
// When an entity has been deleted we need a way to "undo" this deletion. Because it's not currently
|
||||||
// possible to create an entity with a specific id, earlier undo commands to the deleted entity
|
// possible to create an entity with a specific id, earlier undo commands to the deleted entity
|
||||||
// will fail if there isn't a way to find the new entity id.
|
// will fail if there isn't a way to find the new entity id.
|
||||||
|
@ -1274,6 +1341,7 @@ function applyEntityProperties(data) {
|
||||||
entityID = data.createEntities[i].entityID;
|
entityID = data.createEntities[i].entityID;
|
||||||
var entityProperties = data.createEntities[i].properties;
|
var entityProperties = data.createEntities[i].properties;
|
||||||
var newEntityID = Entities.addEntity(entityProperties);
|
var newEntityID = Entities.addEntity(entityProperties);
|
||||||
|
recursiveAdd(newEntityID, data.createEntities[i]);
|
||||||
DELETED_ENTITY_MAP[entityID] = newEntityID;
|
DELETED_ENTITY_MAP[entityID] = newEntityID;
|
||||||
if (data.selectCreated) {
|
if (data.selectCreated) {
|
||||||
selectedEntityIDs.push(newEntityID);
|
selectedEntityIDs.push(newEntityID);
|
||||||
|
@ -1314,19 +1382,11 @@ function pushCommandForSelections(createdEntityData, deletedEntityData) {
|
||||||
}
|
}
|
||||||
undoData.setProperties.push({
|
undoData.setProperties.push({
|
||||||
entityID: entityID,
|
entityID: entityID,
|
||||||
properties: {
|
properties: initialProperties
|
||||||
position: initialProperties.position,
|
|
||||||
rotation: initialProperties.rotation,
|
|
||||||
dimensions: initialProperties.dimensions
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
redoData.setProperties.push({
|
redoData.setProperties.push({
|
||||||
entityID: entityID,
|
entityID: entityID,
|
||||||
properties: {
|
properties: currentProperties
|
||||||
position: currentProperties.position,
|
|
||||||
rotation: currentProperties.rotation,
|
|
||||||
dimensions: currentProperties.dimensions
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
UndoStack.pushCommand(applyEntityProperties, undoData, applyEntityProperties, redoData);
|
UndoStack.pushCommand(applyEntityProperties, undoData, applyEntityProperties, redoData);
|
||||||
|
|
Loading…
Reference in a new issue