[1114] | 1 | using System;
|
---|
| 2 | using System.Collections.Generic;
|
---|
| 3 | using System.IO;
|
---|
| 4 | using System.Xml;
|
---|
| 5 |
|
---|
| 6 | namespace Oni.Level
|
---|
| 7 | {
|
---|
| 8 | using Physics;
|
---|
| 9 |
|
---|
| 10 | partial class LevelImporter
|
---|
| 11 | {
|
---|
| 12 | private void ReadCameras(XmlReader xml, string basePath)
|
---|
| 13 | {
|
---|
| 14 | if (!xml.IsStartElement("Cameras"))
|
---|
| 15 | return;
|
---|
| 16 |
|
---|
| 17 | if (xml.SkipEmpty())
|
---|
| 18 | return;
|
---|
| 19 |
|
---|
| 20 | xml.ReadStartElement();
|
---|
| 21 |
|
---|
| 22 | while (xml.IsStartElement())
|
---|
| 23 | ReadCamera(xml, basePath);
|
---|
| 24 |
|
---|
| 25 | xml.ReadEndElement();
|
---|
| 26 | }
|
---|
| 27 |
|
---|
| 28 | private void ReadCamera(XmlReader xml, string basePath)
|
---|
| 29 | {
|
---|
| 30 | var filePath = Path.Combine(basePath, xml.GetAttribute("Path"));
|
---|
| 31 | var scene = LoadScene(filePath);
|
---|
| 32 | var clips = new List<ObjectAnimationClip>();
|
---|
| 33 |
|
---|
| 34 | if (filePath.Contains("Camout"))
|
---|
| 35 | {
|
---|
| 36 | Console.WriteLine(filePath);
|
---|
| 37 | }
|
---|
| 38 |
|
---|
| 39 | ReadSequence(xml, "Camera", name =>
|
---|
| 40 | {
|
---|
| 41 | switch (name)
|
---|
| 42 | {
|
---|
| 43 | case "Animation":
|
---|
| 44 | clips.Add(ReadAnimationClip(xml));
|
---|
| 45 | return true;
|
---|
| 46 |
|
---|
| 47 | default:
|
---|
| 48 | return false;
|
---|
| 49 | }
|
---|
| 50 | });
|
---|
| 51 |
|
---|
| 52 | var props = new ObjectDaeNodeProperties();
|
---|
| 53 | props.HasPhysics = true;
|
---|
| 54 | props.Animations.AddRange(clips);
|
---|
| 55 |
|
---|
| 56 | var importer = new ObjectDaeImporter(null, new Dictionary<string, Akira.AkiraDaeNodeProperties> { { scene.Id, props } });
|
---|
| 57 |
|
---|
| 58 | importer.Import(scene);
|
---|
| 59 |
|
---|
| 60 | foreach (var node in importer.Nodes)
|
---|
| 61 | {
|
---|
| 62 | foreach (var animation in node.Animations)
|
---|
| 63 | {
|
---|
| 64 | var writer = new DatWriter();
|
---|
| 65 | ObjectDatWriter.WriteAnimation(animation, writer);
|
---|
| 66 | writer.Write(outputDirPath);
|
---|
| 67 | }
|
---|
| 68 | }
|
---|
| 69 | }
|
---|
| 70 |
|
---|
| 71 | private void ReadSequence(XmlReader xml, string name, Func<string, bool> action)
|
---|
| 72 | {
|
---|
| 73 | if (!xml.SkipEmpty())
|
---|
| 74 | {
|
---|
| 75 | xml.ReadStartElement(name);
|
---|
| 76 |
|
---|
| 77 | while (xml.IsStartElement())
|
---|
| 78 | {
|
---|
| 79 | if (!action(xml.LocalName))
|
---|
| 80 | {
|
---|
| 81 | error.WriteLine("Unknown element {0}", xml.LocalName);
|
---|
| 82 | xml.Skip();
|
---|
| 83 | }
|
---|
| 84 | }
|
---|
| 85 |
|
---|
| 86 | xml.ReadEndElement();
|
---|
| 87 | }
|
---|
| 88 | }
|
---|
| 89 | }
|
---|
| 90 | }
|
---|