From 400c75340adbd014679b4bdee9f6a5c80e8c0b4e Mon Sep 17 00:00:00 2001 From: xLinka Date: Tue, 3 Mar 2026 16:00:34 +0000 Subject: [PATCH 1/2] Create SlotToBodyNode.cs https://github.com/Yellow-Dog-Man/Resonite-Issues/issues/6313 --- .../ProtoFlux/Users/Avatar/SlotToBodyNode.cs | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 ProjectObsidian/ProtoFlux/Users/Avatar/SlotToBodyNode.cs diff --git a/ProjectObsidian/ProtoFlux/Users/Avatar/SlotToBodyNode.cs b/ProjectObsidian/ProtoFlux/Users/Avatar/SlotToBodyNode.cs new file mode 100644 index 0000000..1c774b4 --- /dev/null +++ b/ProjectObsidian/ProtoFlux/Users/Avatar/SlotToBodyNode.cs @@ -0,0 +1,40 @@ +using FrooxEngine; +using FrooxEngine.ProtoFlux; +using ProtoFlux.Core; +using ProtoFlux.Runtimes.Execution; +using Renderite.Shared; + +namespace ProtoFlux.Runtimes.Execution.Nodes.Obsidian.Users.Avatar +{ + [NodeCategory("Obsidian/Avatar")] + public class SlotToBodyNode : VoidNode + { + public ObjectArgument Slot; + + public readonly ValueOutput Node; + + protected override void ComputeOutputs(FrooxEngineContext context) + { + Slot slot = 0.ReadObject(context); + BodyNode result = BodyNode.NONE; + + if (slot != null && !slot.IsRemoved) + { + BipedRig rig = slot.GetComponentInParents(); + if (rig != null) + { + result = rig.GetBoneType(slot); + } + } + + Node.Write(result, context); + } + + public SlotToBodyNode() + { + Node = new ValueOutput(this); + } + } +} + + From b4ff549f38b86853510b274f7dcf56d0e5d6a373 Mon Sep 17 00:00:00 2001 From: xLinka Date: Tue, 3 Mar 2026 16:14:13 +0000 Subject: [PATCH 2/2] Add Ceil/Floor/Round ToInterval nodes Add six new ProtoFlux Obsidian math nodes (float and double variants): CeilToInterval, FloorToInterval, and RoundToInterval. reference issue is https://github.com/Yellow-Dog-Man/Resonite-Issues/issues/6289 --- .../ProtoFlux/Math/CeilToInterval_Double.cs | 21 +++++++++++++++++++ .../ProtoFlux/Math/CeilToInterval_Float.cs | 21 +++++++++++++++++++ .../ProtoFlux/Math/FloorToInterval_Double.cs | 21 +++++++++++++++++++ .../ProtoFlux/Math/FloorToInterval_Float.cs | 21 +++++++++++++++++++ .../ProtoFlux/Math/RoundToInterval_Double.cs | 21 +++++++++++++++++++ .../ProtoFlux/Math/RoundToInterval_Float.cs | 21 +++++++++++++++++++ 6 files changed, 126 insertions(+) create mode 100644 ProjectObsidian/ProtoFlux/Math/CeilToInterval_Double.cs create mode 100644 ProjectObsidian/ProtoFlux/Math/CeilToInterval_Float.cs create mode 100644 ProjectObsidian/ProtoFlux/Math/FloorToInterval_Double.cs create mode 100644 ProjectObsidian/ProtoFlux/Math/FloorToInterval_Float.cs create mode 100644 ProjectObsidian/ProtoFlux/Math/RoundToInterval_Double.cs create mode 100644 ProjectObsidian/ProtoFlux/Math/RoundToInterval_Float.cs diff --git a/ProjectObsidian/ProtoFlux/Math/CeilToInterval_Double.cs b/ProjectObsidian/ProtoFlux/Math/CeilToInterval_Double.cs new file mode 100644 index 0000000..e1c9e5d --- /dev/null +++ b/ProjectObsidian/ProtoFlux/Math/CeilToInterval_Double.cs @@ -0,0 +1,21 @@ +using Elements.Core; +using ProtoFlux.Core; +using ProtoFlux.Runtimes.Execution; +using FrooxEngine.ProtoFlux; + +namespace ProtoFlux.Runtimes.Execution.Nodes.Obsidian.Math +{ + [NodeName("Ceil To Interval")] + [NodeCategory("Obsidian/Math")] + public class CeilToInterval_Double : ValueFunctionNode + { + public ValueInput Value; + public ValueInput Interval; + + protected override double Compute(FrooxEngineContext context) + { + double interval = Interval.Evaluate(context); + return MathX.Ceil(Value.Evaluate(context) / interval) * interval; + } + } +} diff --git a/ProjectObsidian/ProtoFlux/Math/CeilToInterval_Float.cs b/ProjectObsidian/ProtoFlux/Math/CeilToInterval_Float.cs new file mode 100644 index 0000000..3f1c8ee --- /dev/null +++ b/ProjectObsidian/ProtoFlux/Math/CeilToInterval_Float.cs @@ -0,0 +1,21 @@ +using Elements.Core; +using ProtoFlux.Core; +using ProtoFlux.Runtimes.Execution; +using FrooxEngine.ProtoFlux; + +namespace ProtoFlux.Runtimes.Execution.Nodes.Obsidian.Math +{ + [NodeName("Ceil To Interval")] + [NodeCategory("Obsidian/Math")] + public class CeilToInterval_Float : ValueFunctionNode + { + public ValueInput Value; + public ValueInput Interval; + + protected override float Compute(FrooxEngineContext context) + { + float interval = Interval.Evaluate(context); + return MathX.Ceil(Value.Evaluate(context) / interval) * interval; + } + } +} diff --git a/ProjectObsidian/ProtoFlux/Math/FloorToInterval_Double.cs b/ProjectObsidian/ProtoFlux/Math/FloorToInterval_Double.cs new file mode 100644 index 0000000..5ab20af --- /dev/null +++ b/ProjectObsidian/ProtoFlux/Math/FloorToInterval_Double.cs @@ -0,0 +1,21 @@ +using Elements.Core; +using ProtoFlux.Core; +using ProtoFlux.Runtimes.Execution; +using FrooxEngine.ProtoFlux; + +namespace ProtoFlux.Runtimes.Execution.Nodes.Obsidian.Math +{ + [NodeName("Floor To Interval")] + [NodeCategory("Obsidian/Math")] + public class FloorToInterval_Double : ValueFunctionNode + { + public ValueInput Value; + public ValueInput Interval; + + protected override double Compute(FrooxEngineContext context) + { + double interval = Interval.Evaluate(context); + return MathX.Floor(Value.Evaluate(context) / interval) * interval; + } + } +} diff --git a/ProjectObsidian/ProtoFlux/Math/FloorToInterval_Float.cs b/ProjectObsidian/ProtoFlux/Math/FloorToInterval_Float.cs new file mode 100644 index 0000000..a5fbab1 --- /dev/null +++ b/ProjectObsidian/ProtoFlux/Math/FloorToInterval_Float.cs @@ -0,0 +1,21 @@ +using Elements.Core; +using ProtoFlux.Core; +using ProtoFlux.Runtimes.Execution; +using FrooxEngine.ProtoFlux; + +namespace ProtoFlux.Runtimes.Execution.Nodes.Obsidian.Math +{ + [NodeName("Floor To Interval")] + [NodeCategory("Obsidian/Math")] + public class FloorToInterval_Float : ValueFunctionNode + { + public ValueInput Value; + public ValueInput Interval; + + protected override float Compute(FrooxEngineContext context) + { + float interval = Interval.Evaluate(context); + return MathX.Floor(Value.Evaluate(context) / interval) * interval; + } + } +} diff --git a/ProjectObsidian/ProtoFlux/Math/RoundToInterval_Double.cs b/ProjectObsidian/ProtoFlux/Math/RoundToInterval_Double.cs new file mode 100644 index 0000000..21155ab --- /dev/null +++ b/ProjectObsidian/ProtoFlux/Math/RoundToInterval_Double.cs @@ -0,0 +1,21 @@ +using Elements.Core; +using ProtoFlux.Core; +using ProtoFlux.Runtimes.Execution; +using FrooxEngine.ProtoFlux; + +namespace ProtoFlux.Runtimes.Execution.Nodes.Obsidian.Math +{ + [NodeName("Round To Interval")] + [NodeCategory("Obsidian/Math")] + public class RoundToInterval_Double : ValueFunctionNode + { + public ValueInput Value; + public ValueInput Interval; + + protected override double Compute(FrooxEngineContext context) + { + double interval = Interval.Evaluate(context); + return MathX.Round(Value.Evaluate(context) / interval) * interval; + } + } +} diff --git a/ProjectObsidian/ProtoFlux/Math/RoundToInterval_Float.cs b/ProjectObsidian/ProtoFlux/Math/RoundToInterval_Float.cs new file mode 100644 index 0000000..44d40a5 --- /dev/null +++ b/ProjectObsidian/ProtoFlux/Math/RoundToInterval_Float.cs @@ -0,0 +1,21 @@ +using Elements.Core; +using ProtoFlux.Core; +using ProtoFlux.Runtimes.Execution; +using FrooxEngine.ProtoFlux; + +namespace ProtoFlux.Runtimes.Execution.Nodes.Obsidian.Math +{ + [NodeName("Round To Interval")] + [NodeCategory("Obsidian/Math")] + public class RoundToInterval_Float : ValueFunctionNode + { + public ValueInput Value; + public ValueInput Interval; + + protected override float Compute(FrooxEngineContext context) + { + float interval = Interval.Evaluate(context); + return MathX.Round(Value.Evaluate(context) / interval) * interval; + } + } +}