浏览代码

[model] Added pageUp/down to change anim quickly (+ui fixes)

Clément Espeute 5 月之前
父节点
当前提交
3803ac7fe8
共有 3 个文件被更改,包括 30 次插入3 次删除
  1. 5 0
      bin/defaultProps.json
  2. 5 3
      hide/comp/Toolbar.hx
  3. 20 0
      hide/view/Model.hx

+ 5 - 0
bin/defaultProps.json

@@ -46,6 +46,11 @@
 	"key.selectInvert" : "Ctrl-I",
 	"key.playPause" : "Space",
 
+	// model view
+
+	"key.model.animPrev" : "PageUp",
+	"key.model.animNext" : "PageDown",
+
 	// view keys
 
 	"key.view.fullScreen" : "F11",

+ 5 - 3
hide/comp/Toolbar.hx

@@ -90,11 +90,13 @@ class Toolbar extends Component {
 		if(label != null)
 			new Element('<label>$label</label>').appendTo(e);
 
-		function tog() {
+		function tog(?force: Bool) {
 			if (!canBeUntoggled && e.get(0).hasAttribute("checked"))
 				return;
 
-			e.get(0).toggleAttribute("checked");
+			var newStatus = if (force == null) !e.get(0).hasAttribute("checked") else force;
+
+			e.get(0).toggleAttribute("checked", newStatus);
 			var checked = e.get(0).hasAttribute("checked");
 
 			if (toggledIcon != null) {
@@ -122,7 +124,7 @@ class Toolbar extends Component {
 		return {
 			id : id,
 			element : e,
-			toggle : function(b) tog(),
+			toggle : function(b) tog(b),
 			isDown: function() return e.get(0).hasAttribute("checked"),
 			rightClick : function(f) {
 				e.contextmenu(function(e) { f(); e.preventDefault(); });

+ 20 - 0
hide/view/Model.hx

@@ -36,6 +36,8 @@ class Model extends FileView {
 	var shader = new h3d.shader.FixedColor(0xffffff);
 	var shader2 = new h3d.shader.FixedColor(0xff8000);
 
+	var animSelector : hide.comp.Toolbar.ToolSelect<String>;
+
 	override function onDisplay() {
 		this.saveDisplayKey = "Model:" + state.path;
 
@@ -100,6 +102,10 @@ class Model extends FileView {
 		sceneEditor.view.keys.register("undo", function() undo.undo());
 		sceneEditor.view.keys.register("redo", function() undo.redo());
 
+		sceneEditor.view.keys.register("model.animPrev", changeAnim.bind(-1));
+		sceneEditor.view.keys.register("model.animNext", changeAnim.bind(1));
+
+
 		sceneEditor.view.keys.register("view.refresh", function() rebuild());
 		sceneEditor.view.keys.register("view.refreshApp", function() untyped chrome.runtime.reload());
 
@@ -1295,6 +1301,7 @@ class Model extends FileView {
 					selIdx = aIdx + 1;
 			}
 			var sel = tools.addSelect("play-circle");
+			this.animSelector = sel;
 			var content = [for( a in anims ) {
 				var label = scene.animationName(a);
 				{ label : label, value : a }
@@ -1401,6 +1408,19 @@ class Model extends FileView {
 		}
 	}
 
+	function changeAnim(offset: Int) : Void {
+		var anims = scene.listAnims(getPath());
+
+		if (anims == null)
+			return;
+
+		var index = anims.indexOf(currentAnimation.file);
+		index = (index + anims.length + offset) % anims.length;
+
+		setAnimation(anims[index]);
+		animSelector.element.find(".label").text(currentAnimation.name);
+	}
+
 	function onUpdate(dt:Float) {
 		var cam = scene.s3d.camera;
 		if( light != null ) {