diff options
author | chai <chaifix@163.com> | 2019-08-14 22:50:43 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2019-08-14 22:50:43 +0800 |
commit | 15740faf9fe9fe4be08965098bbf2947e096aeeb (patch) | |
tree | a730ec236656cc8cab5b13f088adfaed6bb218fb /Runtime/Graphs/UnityEngine.Graphs/LogicNodeLibrary/Rigidbody/RigidbodyNodes.cs |
Diffstat (limited to 'Runtime/Graphs/UnityEngine.Graphs/LogicNodeLibrary/Rigidbody/RigidbodyNodes.cs')
-rw-r--r-- | Runtime/Graphs/UnityEngine.Graphs/LogicNodeLibrary/Rigidbody/RigidbodyNodes.cs | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/Runtime/Graphs/UnityEngine.Graphs/LogicNodeLibrary/Rigidbody/RigidbodyNodes.cs b/Runtime/Graphs/UnityEngine.Graphs/LogicNodeLibrary/Rigidbody/RigidbodyNodes.cs new file mode 100644 index 0000000..d151a62 --- /dev/null +++ b/Runtime/Graphs/UnityEngine.Graphs/LogicNodeLibrary/Rigidbody/RigidbodyNodes.cs @@ -0,0 +1,104 @@ +using UnityEngine; + +namespace UnityEngine.Graphs.LogicGraph +{ + public class RigidbodyNode + { + #if REIMPLEMENT_USING_CLASS_NODES + [Logic(typeof(Rigidbody), typeof(NodeLibrary.StartStopEvents))] + public static IEnumerator Force (Rigidbody self, ByRef<NodeLibrary.StartStopEvents> evt, Vector3 force, bool localSpace, bool ignoreMass) + { + if (evt.Value == NodeLibrary.StartStopEvents.Stop) + yield break; + if (self) + { + ForceMode mode = (ignoreMass ? ForceMode.Acceleration : ForceMode.Force); + + if (localSpace) + { + while (evt.Value != NodeLibrary.StartStopEvents.Stop) + { + yield return new WaitForFixedUpdate(); + self.AddRelativeForce(force, mode); + } + } + else + { + while (evt.Value != NodeLibrary.StartStopEvents.Stop) + { + yield return new WaitForFixedUpdate(); + self.AddForce(force, mode); + } + } + } + else + Debug.LogWarning("Force self parameter is null"); + } + + [Logic(typeof(Rigidbody), typeof(NodeLibrary.StartStopEvents))] + public static IEnumerator Torque (Rigidbody self, ByRef<NodeLibrary.StartStopEvents> evt, Vector3 torque, bool localSpace, bool ignoreMass) + { + if (evt.Value == NodeLibrary.StartStopEvents.Stop) + yield break; + if (self) + { + ForceMode mode = (ignoreMass ? ForceMode.Acceleration : ForceMode.Force); + + if (localSpace) + { + while (evt.Value != NodeLibrary.StartStopEvents.Stop) + { + yield return new WaitForFixedUpdate(); + self.AddRelativeTorque(torque, mode); + } + } + else + { + while (evt.Value != NodeLibrary.StartStopEvents.Stop) + { + yield return new WaitForFixedUpdate(); + self.AddTorque(torque, mode); + } + } + } + else + Debug.LogWarning("Torque self parameter is null"); + } + #endif + + [Logic(typeof(Rigidbody))] + public static void ApplyForce (Rigidbody self, Vector3 force, Space relativeTo, ForceMode forceMode) + { + if (relativeTo == Space.Self) + self.AddRelativeForce(force, forceMode); + else + self.AddForce(force, forceMode); + } + + [Logic(typeof(Rigidbody))] + public static void ApplyTorque (Rigidbody self, Vector3 torque, Space relativeTo, ForceMode forceMode) + { + if (relativeTo == Space.Self) + self.AddRelativeTorque(torque, forceMode); + else + self.AddTorque(torque, forceMode); + } + + [Logic(typeof(Rigidbody))] + public static void SetVelocity (Rigidbody self, Vector3 velocity, Space relativeTo) + { + if (relativeTo == Space.Self) + velocity = self.transform.rotation * velocity; + self.velocity = velocity; + } + + [Logic(typeof(Rigidbody))] + public static void SetAngularVelocity (Rigidbody self, Vector3 angularVelocity, Space relativeTo) + { + if (relativeTo == Space.Self) + angularVelocity = self.transform.rotation * angularVelocity; + self.angularVelocity = angularVelocity; + } + } + +} |