Skip to content

Commit

Permalink
Merge pull request #246 from stevehalliwell/stdlib-updates
Browse files Browse the repository at this point in the history
Merge stdlib-updates into main
  • Loading branch information
stevehalliwell authored Mar 20, 2024
2 parents 0575279 + 015a170 commit 7e3557e
Showing 1 changed file with 29 additions and 1 deletion.
30 changes: 29 additions & 1 deletion ulox/ulox.core/Package/Runtime/Library/MathStdLibrary.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ internal static InstanceInternal MakeMathInstance()
(nameof(Pow), Value.New(Pow, 1, 2)),
(nameof(Rad2Deg), Value.New(Rad2Deg, 1, 1)),
(nameof(Rand), Value.New(Rand, 1, 0)),
(nameof(RandUnitCircle), Value.New(RandUnitCircle, 2, 0)),
(nameof(Round), Value.New(Round, 1, 1)),
(nameof(Floor), Value.New(Floor, 1, 1)),
(nameof(Ceil), Value.New(Ceil, 1, 1)),
Expand All @@ -34,7 +35,8 @@ internal static InstanceInternal MakeMathInstance()
(nameof(Tan), Value.New(Tan, 1, 1)),
(nameof(Max), Value.New(Max, 1, 2)),
(nameof(Min), Value.New(Min, 1, 2)),
(nameof(Clamp), Value.New(Clamp, 1, 3))
(nameof(Clamp), Value.New(Clamp, 1, 3)),
(nameof(MoveTowards), Value.New(MoveTowards, 1, 3))
);

diLibInst.Freeze();
Expand All @@ -48,6 +50,17 @@ private static NativeCallResult Rand(Vm vm)
return NativeCallResult.SuccessfulExpression;
}

private static NativeCallResult RandUnitCircle(Vm vm)
{
var a = _random.NextDouble() * 2 * Math.PI;
var r = Math.Sqrt(_random.NextDouble());
var x = r * Math.Cos(a);
var y = r * Math.Sin(a);
vm.SetNativeReturn(0, Value.New(x));
vm.SetNativeReturn(1, Value.New(y));
return NativeCallResult.SuccessfulExpression;
}

private static NativeCallResult Round(Vm vm)
{
var arg = vm.GetArg(1);
Expand Down Expand Up @@ -241,5 +254,20 @@ private static NativeCallResult Clamp(Vm vm)
vm.SetNativeReturn(0, Value.New(result));
return NativeCallResult.SuccessfulExpression;
}

private static NativeCallResult MoveTowards(Vm vm)
{
var arg1 = vm.GetArg(1).val.asDouble;
var arg2 = vm.GetArg(2).val.asDouble;
var arg3 = vm.GetArg(3).val.asDouble;
var delta = arg2 - arg1;
var result = arg2;
if (Math.Abs(delta) > arg3)
{
result = arg1 + Math.Sign(delta) * arg3;
}
vm.SetNativeReturn(0, Value.New(result));
return NativeCallResult.SuccessfulExpression;
}
}
}

0 comments on commit 7e3557e

Please sign in to comment.