/src/aerys/minko/type/parser/collada/resource/controller/Controller.as
ActionScript | 80 lines | 67 code | 13 blank | 0 comment | 7 complexity | 759d645ee4d7d8fec59a865f4f87019e MD5 | raw file
1package aerys.minko.type.parser.collada.resource.controller
2{
3 import aerys.minko.ns.minko_collada;
4 import aerys.minko.type.parser.collada.ColladaDocument;
5 import aerys.minko.type.parser.collada.instance.IInstance;
6 import aerys.minko.type.parser.collada.instance.InstanceController;
7 import aerys.minko.type.parser.collada.resource.IResource;
8
9 use namespace minko_collada;
10
11 public class Controller implements IResource
12 {
13 private static const NS : Namespace = new Namespace("http://www.collada.org/2005/11/COLLADASchema");
14
15 private var _document : ColladaDocument;
16
17 private var _id : String;
18 private var _name : String;
19 private var _skin : Skin;
20 private var _morph : Morph;
21
22 public function get id() : String { return _id; }
23 public function get name() : String { return _name; }
24 public function get skin() : Skin { return _skin; }
25 public function get morph() : Morph { return _morph; }
26
27 public static function fillStoreFromXML(xmlDocument : XML,
28 document : ColladaDocument,
29 store : Object) : void
30 {
31 var xmlControllerLibrary : XML = xmlDocument..NS::library_controllers[0];
32 if (!xmlControllerLibrary)
33 return;
34
35 var xmlControllers : XMLList = xmlControllerLibrary.NS::controller;
36
37 for each (var xmlController : XML in xmlControllers)
38 {
39 var controller : Controller = Controller.createFromXML(xmlController, document);
40 store[controller.id] = controller;
41 }
42 }
43
44 public static function createFromXML(xmlController : XML,
45 document : ColladaDocument) : Controller
46 {
47 var id : String = xmlController.@id;
48 var name : String = xmlController.@name;
49 var skin : Skin = null;
50 var morph : Morph = null;
51
52 if (xmlController.NS::skin.length() == 1)
53 skin = Skin.createFromXML(xmlController.NS::skin[0], document);
54 else if (xmlController.NS::morph.length() == 1)
55 morph = Morph.createFromXML(xmlController.NS::morph[0], document);
56 else
57 throw new Error('Invalid Controller');
58
59 return new Controller(id, name, skin, morph, document);
60 }
61
62 public function Controller(id : String,
63 name : String,
64 skin : Skin,
65 morph : Morph,
66 document : ColladaDocument)
67 {
68 _id = id;
69 _name = name;
70 _skin = skin;
71 _morph = morph;
72 _document = document;
73 }
74
75 public function createInstance() : IInstance
76 {
77 return new InstanceController(_document, _id);
78 }
79 }
80}