Browse Source

[animgraph] Refactored anim picker for anim tag or path choosing

Clément Espeute 8 months ago
parent
commit
5613a98bbf

+ 3 - 1
bin/style.css

@@ -2465,6 +2465,9 @@ input[type=checkbox]:checked:after {
   padding-left: 8px;
   padding-left: 8px;
   padding-right: 8px;
   padding-right: 8px;
 }
 }
+.graph-view .heaps-scene svg g.box foreignObject input-wrapper > * {
+  flex-grow: 1;
+}
 .graph-view .heaps-scene svg g.box foreignObject input-wrapper input {
 .graph-view .heaps-scene svg g.box foreignObject input-wrapper input {
   width: 100%;
   width: 100%;
   min-width: 0;
   min-width: 0;
@@ -4537,7 +4540,6 @@ blend-space-2d-root properties-container .hide-properties dl > div .hide-range i
 .anim-list > ul {
 .anim-list > ul {
   flex-grow: 1;
   flex-grow: 1;
   overflow: auto;
   overflow: auto;
-  width: 100%;
   border: var(--basic-border);
   border: var(--basic-border);
   border-radius: var(--basic-border-radius);
   border-radius: var(--basic-border-radius);
   padding: var(--basic-padding);
   padding: var(--basic-padding);

+ 3 - 1
bin/style.less

@@ -2807,6 +2807,9 @@ input[type=checkbox] {
 							display: flex;
 							display: flex;
 							align-items: center;
 							align-items: center;
 							justify-items: center;
 							justify-items: center;
+							> * {
+								flex-grow: 1;
+							}
 							input {
 							input {
 								width: 100%;
 								width: 100%;
 								min-width: 0;
 								min-width: 0;
@@ -5382,7 +5385,6 @@ blend-space-2d-root {
 	> ul {
 	> ul {
 		flex-grow: 1;
 		flex-grow: 1;
 		overflow: auto;
 		overflow: auto;
-		width: 100%;
 		border: var(--basic-border);
 		border: var(--basic-border);
 		border-radius: var(--basic-border-radius);
 		border-radius: var(--basic-border-radius);
 		padding: var(--basic-padding);
 		padding: var(--basic-padding);

+ 2 - 2
hide/comp/Scene.hx

@@ -347,7 +347,7 @@ class Scene extends hide.comp.Component implements h3d.IDrawable {
 
 
 		var dirs : Array<String> = config.get("hmd.animPaths");
 		var dirs : Array<String> = config.get("hmd.animPaths");
 		if( dirs == null ) dirs = [];
 		if( dirs == null ) dirs = [];
-		dirs = [for( d in dirs ) ide.resourceDir + d];
+		dirs = [for( d in dirs ) haxe.io.Path.join([ide.resourceDir, d])];
 
 
 
 
 		var parts = path.split("/");
 		var parts = path.split("/");
@@ -361,7 +361,7 @@ class Scene extends hide.comp.Component implements h3d.IDrawable {
 			if( lib.header.animations.length > 0 )
 			if( lib.header.animations.length > 0 )
 				anims.push(ide.getPath(path));
 				anims.push(ide.getPath(path));
 		} else {
 		} else {
-			dirs.unshift(path);
+			dirs.unshift(haxe.io.Path.join([ide.resourceDir, path]));
 		}
 		}
 
 
 		for( dir in dirs ) {
 		for( dir in dirs ) {

+ 16 - 4
hide/view/animgraph/AnimGraphEditor.hx

@@ -44,7 +44,7 @@ class AnimGraphEditor extends GenericGraphEditor {
 
 
         refreshPamamList();
         refreshPamamList();
 
 
-        new AnimList(propertiesContainer, null, scenePreview.listAnims(animGraph.animFolder));
+        new AnimList(propertiesContainer, null, getAnims(scenePreview, animGraph.animFolder));
 
 
         graphEditor.element.get(0).addEventListener("dragover", (e: js.html.DragEvent) -> {
         graphEditor.element.get(0).addEventListener("dragover", (e: js.html.DragEvent) -> {
             if (e.dataTransfer.types.contains("index"))
             if (e.dataTransfer.types.contains("index"))
@@ -77,8 +77,7 @@ class AnimGraphEditor extends GenericGraphEditor {
             // Handle drag from anim list
             // Handle drag from anim list
             var path = e.dataTransfer.getData(AnimList.dragEventKey);
             var path = e.dataTransfer.getData(AnimList.dragEventKey);
             if (path.length > 0) {
             if (path.length > 0) {
-
-                if (StringTools.endsWith(path, ".fbx")) {
+                if (StringTools.endsWith(path, ".fbx") || !StringTools.contains(path,".")) {
                     e.preventDefault();
                     e.preventDefault();
                     var inst = new hrt.animgraph.nodes.Input();
                     var inst = new hrt.animgraph.nodes.Input();
                     animGraph.nodeIdCount += 1;
                     animGraph.nodeIdCount += 1;
@@ -111,6 +110,17 @@ class AnimGraphEditor extends GenericGraphEditor {
 
 
     }
     }
 
 
+    static public function getAnims(scene: hide.comp.Scene, animDirectory: String) : Array<String> {
+        var anims : Array<String> = [];
+
+        if (AnimGraph.customAnimNameLister != null) {
+            anims = anims.concat(AnimGraph.customAnimNameLister({animDirectory: animDirectory}));
+        }
+
+        anims = anims.concat(scene.listAnims(animDirectory));
+        return anims;
+    }
+
     public static function createChooseFolderPrompt(baseDir: String, onSet: (path: String) -> Void) : Element {
     public static function createChooseFolderPrompt(baseDir: String, onSet: (path: String) -> Void) : Element {
         var element = new Element("<center-content>
         var element = new Element("<center-content>
                 <div class='basic-border' style='width: 600px'>
                 <div class='basic-border' style='width: 600px'>
@@ -220,7 +230,9 @@ class AnimGraphEditor extends GenericGraphEditor {
                 return;
                 return;
             }
             }
 
 
-            var anim = animGraph.getAnimation(previewNode);
+            var providers = AnimGraph.customEditorResolverProvider(_);
+            var prov = providers != null ? providers[0] : null;
+            var anim = animGraph.getAnimation(previewNode, prov.resolver);
             previewModel.playAnimation(anim);
             previewModel.playAnimation(anim);
             previewAnimation = cast previewModel.currentAnimation;
             previewAnimation = cast previewModel.currentAnimation;
             refreshPamamList();
             refreshPamamList();

+ 3 - 3
hide/view/animgraph/AnimPicker.hx

@@ -5,7 +5,7 @@ package hide.view.animgraph;
 class AnimPicker extends hide.comp.Component {
 class AnimPicker extends hide.comp.Component {
 	var button : hide.comp.Button;
 	var button : hide.comp.Button;
 
 
-	public function new(parent = null, undo: hide.ui.UndoHistory, get: () -> String, set: (string: String) -> Void, lister: (ctx: hrt.animgraph.AnimGraph.EditorProviderContext) -> Array<String>) {
+	public function new(parent = null, undo: hide.ui.UndoHistory, get: () -> String, set: (string: String) -> Void) {
 		button = new hide.comp.Button(parent, null, "", {hasDropdown: true});
 		button = new hide.comp.Button(parent, null, "", {hasDropdown: true});
 		super(parent, button.element);
 		super(parent, button.element);
 
 
@@ -31,10 +31,10 @@ class AnimPicker extends hide.comp.Component {
 			}
 			}
 		});
 		});
 
 
-		if (lister != null) {
+		if (hrt.animgraph.AnimGraph.customAnimNameLister != null) {
 			items.push({isSeparator: true});
 			items.push({isSeparator: true});
 
 
-			var anims = lister(null);
+			var anims = hrt.animgraph.AnimGraph.customAnimNameLister(null);
 			for (anim in anims) {
 			for (anim in anims) {
 				items.push({
 				items.push({
 					label: anim,
 					label: anim,

+ 21 - 23
hide/view/animgraph/BlendSpace2DEditor.hx

@@ -1,9 +1,9 @@
 package hide.view.animgraph;
 package hide.view.animgraph;
 
 
 class BlendSpacePreviewSettings {
 class BlendSpacePreviewSettings {
-    public var modelPath: String = null;
+	public var modelPath: String = null;
 
 
-    public function new() {};
+	public function new() {};
 }
 }
 
 
 @:access(hrt.animgraph.BlendSpace2D)
 @:access(hrt.animgraph.BlendSpace2D)
@@ -324,19 +324,19 @@ class BlendSpace2DEditor extends hide.view.FileView {
 		keys.register("delete", deleteSelection);
 		keys.register("delete", deleteSelection);
 	}
 	}
 
 
-    override function buildTabMenu():Array<hide.comp.ContextMenu.MenuItem> {
-        var menu = super.buildTabMenu();
-        menu.push({isSeparator: true});
-        menu.push({label: "Reset Model Folder", click: () -> {
-            if (ide.confirm("Warning, resetting the model folder could lead to incorrect animations. Are you sure you want to proceed ?")) {
-                blendSpace2D.animFolder = null;
-                save();
-                onDisplay();
-            }
-        }});
+	override function buildTabMenu():Array<hide.comp.ContextMenu.MenuItem> {
+		var menu = super.buildTabMenu();
+		menu.push({isSeparator: true});
+		menu.push({label: "Reset Model Folder", click: () -> {
+			if (ide.confirm("Warning, resetting the model folder could lead to incorrect animations. Are you sure you want to proceed ?")) {
+				blendSpace2D.animFolder = null;
+				save();
+				onDisplay();
+			}
+		}});
 
 
-        return menu;
-    }
+		return menu;
+	}
 
 
 	override function getDefaultContent():haxe.io.Bytes {
 	override function getDefaultContent():haxe.io.Bytes {
 		var animgraph = (new hrt.animgraph.BlendSpace2D(null, null)).serialize();
 		var animgraph = (new hrt.animgraph.BlendSpace2D(null, null)).serialize();
@@ -435,7 +435,7 @@ class BlendSpace2DEditor extends hide.view.FileView {
 			new AnimPicker(dd, undo, () -> blendSpace2D.points[selectedSave].animPath, (s) -> {
 			new AnimPicker(dd, undo, () -> blendSpace2D.points[selectedSave].animPath, (s) -> {
 				blendSpace2D.points[selectedSave].animPath = s;
 				blendSpace2D.points[selectedSave].animPath = s;
 				refreshPreviewAnimation();
 				refreshPreviewAnimation();
-			}, hrt.animgraph.AnimGraph.customAnimNameLister);
+			});
 		}
 		}
 
 
 		var preview = new hide.Element('
 		var preview = new hide.Element('
@@ -487,8 +487,6 @@ class BlendSpace2DEditor extends hide.view.FileView {
 				hide.comp.ContextMenu.createDropdown(button.element.get(0), options, {search: Visible, autoWidth: true});
 				hide.comp.ContextMenu.createDropdown(button.element.get(0), options, {search: Visible, autoWidth: true});
 			}
 			}
 		}
 		}
-
-
 	}
 	}
 
 
 	override function save() {
 	override function save() {
@@ -516,7 +514,7 @@ class BlendSpace2DEditor extends hide.view.FileView {
 		return false;
 		return false;
 	}
 	}
 
 
-    function onScenePreviewReady() {
+	function onScenePreviewReady() {
 		scenePreviewReady = true;
 		scenePreviewReady = true;
 
 
 		if (scenePreview.getObjectPath() == null) {
 		if (scenePreview.getObjectPath() == null) {
@@ -524,9 +522,9 @@ class BlendSpace2DEditor extends hide.view.FileView {
 			scenePreview.setObjectPath(first);
 			scenePreview.setObjectPath(first);
 		}
 		}
 
 
-		var animList = new AnimList(propertiesContainer, null, scenePreview.listAnims(blendSpace2D.animFolder));
+		var animList = new AnimList(propertiesContainer, null, AnimGraphEditor.getAnims(scenePreview, blendSpace2D.animFolder));
 		scenePreview.resetPreviewCamera();
 		scenePreview.resetPreviewCamera();
-    }
+	}
 
 
 	function deletePoint(index: Int) {
 	function deletePoint(index: Int) {
 		var point = blendSpace2D.points[index];
 		var point = blendSpace2D.points[index];
@@ -565,9 +563,9 @@ class BlendSpace2DEditor extends hide.view.FileView {
 		undo.change(Custom(exec));
 		undo.change(Custom(exec));
 	}
 	}
 
 
-    function onScenePreviewUpdate(dt: Float) {
+	function onScenePreviewUpdate(dt: Float) {
 
 
-    }
+	}
 
 
 	function createPoint() {
 	function createPoint() {
 
 
@@ -689,5 +687,5 @@ class BlendSpace2DEditor extends hide.view.FileView {
 		}
 		}
 	}
 	}
 
 
-    static var _ = FileTree.registerExtension(BlendSpace2DEditor,["bs2d"],{ icon : "arrows-alt", createNew: "Blend Space 2D" });
+	static var _ = FileTree.registerExtension(BlendSpace2DEditor,["bs2d"],{ icon : "arrows-alt", createNew: "Blend Space 2D" });
 }
 }

+ 1 - 1
hrt/animgraph/AnimGraph.hx

@@ -18,7 +18,7 @@ typedef SerializedEdge = {
 
 
 #if editor
 #if editor
 typedef EditorProviderContext = {
 typedef EditorProviderContext = {
-	source: String,
+	animDirectory: String,
 }
 }
 #end
 #end
 
 

+ 4 - 13
hrt/animgraph/nodes/Input.hx

@@ -51,19 +51,10 @@ class Input extends AnimNode {
 		var wrapper = new hide.Element("<input-wrapper></input-wrapper>");
 		var wrapper = new hide.Element("<input-wrapper></input-wrapper>");
 		wrapper.height("20px");
 		wrapper.height("20px");
 
 
-		var fileSelect = new hide.comp.FileSelect(["fbx"], wrapper);
-		fileSelect.path = path;
-		fileSelect.onChange = () -> {
-			var prev = path;
-			var curr = fileSelect.path;
-			function exec(isUndo : Bool) {
-				path = !isUndo ? curr : prev;
-				fileSelect.path = path;
-				getAnimEditor().refreshPreview();
-			}
-			exec(false);
-			getAnimEditor().undo.change(Custom(exec));
-		}
+		new hide.view.animgraph.AnimPicker(wrapper, getAnimEditor().undo, () -> path, (s) -> {
+			path = s;
+			getAnimEditor().refreshPreview();
+		});
 		elts.push(wrapper);
 		elts.push(wrapper);
 
 
 		return elts;
 		return elts;