Files
2026-07-13 13:13:17 +08:00

46 lines
1.5 KiB
C#

using T3.Core.Utils;
namespace Lib.numbers.@float.random;
[Guid("10673c38-8c7e-4aa1-8dcd-3f2711c709b5")]
internal sealed class Random : Instance<Random>
{
[Output(Guid = "{DFB39F6E-7B1C-41F3-9F31-B71CAEE629F9}")]
public readonly Slot<float> Result = new();
public Random()
{
Result.UpdateAction += Update;
}
private void Update(EvaluationContext context)
{
var seed = (uint)Seed.GetValue(context);
var makeUniqueForChild = UniqueForChild.GetValue(context);
var childId = SymbolChildId;
var bigInteger= new BigInteger(childId.ToByteArray());
var childSeed = makeUniqueForChild
? (uint)(bigInteger & 0xFFFFFFFF)
: 0;
var randomValue = MathUtils.Hash01(childSeed + seed);
Result.Value = MathUtils.RemapAndClamp(randomValue,
0f,1f,
Min.GetValue(context), Max.GetValue(context));
}
[Input(Guid = "{F2513EAD-7022-4774-8767-7F33D1B92B26}")]
public readonly InputSlot<int> Seed = new();
[Input(Guid = "48762E06-8377-464B-8FB9-C7D3B51C3F8E")]
public readonly InputSlot<float> Min = new();
[Input(Guid = "5755454F-98FE-49EF-9611-A7C3750C4F9A")]
public readonly InputSlot<float> Max = new();
[Input(Guid = "A16F6862-868B-4D83-88F5-C7AAC7616A38")]
public readonly InputSlot<bool> UniqueForChild = new();
}