1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
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
}
}
|