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 LoadZoneLights(string zoneName, List <Light> lights, float progressMin, float progressMax) { Parent.name += " - " + zoneName; for (int i = 0; i < lights.Count; i++) { Light lightData = lights[i]; ZoneLight instance = new GameObject(lightData.Name).AddComponent <ZoneLight>(); UnityEngine.Light lightComponent = instance.gameObject.AddComponent <UnityEngine.Light>(); lightComponent.intensity = 4.0f; lightComponent.bounceIntensity = 0.0f; instance.lightObject = lightComponent; //Params TransformData correctedTransform = MathUtils.ConvertTransform(lightData.Position, lightData.Rotation, Vector3.one, true, TransformMode.Standard); instance.transform.position = correctedTransform.Position; instance.transform.rotation = Quaternion.Euler(correctedTransform.Rotation); instance.Name = lightData.Name; instance.ColorName = lightData.ColorName; instance.Type = lightData.Type; instance.UnknownFloat1 = lightData.UnknownFloat1; instance.Range = lightData.Range; instance.InnerRange = lightData.InnerRange; instance.Color = lightData.Color; instance.UnknownByte1 = lightData.UnknownByte1; instance.UnknownByte2 = lightData.UnknownByte2; instance.UnknownByte3 = lightData.UnknownByte3; instance.UnknownByte4 = lightData.UnknownByte4; instance.UnknownByte5 = lightData.UnknownByte5; instance.UnknownVector1 = lightData.UnknownVector1; instance.UnknownString1 = lightData.UnknownString1; instance.ID = lightData.ID; instance.transform.parent = Parent; //Apply any changes we may have made. instance.OnValidate(); int layer = LayerMask.NameToLayer("ForgelightZoneLight"); instance.gameObject.layer = layer; foreach (Transform child in instance.transform) { child.gameObject.layer = layer; } EditorUtility.DisplayProgressBar("Loading Zone: " + zoneName, "Loading Lights: " + lightData.Name, MathUtils.Remap01((float)i / lights.Count, progressMin, progressMax)); } }
public void WriteToZone(Zone zone) { ValidateObjectUIDs(); zone.Lights.Clear(); foreach (ZoneLight zoneLight in Resources.FindObjectsOfTypeAll <ZoneLight>()) { if (zoneLight.hideFlags == HideFlags.NotEditable || zoneLight.hideFlags == HideFlags.HideAndDontSave || EditorUtility.IsPersistent(zoneLight)) { continue; } Light light = new Light(); TransformData correctedTransform = MathUtils.ConvertTransform(zoneLight.transform.position, zoneLight.transform.rotation.eulerAngles, Vector3.one, false, TransformMode.Standard); light.Position = correctedTransform.Position; Vector3 rotationData = correctedTransform.Rotation.ToRadians(); light.Rotation = new Vector4(rotationData.x, rotationData.y, rotationData.z, 1); light.Name = zoneLight.Name; light.ColorName = zoneLight.ColorName; light.Type = zoneLight.Type; light.UnknownFloat1 = zoneLight.UnknownFloat1; light.Range = zoneLight.Range; light.InnerRange = zoneLight.InnerRange; light.Color = zoneLight.Color; light.UnknownByte1 = zoneLight.UnknownByte1; light.UnknownByte2 = zoneLight.UnknownByte2; light.UnknownByte3 = zoneLight.UnknownByte3; light.UnknownByte4 = zoneLight.UnknownByte4; light.UnknownByte5 = zoneLight.UnknownByte5; light.UnknownVector1 = zoneLight.UnknownVector1; light.UnknownString1 = zoneLight.UnknownString1; light.ID = zoneLight.ID; zone.Lights.Add(light); } }
public void LoadAreaDefinitions(Areas areas, float progressMin, float progressMax) { string areasName = Path.GetFileNameWithoutExtension(areas.Name); Parent.name += " - " + areasName; for (int i = 0; i < areas.AreaDefinitions.Count; i++) { AreaDefinition areaDefinition = areas.AreaDefinitions[i]; AreaObject instance = null; switch (areaDefinition.Shape) { case "sphere": instance = GameObject.CreatePrimitive(PrimitiveType.Sphere).AddComponent <AreaObject>(); TransformData correctedSphereTransform = MathUtils.ConvertTransform(areaDefinition.Pos1, Vector4.zero, new Vector4(areaDefinition.Radius, areaDefinition.Radius, areaDefinition.Radius), false, TransformMode.Area); instance.transform.position = correctedSphereTransform.Position; instance.transform.rotation = Quaternion.Euler(correctedSphereTransform.Rotation); instance.transform.localScale = correctedSphereTransform.Scale; instance.Radius = areaDefinition.Radius; break; case "box": instance = GameObject.CreatePrimitive(PrimitiveType.Cube).AddComponent <AreaObject>(); Vector3 pos1 = areaDefinition.Pos1; Vector3 pos2 = areaDefinition.Pos2; Vector3 fScale = pos2 - pos1; fScale.x = Mathf.Abs(fScale.x); fScale.y = Mathf.Abs(fScale.y); fScale.z = Mathf.Abs(fScale.z); Vector3 fPos = (pos1 + pos2) * 0.5f; Vector4 fRot = areaDefinition.Rot; TransformData correctedBoxMatrix = MathUtils.ConvertTransform(fPos, fRot, fScale, true, TransformMode.Area); instance.transform.position = correctedBoxMatrix.Position; instance.transform.rotation = Quaternion.Euler(correctedBoxMatrix.Rotation); instance.transform.localScale = correctedBoxMatrix.Scale; instance.Pos2 = areaDefinition.Pos2; instance.Rot = areaDefinition.Rot; break; } instance.name = areaDefinition.Name; int layer = LayerMask.NameToLayer("ForgelightAreas"); instance.gameObject.layer = layer; foreach (Transform child in instance.transform) { child.gameObject.layer = layer; } instance.ID = areaDefinition.ID; instance.Name = areaDefinition.Name; instance.Shape = areaDefinition.Shape; instance.Pos1 = areaDefinition.Pos1; instance.transform.SetParent(Parent.transform, true); //We color the area definition based on its parameter type. Renderer renderer = instance.GetComponent <Renderer>(); renderer.shadowCastingMode = ShadowCastingMode.Off; renderer.receiveShadows = false; Color color = new Color(1.0f, 1.0f, 1.0f, 0.5f); if (areaDefinition.Properties != null && areaDefinition.Properties.Count > 0) { instance.Properties = new List <string>(); foreach (Property property in areaDefinition.Properties) { instance.Properties.Add(property.Type + "_" + property.ID + ": " + property.Parameters.Attributes()); } MD5 md5 = MD5.Create(); byte[] hash = md5.ComputeHash(Encoding.UTF8.GetBytes(areaDefinition.Properties[0].Type)); color.r = hash[0] / 255.0f; color.g = hash[1] / 255.0f; color.b = hash[2] / 255.0f; } if (cachedMaterials.ContainsKey(color)) { renderer.sharedMaterial = cachedMaterials[color]; } else { renderer.sharedMaterial = new Material(Shader.Find("Custom/Areas")); renderer.sharedMaterial.color = color; cachedMaterials[color] = renderer.sharedMaterial; } EditorUtility.DisplayProgressBar("Loading " + areasName, "Loading Area Definition: " + areaDefinition.Name, MathUtils.Remap01((float)i / areas.AreaDefinitions.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); } }