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); } }