mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-08-09 14:40:40 +02:00
Add undo/redo for creating entities
This commit is contained in:
parent
68c4a2f7f6
commit
3bb3e57f71
2 changed files with 70 additions and 2 deletions
|
@ -317,7 +317,9 @@ CreatePalette = function (side, leftInputs, rightInputs, uiCommandCallback) {
|
||||||
isTriggerClicked,
|
isTriggerClicked,
|
||||||
properties,
|
properties,
|
||||||
CREATE_OFFSET = { x: 0, y: 0.05, z: -0.02 },
|
CREATE_OFFSET = { x: 0, y: 0.05, z: -0.02 },
|
||||||
INVERSE_HAND_BASIS_ROTATION = Quat.fromVec3Degrees({ x: 0, y: 0, z: -90 });
|
INVERSE_HAND_BASIS_ROTATION = Quat.fromVec3Degrees({ x: 0, y: 0, z: -90 }),
|
||||||
|
entityID,
|
||||||
|
createdEntities;
|
||||||
|
|
||||||
itemIndex = paletteItemOverlays.indexOf(intersectionOverlayID);
|
itemIndex = paletteItemOverlays.indexOf(intersectionOverlayID);
|
||||||
|
|
||||||
|
@ -350,7 +352,13 @@ CreatePalette = function (side, leftInputs, rightInputs, uiCommandCallback) {
|
||||||
Vec3.multiplyQbyV(controlHand.orientation(),
|
Vec3.multiplyQbyV(controlHand.orientation(),
|
||||||
Vec3.sum({ x: 0, y: properties.dimensions.z / 2, z: 0 }, CREATE_OFFSET)));
|
Vec3.sum({ x: 0, y: properties.dimensions.z / 2, z: 0 }, CREATE_OFFSET)));
|
||||||
properties.rotation = Quat.multiply(controlHand.orientation(), INVERSE_HAND_BASIS_ROTATION);
|
properties.rotation = Quat.multiply(controlHand.orientation(), INVERSE_HAND_BASIS_ROTATION);
|
||||||
Entities.addEntity(properties);
|
entityID = Entities.addEntity(properties);
|
||||||
|
if (entityID !== Uuid.NULL) {
|
||||||
|
createdEntities = [{ entityID: entityID, properties: properties }];
|
||||||
|
History.push({ deleteEntities: createdEntities }, { createEntities: createdEntities });
|
||||||
|
} else {
|
||||||
|
Feedback.play(otherSide, Feedback.GENERAL_ERROR);
|
||||||
|
}
|
||||||
|
|
||||||
// Lower and unhighlight item.
|
// Lower and unhighlight item.
|
||||||
Overlays.editOverlay(paletteItemHoverOverlays[itemIndex], {
|
Overlays.editOverlay(paletteItemHoverOverlays[itemIndex], {
|
||||||
|
|
|
@ -63,6 +63,41 @@ History = (function () {
|
||||||
undoPosition += 1;
|
undoPosition += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function updateEntityIDs(oldEntityID, newEntityID) {
|
||||||
|
// Replace oldEntityID value with newEntityID in history.
|
||||||
|
var i,
|
||||||
|
length;
|
||||||
|
|
||||||
|
function updateEntityIDsInProperty(properties) {
|
||||||
|
var i,
|
||||||
|
length;
|
||||||
|
|
||||||
|
if (properties) {
|
||||||
|
for (i = 0, length = properties.length; i < length; i += 1) {
|
||||||
|
if (properties[i].entityID === oldEntityID) {
|
||||||
|
properties[i].entityID = newEntityID;
|
||||||
|
}
|
||||||
|
if (properties[i].properties && properties[i].properties.parentID === oldEntityID) {
|
||||||
|
properties[i].properties.parentID = newEntityID;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0, length = history.length; i < length; i += 1) {
|
||||||
|
if (history[i].undoData) {
|
||||||
|
updateEntityIDsInProperty(history[i].undoData.setProperties);
|
||||||
|
updateEntityIDsInProperty(history[i].undoData.createEntities);
|
||||||
|
updateEntityIDsInProperty(history[i].undoData.deleteEntities);
|
||||||
|
}
|
||||||
|
if (history[i].redoData) {
|
||||||
|
updateEntityIDsInProperty(history[i].redoData.setProperties);
|
||||||
|
updateEntityIDsInProperty(history[i].redoData.createEntities);
|
||||||
|
updateEntityIDsInProperty(history[i].redoData.deleteEntities);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function hasUndo() {
|
function hasUndo() {
|
||||||
return undoPosition > -1;
|
return undoPosition > -1;
|
||||||
}
|
}
|
||||||
|
@ -72,19 +107,44 @@ History = (function () {
|
||||||
}
|
}
|
||||||
|
|
||||||
function undo() {
|
function undo() {
|
||||||
|
var undoData,
|
||||||
|
i,
|
||||||
|
length;
|
||||||
|
|
||||||
if (undoPosition > -1) {
|
if (undoPosition > -1) {
|
||||||
|
undoData = history[undoPosition].undoData;
|
||||||
|
|
||||||
// TODO
|
// TODO
|
||||||
|
|
||||||
|
if (undoData.deleteEntities) {
|
||||||
|
for (i = 0, length = undoData.deleteEntities.length; i < length; i += 1) {
|
||||||
|
Entities.deleteEntity(undoData.deleteEntities[i].entityID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
undoPosition -= 1;
|
undoPosition -= 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function redo() {
|
function redo() {
|
||||||
|
var redoData,
|
||||||
|
entityID,
|
||||||
|
i,
|
||||||
|
length;
|
||||||
|
|
||||||
|
|
||||||
if (undoPosition < history.length - 1) {
|
if (undoPosition < history.length - 1) {
|
||||||
|
redoData = history[undoPosition + 1].redoData;
|
||||||
|
|
||||||
// TODO
|
// TODO
|
||||||
|
|
||||||
|
if (redoData.createEntities) {
|
||||||
|
for (i = 0, length = redoData.createEntities.length; i < length; i += 1) {
|
||||||
|
entityID = Entities.addEntity(redoData.createEntities[i].properties);
|
||||||
|
updateEntityIDs(redoData.createEntities[i].entityID, entityID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
undoPosition += 1;
|
undoPosition += 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue