using Godot; using System.Collections.Generic; using System.IO; using Rokojori.Extensions; namespace Rokojori; [Tool] [GlobalClass, Icon("res://addons/rokojori_action_library/Icons/Action.svg")] public partial class NumberMath:Action { public enum Operator { Set, Add, Substract, Multiply, Divide, Modulo, Freeze, Unfreeze, Reset } [Export] public NumberValue target; [Export] public Operator operation = Operator.Set; public enum Order { Target_Op_Source, Source_Op_Target } [Export] public Order order = Order.Target_Op_Source; [Export] public double sourceValue; [Export] public NumberValue sourceReference; protected override void _OnTrigger() { var valueRight = ( sourceReference == null ? 0 : sourceReference.value ) + sourceValue; var valueLeft = target.value; if ( order == Order.Source_Op_Target ) { var buffer = valueLeft; valueLeft = valueRight; valueRight = buffer; } switch ( operation ) { case Operator.Set: { target.value = valueRight; } break; case Operator.Add: { target.value = valueLeft + valueRight; } break; case Operator.Substract: { target.value = valueLeft - valueRight; } break; case Operator.Multiply: { target.value = valueLeft * valueRight; } break; case Operator.Divide: { target.value = valueLeft / valueRight; } break; case Operator.Modulo: { target.value = valueLeft % valueRight; } break; case Operator.Freeze: { target.FreezeValue(); } break; case Operator.Unfreeze: { target.UnfreezeValue(); } break; case Operator.Reset: { target.ResetValue(); } break; } } }