public OperatorNode(int x, int y) : base("Operator", new SerializableRect(x, y, 200, 150)) { type = lastType = OperatorNode.OPERATORTYPE.ABS; SetInputs(); curve = AnimationCurve.EaseInOut(0f, 0f, 1f, 1f); if (keyframes != null) { curve.keys = SerializableKeyframe.ToKeyframeArray(keyframes); } }
override public ModuleBase GetModule() { // check that has inputs for (int i = 0; i < inputs.Length; i++) { if (inputs[i] == null) { return(null); } } // get module switch (type) { case OPERATORTYPE.ABS: module = new Abs(inputs[0].GetModule()); break; case OPERATORTYPE.ADD: module = new Add(inputs[0].GetModule(), inputs[1].GetModule()); break; case OPERATORTYPE.BLEND: module = new Blend(inputs[0].GetModule(), inputs[1].GetModule(), inputs[2].GetModule()); break; case OPERATORTYPE.CLAMP: module = new Clamp(min, max, inputs[0].GetModule()); break; case OPERATORTYPE.EXPONENT: module = new Exponent(exponent, inputs[0].GetModule()); break; case OPERATORTYPE.INVERT: module = new Invert(inputs[0].GetModule()); break; case OPERATORTYPE.MAX: module = new Max(inputs[0].GetModule(), inputs[1].GetModule()); break; case OPERATORTYPE.MIN: module = new Min(inputs[0].GetModule(), inputs[1].GetModule()); break; case OPERATORTYPE.MULTIPLY: module = new Multiply(inputs[0].GetModule(), inputs[1].GetModule()); break; case OPERATORTYPE.POWER: module = new Power(inputs[0].GetModule(), inputs[1].GetModule()); break; case OPERATORTYPE.SUBTRACT: module = new Subtract(inputs[0].GetModule(), inputs[1].GetModule()); break; case OPERATORTYPE.TERRACE: module = new Terrace(min, max, power, inputs[0].GetModule()); break; case OPERATORTYPE.TRANSLATE: module = new Translate(x, y, z, inputs[0].GetModule()); break; case OPERATORTYPE.DIVIDE: module = new Divide(inputs[0].GetModule(), inputs[1].GetModule()); break; case OPERATORTYPE.CURVE: if (curve == null) { curve = AnimationCurve.EaseInOut(0f, 0f, 1f, 1f); if (keyframes != null) { curve.keys = SerializableKeyframe.ToKeyframeArray(keyframes); } } if (keyframes == null) { keyframes = SerializableKeyframe.FromKeyframeArray(curve.keys); } module = new Curve(keyframes, inputs[0].GetModule()); break; case OPERATORTYPE.WEIGHT: module = new Weight(inputs[0].GetModule(), min, max); break; case OPERATORTYPE.WARP: module = new Warp(power, inputs[0].GetModule(), inputs[1].GetModule()); break; case OPERATORTYPE.SELECT: module = new Select(inputs[0].GetModule(), min, max); break; } SetOutputOptions(); return(this.module); }
private void OperatorGUI() { // operator type selection operatorNode.type = (OperatorNode.OPERATORTYPE)EditorGUILayout.EnumPopup(operatorNode.type); if (operatorNode.type != operatorNode.lastType) { operatorNode.SetInputs(); UpdatePreview(); operatorNode.lastType = operatorNode.type; node.title = operatorNode.type.ToString(); } node.rect.height += controlHeight * 1.5f; // parameters showParameters = EditorGUILayout.Foldout(showParameters, "Parameters"); if (showParameters) { // min max if (operatorNode.type == OperatorNode.OPERATORTYPE.CLAMP) { GUILayout.Label("Min:"); operatorNode.min = EditorGUILayout.Slider(operatorNode.min, -1.0f, 1.0f); GUILayout.Label("Max:"); operatorNode.max = EditorGUILayout.Slider(operatorNode.max, -1.0f, 1.0f); node.rect.height += controlHeight * 2.5f; } if (operatorNode.type == OperatorNode.OPERATORTYPE.TERRACE) { GUILayout.Label("Min:"); operatorNode.min = EditorGUILayout.Slider(operatorNode.min, -1.0f, 1.0f); GUILayout.Label("Max:"); operatorNode.max = EditorGUILayout.Slider(operatorNode.max, -1.0f, 1.0f); GUILayout.Label("Power:"); operatorNode.power = EditorGUILayout.Slider(operatorNode.power, 0f, 1.0f); node.rect.height += controlHeight * 4f; } // exponent if (operatorNode.type == OperatorNode.OPERATORTYPE.EXPONENT) { GUILayout.Label("Exponent:"); operatorNode.exponent = EditorGUILayout.Slider(operatorNode.exponent, -10.0f, 10f); node.rect.height += controlHeight; } // x, y, z if (operatorNode.type == OperatorNode.OPERATORTYPE.TRANSLATE) { GUILayout.Label("X:"); operatorNode.x = EditorGUILayout.Slider(operatorNode.x, -10.0f, 10.0f); GUILayout.Label("Y:"); operatorNode.y = EditorGUILayout.Slider(operatorNode.y, -10.0f, 10.0f); GUILayout.Label("Z:"); operatorNode.z = EditorGUILayout.Slider(operatorNode.z, -10.0f, 10.0f); node.rect.height += controlHeight * 4f; } // curve if (operatorNode.type == OperatorNode.OPERATORTYPE.CURVE) { if (operatorNode.curve == null) { if (operatorNode.keyframes != null) { operatorNode.curve = new AnimationCurve(SerializableKeyframe.ToKeyframeArray(operatorNode.keyframes)); } else { operatorNode.curve = AnimationCurve.EaseInOut(0f, 0f, 1f, 1f); } } try { operatorNode.curve = EditorGUILayout.CurveField(operatorNode.curve, GUILayout.Width(40), GUILayout.Height(30)); } catch {} operatorNode.keyframes = SerializableKeyframe.FromKeyframeArray(operatorNode.curve.keys); node.rect.height += controlHeight; } // weight if (operatorNode.type == OperatorNode.OPERATORTYPE.WEIGHT) { GUILayout.Label("Weight:"); operatorNode.min = EditorGUILayout.Slider(operatorNode.min, 0f, 1f); GUILayout.Label("Target:"); operatorNode.max = EditorGUILayout.Slider(operatorNode.max, -1f, 1f); node.rect.height += controlHeight * 2.5f; } // exponent if (operatorNode.type == OperatorNode.OPERATORTYPE.WARP) { GUILayout.Label("Power:"); operatorNode.power = EditorGUILayout.Slider(operatorNode.power, -.5f, .5f); node.rect.height += controlHeight; } if (operatorNode.type == OperatorNode.OPERATORTYPE.SELECT) { GUILayout.Label("Target:"); operatorNode.min = EditorGUILayout.Slider(operatorNode.min, -2.0f, 2.0f); GUILayout.Label("Range:"); operatorNode.max = EditorGUILayout.Slider(operatorNode.max, 0f, 2.0f); node.rect.height += controlHeight * 2.5f; } } }