1 |
using System; |
2 |
|
3 |
namespace Oni.Dae |
4 |
{ |
5 |
internal class TransformRotate : Transform |
6 |
{ |
7 |
private static readonly string[] valueNames = new[] { "X", "Y", "Z", "ANGLE" }; |
8 |
|
9 |
public TransformRotate() |
10 |
: base(4) |
11 |
{ |
12 |
} |
13 |
|
14 |
public TransformRotate(Vector3 axis, float angle) |
15 |
: base(4) |
16 |
{ |
17 |
Axis = axis; |
18 |
Angle = angle; |
19 |
} |
20 |
|
21 |
public TransformRotate(string sid, Vector3 axis, float angle) |
22 |
: base(sid, 4) |
23 |
{ |
24 |
Axis = axis; |
25 |
Angle = angle; |
26 |
} |
27 |
|
28 |
public Vector3 Axis |
29 |
{ |
30 |
get { return new Vector3(Values); } |
31 |
set { value.CopyTo(Values); } |
32 |
} |
33 |
|
34 |
public float Angle |
35 |
{ |
36 |
get { return Values[3]; } |
37 |
set { Values[3] = value; } |
38 |
} |
39 |
|
40 |
public Sampler AngleAnimation => GetAnimation(3); |
41 |
|
42 |
public override Matrix ToMatrix() => Matrix.CreateFromAxisAngle(Axis, MathHelper.ToRadians(Angle)); |
43 |
public Quaternion ToQuaternion() => Quaternion.CreateFromAxisAngle(Axis, MathHelper.ToRadians(Angle)); |
44 |
|
45 |
public override int ValueNameToValueIndex(string name) => Array.FindIndex(valueNames, x => string.Equals(x, name, StringComparison.OrdinalIgnoreCase)); |
46 |
public override string ValueIndexToValueName(int index) => valueNames[index]; |
47 |
} |
48 |
} |