瀏覽代碼

Clamp keys edition to lifetime or duration (#186)

Jed974 4 年之前
父節點
當前提交
8f4533193d
共有 3 個文件被更改,包括 7 次插入3 次删除
  1. 1 0
      hide/comp/CurveEditor.hx
  2. 5 3
      hide/view/FXEditor.hx
  3. 1 0
      hrt/prefab/Curve.hx

+ 1 - 0
hide/comp/CurveEditor.hx

@@ -130,6 +130,7 @@ class CurveEditor extends Component {
 
 	function set_curve(curve: hrt.prefab.Curve) {
 		this.curve = curve;
+		maxLength = curve.maxTime;
 		lastValue = haxe.Json.parse(haxe.Json.stringify(curve.save()));
 		var view = getDisplayState("view");
 		if(view != null) {

+ 5 - 3
hide/view/FXEditor.hx

@@ -958,6 +958,7 @@ class FXEditor extends FileView {
 				if(edit == from) continue;
 				var k = edit.curve.findKey(prevTime, keyTimeTolerance);
 				if(k != null) {
+					newTime = hxd.Math.clamp(newTime, 0.0, edit.curve.maxTime);
 					k.time = newTime;
 					edit.refreshGraph(false, k);
 				}
@@ -1127,6 +1128,7 @@ class FXEditor extends FileView {
 				height = 100;
 			if(height < minHeight) height = minHeight;
 			curveContainer.height(height);
+			curve.maxTime = data.duration;
 			var curveEdit = new hide.comp.CurveEditor(this.undo, curveContainer);
 			curveEdit.saveDisplayKey = dispKey;
 			curveEdit.lockViewX = true;
@@ -1154,9 +1156,9 @@ class FXEditor extends FileView {
 			}
 			curveEdit.xOffset = xOffset;
 			curveEdit.xScale = xScale;
-			curveEdit.curve = curve;
 			if(isInstanceCurve(curve))
-				curveEdit.maxLength = 1.0;
+				curve.maxTime = 1.0;
+			curveEdit.curve = curve;
 			curveEdit.onChange = function(anim) {
 				refreshDopesheet();
 			}
@@ -1760,7 +1762,7 @@ class FXEditor extends FileView {
 	}
 
 	static function isInstanceCurve(curve: Curve) {
-		return curve.getParent(hrt.prefab.fx.Emitter) != null && curve.name.indexOf("inst") == 0;
+		return curve.getParent(hrt.prefab.fx.Emitter) != null;
 	}
 
 	static var _ = FileTree.registerExtension(FXEditor, ["fx"], { icon : "sitemap", createNew : "FX" });

+ 1 - 0
hrt/prefab/Curve.hx

@@ -36,6 +36,7 @@ class Curve extends Prefab {
 
 	@:s public var loop : Bool = false;
 
+	public var maxTime : Float;
 	public var duration(get, never): Float;
 	function get_duration() {
 		if(keys.length == 0) return 0.0;