浏览代码

FXE: Improve new context menu, add unlit material

trethaller 6 年之前
父节点
当前提交
a3ee90639f
共有 3 个文件被更改,包括 41 次插入12 次删除
  1. 3 4
      hide/comp/SceneEditor.hx
  2. 2 2
      hide/prefab/l3d/Level3D.hx
  3. 36 6
      hide/view/FXEditor.hx

+ 3 - 4
hide/comp/SceneEditor.hx

@@ -1487,10 +1487,10 @@ class SceneEditor {
 		return newItems;
 	}
 
-	function getNewTypeMenuItem(ptype: String, parent: PrefabElement, onMake: PrefabElement->Void) : hide.comp.ContextMenu.ContextMenuItem {
+	function getNewTypeMenuItem(ptype: String, parent: PrefabElement, onMake: PrefabElement->Void, ?label: String) : hide.comp.ContextMenu.ContextMenuItem {
 		var pmodel = hxd.prefab.Library.getRegistered().get(ptype);
 		return {
-			label : pmodel.inf.name,
+			label : label != null ? label : pmodel.inf.name,
 			click : function() {
 				function make(?path) {
 					var p = Type.createInstance(pmodel.cl, [parent]);
@@ -1516,8 +1516,7 @@ class SceneEditor {
 	}
 
 	function getNewShaderMenu(parentElt: PrefabElement, onMake: PrefabElement->Void) : hide.comp.ContextMenu.ContextMenuItem {
-		var custom = getNewTypeMenuItem("shader", parentElt, onMake);
-		custom.label = "Custom...";
+		var custom = getNewTypeMenuItem("shader", parentElt, onMake, "Custom...");
 
 		function shaderItem(name, path) : hide.comp.ContextMenu.ContextMenuItem {
 			return {

+ 2 - 2
hide/prefab/l3d/Level3D.hx

@@ -26,7 +26,7 @@ class Level3D extends hxd.prefab.Library {
 	override function getCdbModel(?p:hxd.prefab.Prefab):cdb.Sheet {
 		#if (editor && castle)
 		return hide.view.l3d.Level3D.getCdbModel(p);
-		#end 
+		#end
 		return null;
 	}
 
@@ -47,7 +47,7 @@ class Level3D extends hxd.prefab.Library {
 	}
 
 	override function getHideProps() : HideProps {
-		return { icon : "cube", name : "Level3D", allowChildren : function(t) return hxd.prefab.Library.isOfType(t,Object3D) };
+		return { icon : "cube", name : "Level3D", allowChildren : function(t) return hxd.prefab.Library.isOfType(t,Object3D), allowParent: _ -> false};
 	}
 
 	#end

+ 36 - 6
hide/view/FXEditor.hx

@@ -63,13 +63,43 @@ private class FXSceneEditor extends hide.comp.SceneEditor {
 		if(current != null && current.to(hide.prefab.Shader) != null) {
 			return parent.getNewTrackMenu(current);
 		}
-		var menu = super.getNewContextMenu(current, onMake);
-		if(current != null) {
-			menu.unshift({
-				label: "Animation",
-				menu: parent.getNewTrackMenu(current)
-			});
+		var allTypes = super.getNewContextMenu(current, onMake);
+
+		var menu = [];
+		for(name in ["Group", "Polygon", "Model", "Shaders"]) {
+			var item = allTypes.find(i -> i.label == name);
+			if(item == null) continue;
+			allTypes.remove(item);
+			menu.push(item);
 		}
+		menu.push({
+			label: "Animation",
+			menu: parent.getNewTrackMenu(current)
+		});
+
+		menu.push({
+			label: "Material",
+			menu: [
+				getNewTypeMenuItem("material", current, onMake, "Default"),
+				getNewTypeMenuItem("material", current, function (p) {
+					// TODO: Move material presets to props.json
+					p.props = {
+						PBR: {
+							mode: "Overlay",
+							blend: "None",
+							shadows: false
+						}
+					}
+					if(onMake != null) onMake(p);
+				}, "Unlit")
+			]
+		});
+		menu.sort(function(l1,l2) return Reflect.compare(l1.label,l2.label));
+		menu.push({label: null, isSeparator: true});
+		menu.push({
+			label: "Other",
+			menu: allTypes
+		});
 		return menu;
 	}
 }