public void LoadZoneObjects(ForgelightGame forgelightGame, string zoneName, List <Object> objects, float progressMin, float progressMax)
        {
            Parent.name += " - " + zoneName;

            //Begin processing the file
            for (int i = 0; i < objects.Count; i++)
            {
                Object zoneObject = objects[i];

                if (zoneObject.Instances.Count > 0)
                {
                    Adr actorDef = forgelightGame.GetActorDefinition(zoneObject.ActorDefinition);

                    if (actorDef == null)
                    {
                        Debug.LogWarning("Could not find Actor Definition: " + zoneObject.ActorDefinition + "!");
                        continue;
                    }

                    foreach (Object.Instance instance in zoneObject.Instances)
                    {
                        TransformData correctedTransform = MathUtils.ConvertTransform(instance.Position, instance.Rotation, instance.Scale, true, TransformMode.Standard);

                        CreateForgelightObject(forgelightGame, actorDef, correctedTransform.Position, Quaternion.Euler(correctedTransform.Rotation), correctedTransform.Scale, zoneObject.RenderDistance, instance.LODMultiplier, instance.DontCastShadows, instance.ID);
                    }
                }

                EditorUtility.DisplayProgressBar("Loading Zone: " + zoneName, "Loading Objects: " + zoneObject.ActorDefinition, MathUtils.Remap01((float)i / objects.Count, progressMin, progressMax));
            }
        }
        public void WriteToZone(Zone zone)
        {
            //Objects
            Dictionary <string, List <ZoneObject> > actorInstances = new Dictionary <string, List <ZoneObject> >();

            //Check to make sure we don't have duplicate ID's
            ValidateObjectUIDs();

            foreach (ZoneObject zoneObject in Resources.FindObjectsOfTypeAll <ZoneObject>())
            {
                if (zoneObject.hideFlags == HideFlags.NotEditable || zoneObject.hideFlags == HideFlags.HideAndDontSave || EditorUtility.IsPersistent(zoneObject))
                {
                    continue;
                }

                string actorDef = zoneObject.actorDefinition;
                if (!actorInstances.ContainsKey(actorDef))
                {
                    actorInstances.Add(actorDef, new List <ZoneObject>());
                }

                actorInstances[actorDef].Add(zoneObject);
            }

            zone.Objects.Clear();
            foreach (var actorInstanceList in actorInstances)
            {
                Object zoneObj = new Object();

                zoneObj.ActorDefinition = actorInstanceList.Key;
                zoneObj.RenderDistance  = actorInstanceList.Value[0].renderDistance;

                zoneObj.Instances = new List <Object.Instance>();

                foreach (ZoneObject zoneObject in actorInstanceList.Value)
                {
                    //Make sure we don't have a parent.
                    Transform objectParent = zoneObject.transform.parent;
                    if (objectParent != null)
                    {
                        zoneObject.transform.SetParent(null);
                    }

                    Object.Instance instance = new Object.Instance();

                    TransformData correctedTransform = MathUtils.ConvertTransform(zoneObject.transform.position, zoneObject.transform.rotation.eulerAngles, zoneObject.transform.localScale, false, TransformMode.Standard);

                    instance.Position = correctedTransform.Position;
                    instance.Rotation = correctedTransform.Rotation.ToRadians();
                    instance.Scale    = correctedTransform.Scale;

                    instance.ID = (uint)zoneObject.ID;
                    instance.DontCastShadows = zoneObject.DontCastShadows;
                    instance.LODMultiplier   = zoneObject.lodMultiplier;

                    zoneObj.Instances.Add(instance);

                    //If we had a parent, reset our parent to the original.

                    if (objectParent != null)
                    {
                        zoneObject.transform.SetParent(objectParent);
                    }
                }

                zone.Objects.Add(zoneObj);
            }
        }