Skip to content

Commit

Permalink
Create New node Is User in Noclip
Browse files Browse the repository at this point in the history
Create New node Is User in Noclip
  • Loading branch information
Xlinka authored Jan 21, 2024
2 parents db35af0 + 2faf97b commit 5849197
Show file tree
Hide file tree
Showing 7 changed files with 91 additions and 0 deletions.
File renamed without changes.
61 changes: 61 additions & 0 deletions Bindings/User/IsUserInNoclipBinding.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
using System;
using Elements.Core;
using FrooxEngine;
using FrooxEngine.ProtoFlux;
using ProtoFlux.Core;
using ProtoFlux.Runtimes.Execution;
using FrooxEngine.ProtoFlux.Locomotion;

[Category(new string[] { "ProtoFlux/Runtimes/Execution/Nodes/Obsidian/Locomotion" })]
public class IsUserInNoClipBinding : FrooxEngine.ProtoFlux.Runtimes.Execution.ValueFunctionNode<ExecutionContext, bool>
{
public readonly SyncRef<INodeObjectOutput<User>> User;

public override Type NodeType => typeof(IsUserInNoClipNode);

public IsUserInNoClipNode TypedNodeInstance { get; private set; }

public override INode NodeInstance => TypedNodeInstance;

public override int NodeInputCount => base.NodeInputCount + 1;

public override N Instantiate<N>()
{
if (TypedNodeInstance != null)
{
throw new InvalidOperationException("Node has already been instantiated");
}
IsUserInNoClipNode isUserInNoClipNodeInstance = (TypedNodeInstance = new IsUserInNoClipNode());
return isUserInNoClipNodeInstance as N;
}

protected override void AssociateInstanceInternal(INode node)
{
if (node is IsUserInNoClipNode typedNodeInstance)
{
TypedNodeInstance = typedNodeInstance;
return;
}
throw new ArgumentException("Node instance is not of type " + typeof(IsUserInNoClipNode));
}

public override void ClearInstance()
{
TypedNodeInstance = null;
}

protected override ISyncRef GetInputInternal(ref int index)
{
ISyncRef inputInternal = base.GetInputInternal(ref index);
if (inputInternal != null)
{
return inputInternal;
}
if (index == 0)
{
return User;
}
index -= 1;
return null;
}
}
File renamed without changes.
30 changes: 30 additions & 0 deletions ProtoFlux/Users/IsUserInNoclipNode.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
using FrooxEngine;
using ProtoFlux.Core;
using ProtoFlux.Runtimes.Execution;

namespace FrooxEngine.ProtoFlux.Locomotion
{
[ContinuouslyChanging]
[NodeCategory("ProtoFlux/Obsidian/Locomotion")]
public class IsUserInNoClipNode : ValueFunctionNode<ExecutionContext, bool>
{
public readonly ObjectInput<User> User;

protected override bool Compute(ExecutionContext context)
{
User user = User.Evaluate(context);
if (user == null)
{
return false;
}

LocomotionController locomotionController = user.Root?.GetRegisteredComponent<LocomotionController>();
if (locomotionController == null)
{
return false;
}

return locomotionController.ActiveModule.GetType() == typeof(NoclipLocomotion);
}
}
}

0 comments on commit 5849197

Please sign in to comment.