瀏覽代碼

MeshSpray: fix bugs & CDB: fix subproperties bug

Tom Spira 5 年之前
父節點
當前提交
f45941121a
共有 3 個文件被更改,包括 25 次插入22 次删除
  1. 11 9
      hide/comp/SceneEditor.hx
  2. 2 0
      hide/comp/cdb/SubTable.hx
  3. 12 13
      hrt/prefab/l3d/MeshSpray.hx

+ 11 - 9
hide/comp/SceneEditor.hx

@@ -1621,7 +1621,7 @@ class SceneEditor {
 			obj3d.updateInstance(ctx);
 			obj3d.updateInstance(ctx);
 	}
 	}
 
 
-	public function deleteElements(elts : Array<PrefabElement>, ?then: Void->Void, doRefresh : Bool = true) {
+	public function deleteElements(elts : Array<PrefabElement>, ?then: Void->Void, doRefresh : Bool = true, enableUndo : Bool = true) {
 		var fullRefresh = false;
 		var fullRefresh = false;
 		var undoes = [];
 		var undoes = [];
 		for(elt in elts) {
 		for(elt in elts) {
@@ -1642,17 +1642,19 @@ class SceneEditor {
 		if (doRefresh)
 		if (doRefresh)
 			refreshFunc(then != null ? then : deselect);
 			refreshFunc(then != null ? then : deselect);
 
 
-		undo.change(Custom(function(undo) {
-			if(!undo && !fullRefresh)
-				for(e in elts) removeInstance(e);
+		if (enableUndo) {
+			undo.change(Custom(function(undo) {
+				if(!undo && !fullRefresh)
+					for(e in elts) removeInstance(e);
 
 
-			for(u in undoes) u(undo);
+				for(u in undoes) u(undo);
 
 
-			if(undo)
-				for(e in elts) makeInstance(e);
+				if(undo)
+					for(e in elts) makeInstance(e);
 
 
-			refreshFunc(then != null ? then : selectObjects.bind(undo ? elts : []));
-		}));
+				refreshFunc(then != null ? then : selectObjects.bind(undo ? elts : []));
+			}));
+		}
 	}
 	}
 
 
 	function reparentElement(e : Array<PrefabElement>, to : PrefabElement, index : Int) {
 	function reparentElement(e : Array<PrefabElement>, to : PrefabElement, index : Int) {

+ 2 - 0
hide/comp/cdb/SubTable.hx

@@ -25,6 +25,8 @@ class SubTable extends Table {
 		var group;
 		var group;
 		if( mode == Properties ) {
 		if( mode == Properties ) {
 			var count = cell.columnIndex + 1;
 			var count = cell.columnIndex + 1;
+			if (count < 3 && cell.table.sheet.columns.length >= 8)
+				count += 2; // fix when a lot of columns but the subproperty is on the left
 			group = new Element("<td>").attr("colspan",""+(count+1)).appendTo(insertedTR);
 			group = new Element("<td>").attr("colspan",""+(count+1)).appendTo(insertedTR);
 			var remain = cell.table.sheet.columns.length - count;
 			var remain = cell.table.sheet.columns.length - count;
 			if( remain > 0 )
 			if( remain > 0 )

+ 12 - 13
hrt/prefab/l3d/MeshSpray.hx

@@ -104,14 +104,14 @@ class MeshSpray extends Object3D {
 
 
 		};
 		};
 
 
-		interactive.onKeyDown = function(e) {
+		interactive.onKeyUp = function(e) {
 			if (e.keyCode == hxd.Key.R) {
 			if (e.keyCode == hxd.Key.R) {
 				lastMeshId = -1;
 				lastMeshId = -1;
 				if (lastSpray < Date.now().getTime() - 100) {
 				if (lastSpray < Date.now().getTime() - 100) {
 					if( !K.isDown( K.SHIFT) ) {
 					if( !K.isDown( K.SHIFT) ) {
 						if (previewModels.length > 0) {
 						if (previewModels.length > 0) {
 							sceneEditor.deleteElements(previewModels, () -> { }, false);
 							sceneEditor.deleteElements(previewModels, () -> { }, false);
-							sceneEditor.selectObjects([this]);
+							sceneEditor.selectObjects([this], false);
 							previewModels = [];
 							previewModels = [];
 						}
 						}
 						var worldPos = getMousePicker(s2d.mouseX, s2d.mouseY);
 						var worldPos = getMousePicker(s2d.mouseX, s2d.mouseY);
@@ -139,7 +139,7 @@ class MeshSpray extends Object3D {
 
 
 			if (previewModels.length > 0) {
 			if (previewModels.length > 0) {
 				sceneEditor.deleteElements(previewModels, () -> { }, false);
 				sceneEditor.deleteElements(previewModels, () -> { }, false);
-				sceneEditor.selectObjects([this]);
+				sceneEditor.selectObjects([this], false);
 				previewModels = [];
 				previewModels = [];
 			}
 			}
 		};
 		};
@@ -153,8 +153,8 @@ class MeshSpray extends Object3D {
 			
 			
 			if (lastSpray < Date.now().getTime() - 100) {	
 			if (lastSpray < Date.now().getTime() - 100) {	
 				if (previewModels.length > 0) {
 				if (previewModels.length > 0) {
-					sceneEditor.deleteElements(previewModels, () -> { }, false);
-					sceneEditor.selectObjects([this]);
+					sceneEditor.deleteElements(previewModels, () -> { }, false, false);
+					sceneEditor.selectObjects([this], false);
 					previewModels = [];
 					previewModels = [];
 				}			
 				}			
 				if( !shiftPressed ) {
 				if( !shiftPressed ) {
@@ -223,7 +223,7 @@ class MeshSpray extends Object3D {
 		cleanBtn.on("click", function() {
 		cleanBtn.on("click", function() {
 			if (hide.Ide.inst.confirm("Are you sure to remove all meshes for this MeshSpray ?")) {
 			if (hide.Ide.inst.confirm("Are you sure to remove all meshes for this MeshSpray ?")) {
 				sceneEditor.deleteElements(children.copy());
 				sceneEditor.deleteElements(children.copy());
-				sceneEditor.selectObjects([this]);
+				sceneEditor.selectObjects([this], false);
 			}
 			}
 		});
 		});
 
 
@@ -244,7 +244,6 @@ class MeshSpray extends Object3D {
 	}
 	}
 
 
 	override function setSelected( ctx : Context, b : Bool ) {
 	override function setSelected( ctx : Context, b : Bool ) {
-
 		if (timerCicle != null) {
 		if (timerCicle != null) {
 			timerCicle.stop();
 			timerCicle.stop();
 		}
 		}
@@ -254,9 +253,8 @@ class MeshSpray extends Object3D {
 			timerCicle.run = function() {
 			timerCicle.run = function() {
 				timerCicle.stop();
 				timerCicle.stop();
 				for (g in gBrushes) g.visible = false;
 				for (g in gBrushes) g.visible = false;
-				if (previewModels.length > 0) {
-					sceneEditor.deleteElements(previewModels, () -> { }, false);
-					sceneEditor.selectObjects([this]);
+				if (previewModels != null && previewModels.length > 0) {
+					sceneEditor.deleteElements(previewModels, () -> { }, false, false);
 					previewModels = [];
 					previewModels = [];
 				}
 				}
 				if (wasEdited)
 				if (wasEdited)
@@ -281,7 +279,7 @@ class MeshSpray extends Object3D {
 	var lastMeshId = -1;
 	var lastMeshId = -1;
 	function previewMeshesAround(ctx : Context, point : h3d.col.Point) {
 	function previewMeshesAround(ctx : Context, point : h3d.col.Point) {
 		if (meshes.length == 0) {
 		if (meshes.length == 0) {
-			throw "There is no meshes";
+			return;
 		}
 		}
 		if (invParent == null) {
 		if (invParent == null) {
 			invParent = getTransform().clone();
 			invParent = getTransform().clone();
@@ -313,7 +311,7 @@ class MeshSpray extends Object3D {
 		if (computedDensity == 1)
 		if (computedDensity == 1)
 		if (previewModels.length > 0) {
 		if (previewModels.length > 0) {
 			sceneEditor.deleteElements(previewModels, () -> { }, false);
 			sceneEditor.deleteElements(previewModels, () -> { }, false);
-			sceneEditor.selectObjects([this]);
+			sceneEditor.selectObjects([this], false);
 			previewModels = [];
 			previewModels = [];
 		}
 		}
 		lastPos = point;
 		lastPos = point;
@@ -351,6 +349,7 @@ class MeshSpray extends Object3D {
 
 
 				var model = new hrt.prefab.Model(this);
 				var model = new hrt.prefab.Model(this);
 				var meshId = lastMeshId;
 				var meshId = lastMeshId;
+				trace(meshId);
 				if (meshId == -1) {
 				if (meshId == -1) {
 					if (dontRepeatMesh && lastIndexMesh != -1 && meshes.length > 0) {
 					if (dontRepeatMesh && lastIndexMesh != -1 && meshes.length > 0) {
 						meshId = Std.random(meshes.length-1);
 						meshId = Std.random(meshes.length-1);
@@ -423,7 +422,7 @@ class MeshSpray extends Object3D {
 		if (childToRemove.length > 0) {
 		if (childToRemove.length > 0) {
 			wasEdited = true;
 			wasEdited = true;
 			sceneEditor.deleteElements(childToRemove, () -> { }, false);
 			sceneEditor.deleteElements(childToRemove, () -> { }, false);
-			sceneEditor.selectObjects([this]);
+			sceneEditor.selectObjects([this], false);
 		}
 		}
 	}
 	}