summaryrefslogtreecommitdiff
path: root/Runtime/Graphs/UnityEngine.Graphs/LogicNodeLibrary/Transform
diff options
context:
space:
mode:
Diffstat (limited to 'Runtime/Graphs/UnityEngine.Graphs/LogicNodeLibrary/Transform')
-rw-r--r--Runtime/Graphs/UnityEngine.Graphs/LogicNodeLibrary/Transform/LookAt.cs46
-rw-r--r--Runtime/Graphs/UnityEngine.Graphs/LogicNodeLibrary/Transform/MoveTo.cs45
-rw-r--r--Runtime/Graphs/UnityEngine.Graphs/LogicNodeLibrary/Transform/RotateTo.cs45
-rw-r--r--Runtime/Graphs/UnityEngine.Graphs/LogicNodeLibrary/Transform/TransformNodes.cs122
-rw-r--r--Runtime/Graphs/UnityEngine.Graphs/LogicNodeLibrary/Transform/YieldedTransformNodeBase.cs27
5 files changed, 285 insertions, 0 deletions
diff --git a/Runtime/Graphs/UnityEngine.Graphs/LogicNodeLibrary/Transform/LookAt.cs b/Runtime/Graphs/UnityEngine.Graphs/LogicNodeLibrary/Transform/LookAt.cs
new file mode 100644
index 0000000..4ba9bd0
--- /dev/null
+++ b/Runtime/Graphs/UnityEngine.Graphs/LogicNodeLibrary/Transform/LookAt.cs
@@ -0,0 +1,46 @@
+using UnityEngine;
+
+namespace UnityEngine.Graphs.LogicGraph
+{
+ public partial class TransformNodes
+ {
+ [Logic(typeof(Transform))]
+ public sealed class LookAt : YieldedTransformNodeBase
+ {
+ private readonly ILookAtRotationCalculator m_RotationCalculator;
+ private Quaternion m_InitialRotation;
+ private Vector3 m_TargetRelativePosition;
+
+ public override Transform target { set { m_Target = value; } }
+ public Vector3 targetOffset { set { m_TargetRelativePosition = value; } }
+
+
+ public LookAt ()
+ {
+ m_RotationCalculator = StandardLookAtRotationCalculator.s_Instance;
+ }
+
+ public LookAt (Transform self, Transform target, Vector3 targetRelativePosition, float time, ILookAtRotationCalculator rotationCalculator) : base (self, target, time)
+ {
+ m_TargetRelativePosition = targetRelativePosition;
+ m_RotationCalculator = rotationCalculator;
+ }
+
+ protected override void OnStart()
+ {
+ m_InitialRotation = self.rotation;
+ }
+
+ protected override void OnUpdate()
+ {
+ self.rotation = m_RotationCalculator.CalculateRotation(self, m_Target, m_TargetRelativePosition, m_InitialRotation, m_Percentage, m_Curve);
+ }
+
+ protected override void OnDone()
+ {
+ self.rotation = m_RotationCalculator.CalculateRotation(self, m_Target, m_TargetRelativePosition, m_InitialRotation, 1.0f, m_Curve);
+ }
+ }
+ }
+}
+
diff --git a/Runtime/Graphs/UnityEngine.Graphs/LogicNodeLibrary/Transform/MoveTo.cs b/Runtime/Graphs/UnityEngine.Graphs/LogicNodeLibrary/Transform/MoveTo.cs
new file mode 100644
index 0000000..b60454c
--- /dev/null
+++ b/Runtime/Graphs/UnityEngine.Graphs/LogicNodeLibrary/Transform/MoveTo.cs
@@ -0,0 +1,45 @@
+using UnityEngine;
+
+namespace UnityEngine.Graphs.LogicGraph
+{
+ public partial class TransformNodes
+ {
+ [Logic (typeof (Transform))]
+ public sealed class MoveTo : YieldedTransformNodeBase
+ {
+ private readonly IMoveToPositionCalculator m_PositionCalculator;
+ private Vector3 m_InitialPosition;
+ private Vector3 m_TargetRelativePosition;
+
+ public override Transform target { set { m_Target = value; } }
+ public Vector3 targetOffset { set { m_TargetRelativePosition = value; } }
+
+ public MoveTo()
+ {
+ m_PositionCalculator = StandardMoveToPositionCalculator.s_Instance;
+ }
+
+ public MoveTo(Transform self, Transform target, Vector3 targetRelativePosition, float time, IMoveToPositionCalculator positionCalculator) : base (self, target, time)
+ {
+ m_TargetRelativePosition = targetRelativePosition;
+ m_PositionCalculator = positionCalculator;
+ }
+
+
+ protected override void OnStart()
+ {
+ m_InitialPosition = self.position;
+ }
+
+ protected override void OnUpdate()
+ {
+ self.position = m_PositionCalculator.CalculatePosition(m_Target, m_TargetRelativePosition, m_InitialPosition, m_Percentage, m_Curve);
+ }
+
+ protected override void OnDone()
+ {
+ self.position = m_PositionCalculator.CalculatePosition(m_Target, m_TargetRelativePosition, m_InitialPosition, 1.0f, m_Curve);
+ }
+ }
+ }
+}
diff --git a/Runtime/Graphs/UnityEngine.Graphs/LogicNodeLibrary/Transform/RotateTo.cs b/Runtime/Graphs/UnityEngine.Graphs/LogicNodeLibrary/Transform/RotateTo.cs
new file mode 100644
index 0000000..8b44479
--- /dev/null
+++ b/Runtime/Graphs/UnityEngine.Graphs/LogicNodeLibrary/Transform/RotateTo.cs
@@ -0,0 +1,45 @@
+using UnityEngine;
+
+namespace UnityEngine.Graphs.LogicGraph
+{
+ public partial class TransformNodes
+ {
+ [Logic (typeof (Transform))]
+ public sealed class RotateTo : YieldedTransformNodeBase
+ {
+ private readonly IRotateToRotationCalculator m_RotationCalculator;
+ private Quaternion m_InitialRotation;
+ private Quaternion m_TargetRelativeRotation;
+
+ public override Transform target { set { m_Target = value; } }
+ public Quaternion targetOffset { set { m_TargetRelativeRotation = value; } }
+
+ public RotateTo ()
+ {
+ m_RotationCalculator = StandardRotateToRotationCalculator.s_Instance;
+ }
+
+ public RotateTo (Transform self, Transform target, Quaternion targetRelativeRotation, float time, IRotateToRotationCalculator rotationCalculator)
+ : base (self, target, time)
+ {
+ m_TargetRelativeRotation = targetRelativeRotation;
+ m_RotationCalculator = rotationCalculator;
+ }
+
+ protected override void OnStart ()
+ {
+ m_InitialRotation = self.rotation;
+ }
+
+ protected override void OnUpdate ()
+ {
+ self.rotation = m_RotationCalculator.CalculateRotation (m_Target, m_TargetRelativeRotation, m_InitialRotation, m_Percentage, m_Curve);
+ }
+
+ protected override void OnDone ()
+ {
+ self.rotation = m_RotationCalculator.CalculateRotation (m_Target, m_TargetRelativeRotation, m_InitialRotation, 1.0f, m_Curve);
+ }
+ }
+ }
+}
diff --git a/Runtime/Graphs/UnityEngine.Graphs/LogicNodeLibrary/Transform/TransformNodes.cs b/Runtime/Graphs/UnityEngine.Graphs/LogicNodeLibrary/Transform/TransformNodes.cs
new file mode 100644
index 0000000..5e99275
--- /dev/null
+++ b/Runtime/Graphs/UnityEngine.Graphs/LogicNodeLibrary/Transform/TransformNodes.cs
@@ -0,0 +1,122 @@
+using UnityEngine;
+
+namespace UnityEngine.Graphs.LogicGraph
+{
+ public partial class TransformNodes
+ {
+ #region Nodes
+ [Logic(typeof(Transform))]
+ public static void Translate(Transform self, Vector3 translation, Space relativeTo)
+ {
+ self.Translate(translation, relativeTo);
+ }
+
+ [Logic(typeof(Transform))]
+ public static void Rotate(Transform self, Vector3 axis, float angle, Space relativeTo)
+ {
+ self.Rotate(axis, angle, relativeTo);
+ }
+
+ [Logic(typeof(Transform))]
+ public static void Mimic(Transform self, Transform target, bool mimicPosition, bool mimicRotation, bool mimicScale, bool useLocalSpace)
+ {
+ if (mimicPosition)
+ if (useLocalSpace)
+ self.localPosition = target.localPosition;
+ else
+ self.position = target.position;
+
+ if (mimicRotation)
+ if (useLocalSpace)
+ self.localRotation = target.localRotation;
+ else
+ self.rotation = target.rotation;
+
+ if (mimicScale)
+ self.localScale = target.localScale;
+ }
+
+ [LogicEval(typeof(Transform))]
+ [Title("Get Position")]
+ public static Vector3 GetPosition(Transform target)
+ {
+ if (target == null)
+ return Vector3.zero;
+ return target.position;
+ }
+
+ [Logic(typeof(Transform))]
+ [Title("Set Position")]
+ public static void SetPosition(Transform target, Vector3 position)
+ {
+ if (target == null)
+ return;
+ target.position = position;
+ }
+ #endregion
+
+ #region Node Helpers
+ private static Quaternion LookAtLookRotation(Transform self, Transform target, Vector3 targetRelativePosition)
+ {
+ return Quaternion.LookRotation(AbsoluteTargetPosition(target, targetRelativePosition) - self.position);
+ }
+
+ private static Vector3 AbsoluteTargetPosition(Transform target, Vector3 targetRelativePosition)
+ {
+ if (target != null)
+ return target.position + targetRelativePosition;
+ return targetRelativePosition;
+ }
+ #endregion
+
+ #region Transform Calculators
+ public interface IMoveToPositionCalculator
+ {
+ Vector3 CalculatePosition (Transform target, Vector3 targetRelativePosition, Vector3 initialPosition, float percentage, AnimationCurve curve);
+ }
+
+ class StandardMoveToPositionCalculator : IMoveToPositionCalculator
+ {
+ public static readonly IMoveToPositionCalculator s_Instance = new StandardMoveToPositionCalculator ();
+
+ public Vector3 CalculatePosition (Transform target, Vector3 targetRelativePosition, Vector3 initialPosition, float percentage, AnimationCurve curve)
+ {
+ return Vector3.Lerp (initialPosition, AbsoluteTargetPosition (target, targetRelativePosition), curve.Evaluate (percentage));
+ }
+ }
+
+
+ public interface IRotateToRotationCalculator
+ {
+ Quaternion CalculateRotation (Transform target, Quaternion targetRelativeRotation, Quaternion initialRotation, float percentage, AnimationCurve curve);
+ }
+
+ class StandardRotateToRotationCalculator : IRotateToRotationCalculator
+ {
+ public static readonly IRotateToRotationCalculator s_Instance = new StandardRotateToRotationCalculator ();
+
+ public Quaternion CalculateRotation (Transform target, Quaternion targetRelativeRotation, Quaternion initialRotation, float percentage, AnimationCurve curve)
+ {
+ return Quaternion.Lerp (initialRotation, targetRelativeRotation * target.rotation, curve.Evaluate (percentage));
+ }
+ }
+
+
+ public interface ILookAtRotationCalculator
+ {
+ Quaternion CalculateRotation (Transform self, Transform target, Vector3 targetRelativePosition, Quaternion initialRotation, float percentage, AnimationCurve curve);
+ }
+
+ class StandardLookAtRotationCalculator : ILookAtRotationCalculator
+ {
+ public static readonly ILookAtRotationCalculator s_Instance = new StandardLookAtRotationCalculator ();
+
+ public Quaternion CalculateRotation (Transform self, Transform target, Vector3 targetRelativePosition, Quaternion initialRotation, float percentage, AnimationCurve curve)
+ {
+ return Quaternion.Lerp (initialRotation, LookAtLookRotation (self, target, targetRelativePosition), curve.Evaluate (percentage));
+ }
+ }
+ #endregion
+ }
+}
+
diff --git a/Runtime/Graphs/UnityEngine.Graphs/LogicNodeLibrary/Transform/YieldedTransformNodeBase.cs b/Runtime/Graphs/UnityEngine.Graphs/LogicNodeLibrary/Transform/YieldedTransformNodeBase.cs
new file mode 100644
index 0000000..e95f699
--- /dev/null
+++ b/Runtime/Graphs/UnityEngine.Graphs/LogicNodeLibrary/Transform/YieldedTransformNodeBase.cs
@@ -0,0 +1,27 @@
+using UnityEngine;
+
+namespace UnityEngine.Graphs.LogicGraph
+{
+ public abstract class YieldedTransformNodeBase : YieldedNodeBase
+ {
+ [LogicTarget]
+ public Transform self;
+
+ protected Transform m_Target;
+ protected AnimationCurve m_Curve;
+
+ public virtual Transform target { set { m_Target = value; } }
+ public virtual AnimationCurve curve { set { m_Curve = value; } }
+
+ protected YieldedTransformNodeBase ()
+ {
+ m_Curve = new AnimationCurve ();
+ }
+
+ protected YieldedTransformNodeBase (Transform self, Transform target, float time) : base (time)
+ {
+ this.self = self;
+ m_Target = target;
+ }
+ }
+}