Browse Source

Fix prefab elts not being removed from shared context

trethaller 7 years ago
parent
commit
8e6086cde8
3 changed files with 28 additions and 5 deletions
  1. 4 0
      hide/prefab/Object3D.hx
  2. 13 4
      hide/view/Level3D.hx
  3. 11 1
      hide/view/Prefab.hx

+ 4 - 0
hide/prefab/Object3D.hx

@@ -49,6 +49,10 @@ class Object3D extends Prefab {
 		x = mat.tx;
 		x = mat.tx;
 		y = mat.ty;
 		y = mat.ty;
 		z = mat.tz;
 		z = mat.tz;
+		var s = mat.getScale();
+		scaleX = s.x;
+		scaleY = s.y;
+		scaleZ = s.z;
 		rotationX = rot.x;
 		rotationX = rot.x;
 		rotationY = rot.y;
 		rotationY = rot.y;
 		rotationZ = rot.z;
 		rotationZ = rot.z;

+ 13 - 4
hide/view/Level3D.hx

@@ -296,7 +296,7 @@ class Level3D extends FileView {
 						<div class="tab" name="Scene" icon="sitemap">
 						<div class="tab" name="Scene" icon="sitemap">
 							<div class="hide-block">
 							<div class="hide-block">
 								<div class="hide-list hide-scene-tree">
 								<div class="hide-list hide-scene-tree">
-									<div class="tree"></div>
+									<div class="tree small"></div>
 								</div>
 								</div>
 							</div>
 							</div>
 							<div class="props"></div>
 							<div class="props"></div>
@@ -608,15 +608,16 @@ class Level3D extends FileView {
 		tree.root.parent().contextmenu(function(e) {
 		tree.root.parent().contextmenu(function(e) {
 			e.preventDefault();
 			e.preventDefault();
 			var current = tree.getCurrentOver();
 			var current = tree.getCurrentOver();
-			if(curEdit == null || curEdit.elements.indexOf(current) < 0) {
+			if(current != null && (curEdit == null || curEdit.elements.indexOf(current) < 0)) {
 				tree.setSelection([current]);
 				tree.setSelection([current]);
 				selectObjects([current]);
 				selectObjects([current]);
 			}
 			}
 
 
 			var registered = new Array<hide.comp.ContextMenu.ContextMenuItem>();
 			var registered = new Array<hide.comp.ContextMenu.ContextMenuItem>();
 			var allRegs = @:privateAccess hide.prefab.Library.registeredElements;
 			var allRegs = @:privateAccess hide.prefab.Library.registeredElements;
+			var allowed = ["model"];
 			for( ptype in allRegs.keys() ) {
 			for( ptype in allRegs.keys() ) {
-				if( ptype == "prefab" ) continue;
+				if( allowed.indexOf(ptype) < 0 ) continue;
 				var pcl = allRegs.get(ptype);
 				var pcl = allRegs.get(ptype);
 				var props = Type.createEmptyInstance(pcl).getHideProps();
 				var props = Type.createEmptyInstance(pcl).getHideProps();
 				registered.push({
 				registered.push({
@@ -780,16 +781,24 @@ class Level3D extends FileView {
 	}
 	}
 
 
 	function deleteElements(elts : Array<PrefabElement>) {
 	function deleteElements(elts : Array<PrefabElement>) {
-		var list = [for(e in elts) {elt: e, parent: e.parent, index: e.parent.children.indexOf(e)}];
+		var contexts = context.shared.contexts;
+		var list = [for(e in elts) {
+			elt: e,
+			ctx: contexts.get(e),
+			parent: e.parent,
+			index: e.parent.children.indexOf(e)
+		}];
 		function action(undo) {
 		function action(undo) {
 			if( undo ) {
 			if( undo ) {
 				for(o in list) {
 				for(o in list) {
 					o.parent.children.insert(o.index, o.elt);
 					o.parent.children.insert(o.index, o.elt);
+					contexts.set(o.elt, o.ctx);
 				}
 				}
 			}
 			}
 			else {
 			else {
 				for(o in list) {
 				for(o in list) {
 					o.parent.children.remove(o.elt);
 					o.parent.children.remove(o.elt);
+					contexts.remove(o.elt);
 				}
 				}
 			}
 			}
 			deselect();
 			deselect();

+ 11 - 1
hide/view/Prefab.hx

@@ -285,9 +285,19 @@ class Prefab extends FileView {
 							if( o == current ) {
 							if( o == current ) {
 								properties.clear();
 								properties.clear();
 								var index = roots.indexOf(o);
 								var index = roots.indexOf(o);
+								var contexts = context.shared.contexts;
+								var ctx = contexts.get(o);
+								contexts.remove(o);
 								roots.remove(o);
 								roots.remove(o);
 								undo.change(Custom(function(undo) {
 								undo.change(Custom(function(undo) {
-									if( undo ) roots.insert(index, o) else roots.remove(o);
+									if( undo ) {
+										roots.insert(index, o);
+										contexts.set(o, ctx);
+									}
+									else {
+										roots.remove(o);
+										contexts.remove(o);										
+									}
 									refresh();
 									refresh();
 								}));
 								}));
 								refresh();
 								refresh();