MathNode.cs 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. using PixiEditor.ChangeableDocument.Changeables.Animations;
  2. using PixiEditor.ChangeableDocument.Changeables.Graph.Interfaces;
  3. using PixiEditor.ChangeableDocument.Enums;
  4. using PixiEditor.DrawingApi.Core.Surface.ImageData;
  5. namespace PixiEditor.ChangeableDocument.Changeables.Graph.Nodes;
  6. public class MathNode : Node
  7. {
  8. public FieldOutputProperty<double> Result { get; }
  9. public InputProperty<MathNodeMode> Mode { get; }
  10. public InputProperty<bool> Clamp { get; }
  11. public FieldInputProperty<double> X { get; }
  12. public FieldInputProperty<double> Y { get; }
  13. public MathNode()
  14. {
  15. Result = CreateFieldOutput(nameof(Result), "RESULT", Calculate);
  16. Mode = CreateInput(nameof(Mode), "MATH_MODE", MathNodeMode.Add);
  17. Clamp = CreateInput(nameof(Clamp), "CLAMP", false);
  18. X = CreateFieldInput(nameof(X), "X", 0d);
  19. Y = CreateFieldInput(nameof(Y), "Y", 0d);
  20. }
  21. private double Calculate(FieldContext context)
  22. {
  23. var (x, y) = GetValues(context);
  24. var result = Mode.Value switch
  25. {
  26. MathNodeMode.Add => x + y,
  27. MathNodeMode.Subtract => x - y,
  28. MathNodeMode.Multiply => x * y,
  29. MathNodeMode.Divide => x / y
  30. };
  31. if (Clamp.Value)
  32. {
  33. result = Math.Clamp(result, 0, 1);
  34. }
  35. return result;
  36. }
  37. private (double x, double y) GetValues(FieldContext context) => (X.Value(context), Y.Value(context));
  38. protected override Image? OnExecute(KeyFrameTime frameTime)
  39. {
  40. return null;
  41. }
  42. public override bool Validate() => true;
  43. public override Node CreateCopy() => new MathNode();
  44. }