rokojori_action_library/Runtime/Actions/Values/NumberMath.cs

72 lines
1.7 KiB
C#
Raw Normal View History

2026-10-06 18:50:28 +00:00
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;
}
}
}