1 |
using System; |
2 |
|
3 |
namespace Oni.Physics |
4 |
{ |
5 |
internal class ObjectDatWriter |
6 |
{ |
7 |
internal static ImporterDescriptor WriteAnimation(ObjectAnimation animation, Importer importer) |
8 |
{ |
9 |
var frame0 = animation.Keys[0]; |
10 |
var scaleMatrix = Matrix.CreateScale(frame0.Scale); |
11 |
|
12 |
var startMatrix = scaleMatrix |
13 |
* Matrix.CreateFromQuaternion(frame0.Rotation) |
14 |
* Matrix.CreateTranslation(frame0.Translation); |
15 |
|
16 |
var oban = importer.CreateInstance(TemplateTag.OBAN, animation.Name); |
17 |
|
18 |
using (var writer = oban.OpenWrite(12)) |
19 |
{ |
20 |
writer.Write((int)animation.Flags); |
21 |
writer.WriteMatrix4x3(startMatrix); |
22 |
writer.WriteMatrix4x3(scaleMatrix); |
23 |
writer.WriteInt16(1); |
24 |
writer.WriteUInt16(animation.Length); |
25 |
writer.WriteInt16(animation.Stop); |
26 |
writer.WriteUInt16(animation.Keys.Length); |
27 |
|
28 |
foreach (var key in animation.Keys) |
29 |
{ |
30 |
writer.Write(key.Rotation); |
31 |
writer.Write(key.Translation); |
32 |
writer.Write(key.Time); |
33 |
} |
34 |
} |
35 |
|
36 |
return oban; |
37 |
} |
38 |
} |
39 |
} |