Reign.Video.Abstraction.SoftwareModel.init C# (CSharp) Method

init() private method

private init ( Stream stream, Loader loadedCallback ) : void
stream Stream
loadedCallback Reign.Core.Loader
return void
        private void init(Stream stream, Loader.LoadedCallbackMethod loadedCallback)
        {
            try
            {
                var xml = new XmlSerializer(typeof(RMXModel), "");
                var rmx = (RMXModel)xml.Deserialize(stream);
                rmx.Init();

                // check file version
                if (rmx.Version != 1.0f) Debug.ThrowError("SoftwareModel", "Unsuported file version, must be 1.0");

                // frames
                FrameStart = rmx.FrameStart;
                FrameEnd = rmx.FrameEnd;
                FPS = rmx.FPS;

                // materials
                Materials = new List<SoftwareMaterial>();
                if (rmx.Materials.Materials != null)
                {
                    foreach (var material in rmx.Materials.Materials)
                    {
                        Materials.Add(new SoftwareMaterial(material));
                    }
                }

                // meshes
                Meshes = new List<SoftwareMesh>();
                if (rmx.Meshes.Meshes != null)
                {
                    foreach (var mesh in rmx.Meshes.Meshes)
                    {
                        Meshes.Add(new SoftwareMesh(this, mesh));
                    }
                }

                // actions
                Actions = new List<SoftwareAction>();
                if (rmx.Actions.Actions != null)
                {
                    foreach (var action in rmx.Actions.Actions)
                    {
                        Actions.Add(new SoftwareAction(action));
                    }
                }

                // armatures
                Armatures = new List<SoftwareArmature>();
                if (rmx.Armatures.Armatures != null)
                {
                    foreach (var armature in rmx.Armatures.Armatures)
                    {
                        Armatures.Add(new SoftwareArmature(armature));
                    }
                }

                // objects
                Objects = new List<SoftwareObject>();
                if (rmx.RMXObjects.Objects != null)
                {
                    foreach (var o in rmx.RMXObjects.Objects)
                    {
                        if (o.Type == "MESH") Objects.Add(new SoftwareObjectMesh(this, o));
                        else if (o.Type == "ARMATURE") Objects.Add(new SoftwareObjectArmature(this, o));
                    }

                    int i = 0;
                    foreach (var o in Objects)
                    {
                        o.linkObjects(rmx.RMXObjects.Objects[i]);
                        ++i;
                    }
                }
            }
            catch (Exception e)
            {
                FailedToLoad = true;
                Loader.AddLoadableException(e);
                if (loadedCallback != null) loadedCallback(this, false);
                return;
            }

            Loaded = true;
            if (loadedCallback != null) loadedCallback(this, true);
        }