Преглед на файлове

Level3D fixes. Add CDB props on any object. Add object at screen center by default.

trethaller преди 7 години
родител
ревизия
d439e72078
променени са 3 файла, в които са добавени 31 реда и са изтрити 16 реда
  1. 3 3
      hide/comp/SceneEditor.hx
  2. 1 1
      hide/comp/cdb/Table.hx
  3. 27 12
      hide/view/l3d/Level3D.hx

+ 3 - 3
hide/comp/SceneEditor.hx

@@ -289,8 +289,8 @@ class SceneEditor {
 
 
 	function refreshProps() {
 	function refreshProps() {
 		properties.clear();
 		properties.clear();
-		if(curEdit != null && curEdit.elements != null && curEdit.elements.length > 0) {
-			curEdit.elements[0].edit(curEdit);
+		if(curEdit != null) {
+			curEdit.rebuild();
 		}
 		}
 	}
 	}
 
 
@@ -970,7 +970,7 @@ class SceneEditor {
 		return null;
 		return null;
 	}
 	}
 
 
-	static function worldMat(obj: Object) {
+	public function worldMat(obj: Object) {
 		if(obj.defaultTransform != null) {
 		if(obj.defaultTransform != null) {
 			var m = obj.defaultTransform.clone();
 			var m = obj.defaultTransform.clone();
 			m.invert();
 			m.invert();

+ 1 - 1
hide/comp/cdb/Table.hx

@@ -199,7 +199,7 @@ class Table extends Component {
 		}
 		}
 
 
 		// add/edit properties
 		// add/edit properties
-
+		/*
 		var end = new Element("<tr>").appendTo(root);
 		var end = new Element("<tr>").appendTo(root);
 		end = new Element("<td>").attr("colspan", "2").appendTo(end);
 		end = new Element("<td>").attr("colspan", "2").appendTo(end);
 		var sel = new Element("<select>").appendTo(end);
 		var sel = new Element("<select>").appendTo(end);

+ 27 - 12
hide/view/l3d/Level3D.hx

@@ -133,6 +133,29 @@ private class Level3DSceneEditor extends hide.comp.SceneEditor {
 		var newItems = new Array<hide.comp.ContextMenu.ContextMenuItem>();
 		var newItems = new Array<hide.comp.ContextMenu.ContextMenuItem>();
 		var allRegs = @:privateAccess hide.prefab.Library.registeredElements;
 		var allRegs = @:privateAccess hide.prefab.Library.registeredElements;
 		var allowed = ["model", "object", "layer", "box", "polygon"];
 		var allowed = ["model", "object", "layer", "box", "polygon"];
+
+		var curLayer = current != null ? current.to(hide.prefab.l3d.Layer) : null;
+		var cdbSheet = curLayer != null ? curLayer.getCdbModel(curLayer) : null;
+
+		function setup(p : PrefabElement) {
+			var proj = screenToWorld(scene.s2d.width/2, scene.s2d.height/2);
+			var obj3d = p.to(hide.prefab.Object3D);
+			if(proj != null && obj3d != null) {
+				var parentMat = worldMat(getObject(p.parent));
+				parentMat.invert();
+				var localMat = new h3d.Matrix();
+				localMat.initTranslate(proj.x, proj.y, proj.z);
+				localMat.multiply(localMat, parentMat);
+				obj3d.setTransform(localMat);
+			}
+
+			if(cdbSheet != null)
+				p.props = cdbSheet.getDefaults();
+
+			autoName(p);
+			addObject(p);
+		}
+
 		for( ptype in allowed ) {
 		for( ptype in allowed ) {
 			var pcl = allRegs.get(ptype);
 			var pcl = allRegs.get(ptype);
 			var props = Type.createEmptyInstance(pcl).getHideProps();
 			var props = Type.createEmptyInstance(pcl).getHideProps();
@@ -145,7 +168,6 @@ private class Level3DSceneEditor extends hide.comp.SceneEditor {
 						@:privateAccess p.type = ptype;
 						@:privateAccess p.type = ptype;
 						if(path != null)
 						if(path != null)
 							p.source = path;
 							p.source = path;
-						autoName(p);
 						return p;
 						return p;
 					}
 					}
 
 
@@ -153,21 +175,17 @@ private class Level3DSceneEditor extends hide.comp.SceneEditor {
 						ide.chooseFile(props.fileSource, function(path) {
 						ide.chooseFile(props.fileSource, function(path) {
 							if( path == null ) return;
 							if( path == null ) return;
 							var p = make(path);
 							var p = make(path);
-							addObject(p);
+							setup(p);
 						});
 						});
 					else
 					else
-						addObject(make());
+						setup(make());
 				}
 				}
 			});
 			});
 		}
 		}
 
 
 		function addNewInstances() {
 		function addNewInstances() {
-			if(current == null)
-				return;
-			var curLayer = current.to(hide.prefab.l3d.Layer);
 			if(curLayer == null)
 			if(curLayer == null)
 				return;
 				return;
-			var cdbSheet = curLayer.getCdbModel(curLayer);
 			if(cdbSheet == null)
 			if(cdbSheet == null)
 				return;
 				return;
 			var refCol = Instance.findRefColumn(cdbSheet);
 			var refCol = Instance.findRefColumn(cdbSheet);
@@ -183,11 +201,9 @@ private class Level3DSceneEditor extends hide.comp.SceneEditor {
 						label : kind,
 						label : kind,
 						click : function() {
 						click : function() {
 							var p = new hide.prefab.l3d.Instance(current);
 							var p = new hide.prefab.l3d.Instance(current);
-							p.props = cdbSheet.getDefaults();
 							p.name = kind.charAt(0).toLowerCase() + kind.substr(1) + "_";
 							p.name = kind.charAt(0).toLowerCase() + kind.substr(1) + "_";
 							Reflect.setField(p.props, refCol.col.name, kind);
 							Reflect.setField(p.props, refCol.col.name, kind);
-							autoName(p);
-							addObject(p);
+							setup(p);
 						}
 						}
 					});
 					});
 				}
 				}
@@ -202,8 +218,7 @@ private class Level3DSceneEditor extends hide.comp.SceneEditor {
 					click : function() {
 					click : function() {
 						var p = new hide.prefab.l3d.Instance(current);
 						var p = new hide.prefab.l3d.Instance(current);
 						p.name = "object";
 						p.name = "object";
-						autoName(p);
-						addObject(p);
+						setup(p);
 					}
 					}
 				});
 				});
 			}
 			}