72 lines
1.7 KiB
C#
72 lines
1.7 KiB
C#
|
|
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;
|
|
}
|
|
}
|
|
} |