/// <summary> /// The default behaviour of a projectile is to head towards it's target at speed: /// </summary> protected virtual void Start() { if(target != null) { transform.LookAt(target.transform.position); } GetComponent<Rigidbody>().velocity = transform.forward * speed; particleSystems = GetComponentsInChildren<ParticleSystem>(); renderers = GetComponentsInChildren<MeshRenderer>(); _light = GetComponentInChildren<Light>(); flare = GetComponentInChildren<ProFlare>(); timer = 0; }
/// <summary> /// The default behaviour of a projectile is to head towards it's target at speed: /// </summary> protected virtual void Start() { if (target != null) { transform.LookAt(target.transform.position); } GetComponent <Rigidbody>().velocity = transform.forward * speed; particleSystems = GetComponentsInChildren <ParticleSystem>(); renderers = GetComponentsInChildren <MeshRenderer>(); _light = GetComponentInChildren <Light>(); flare = GetComponentInChildren <ProFlare>(); timer = 0; }
void Start () { _light = GetComponent<Light>(); if(_light == null) { Debug.LogWarning("Expected light component"); enabled = false; return; } normalIntensity = _light.intensity; flare = GetComponentInChildren<ProFlare>(); if(flare != null) { normalFlare = flare.GlobalScale; } }
override protected void Start () { base.Start(); if(data != null) { nameText.text = data.name; descriptionText.text = data.description; } flare = GetComponentInChildren<ProFlare>(); if(flare != null) { normalScale = flare.GlobalScale; normalDistance = Vector3.Distance(transform.position, Camera.main.transform.position); } starCam = Camera.main.GetComponent<StarSystemsCamera>(); canvas.alpha = 0.5f; }
void Start() { _light = GetComponent <Light>(); if (_light == null) { Debug.LogWarning("Expected light component"); enabled = false; return; } normalIntensity = _light.intensity; flare = GetComponentInChildren <ProFlare>(); if (flare != null) { normalFlare = flare.GlobalScale; } }
override protected void Start() { base.Start(); if (data != null) { nameText.text = data.name; descriptionText.text = data.description; } flare = GetComponentInChildren <ProFlare>(); if (flare != null) { normalScale = flare.GlobalScale; normalDistance = Vector3.Distance(transform.position, Camera.main.transform.position); } starCam = Camera.main.GetComponent <StarSystemsCamera>(); canvas.alpha = 0.5f; }
//Called from ProFlare.cs //First checks if the flare is already in the list, if not adds it and rebuils the Flarebatch Geometry public void AddFlare(ProFlare _flare){ bool found = false; for(int i = 0; i < Flares.Count; i++){ if(_flare == Flares[i]){ found = true; break; } } if(!found){ Flares.Add(_flare); // Debug.LogError("addFlare"); FlareOcclusionData = new FlareOcclusion[Flares.Count]; for(int i = 0; i < FlareOcclusionData.Length; i++){ FlareOcclusionData[i] = new FlareOcclusion(); if(_flare.neverCull) FlareOcclusionData[i]._CullingState = FlareOcclusion.CullingState.NeverCull; } dirty = true; } }
public override void OnInspectorGUI () { selectionCount = 0; Flares.Clear(); foreach(GameObject go in Selection.gameObjects){ ProFlare selectedFlare = go.GetComponent<ProFlare>(); if(selectedFlare){ Flares.Add(selectedFlare); selectionCount++; } } if(selectionCount > 1){ EditorGUILayout.HelpBox("Multiple Flares selected.", MessageType.Warning,false); //EditorGUI.showMixedValue = true; } _flare = target as ProFlare; CheckUndo(); #if UNITY_4_3 EditorGUI.BeginChangeCheck(); #endif FlareEditorHelper.DrawGuiDivider(); bool error = false; title = FlareEditorHelper.TitleStyle(); thinButton = FlareEditorHelper.ThinButtonStyle(); enumStyleButton = FlareEditorHelper.EnumStyleButton(); thinButtonRed = FlareEditorHelper.ThinButtonRedStyle(); EditorGUILayout.LabelField("Flare Setup :",title); GUILayout.Space(10f); dropDownButton = FlareEditorHelper.DropDownButtonStyle(); if(selectionCount <= 1) { EditorGUILayout.BeginHorizontal(); if((!_flare.EditingAtlas)&&(_flare._Atlas != null)) GUI.enabled = false; ProFlareAtlas _Atlas = EditorGUILayout.ObjectField("Flare Atlas", _flare._Atlas, typeof(ProFlareAtlas), false) as ProFlareAtlas; GUI.enabled = true; if(_flare._Atlas) if(GUILayout.Button("EDIT",GUILayout.Width(60))){ _flare.EditingAtlas = _flare.EditingAtlas ? false : true; } EditorGUILayout.EndHorizontal(); if((_flare.EditingAtlas)&&(_flare._Atlas != null)){ EditorGUILayout.HelpBox("Changing atlas can cause data loss if elements do NOT exist in the new atlas.", MessageType.Warning,false); } GUI.enabled = true; if(_flare._Atlas != _Atlas){ _flare._Atlas = _Atlas; ProFlareBatch[] flareBatchs = GameObject.FindObjectsOfType(typeof(ProFlareBatch)) as ProFlareBatch[]; int matchCount = 0; foreach(ProFlareBatch flareBatch in flareBatchs){ if(flareBatch._atlas == _Atlas){ matchCount++; } } _flare.FlareBatches = new ProFlareBatch[matchCount]; int count = 0; foreach(ProFlareBatch flareBatch in flareBatchs){ if(flareBatch._atlas == _Atlas){ _flare.FlareBatches[count] = flareBatch; _flare.FlareBatches[count].dirty = true; count++; } } if(count != 0){ if(_flare.Elements.Count == 0){ ProFlareElement element = new ProFlareElement(); element.flare = _flare; element.SpriteName = _flare._Atlas.elementsList[0].name; element.flareAtlas = _flare._Atlas; element.position = -1; element.Scale = 1; _flare.Elements.Add(element); } } } bool missing = false; for(int i = 0; i < _flare.FlareBatches.Length; i++){ if(_flare.FlareBatches[i] == null) missing = true; } if(missing){ ProFlareBatch[] flareBatchs = GameObject.FindObjectsOfType(typeof(ProFlareBatch)) as ProFlareBatch[]; int matchCount = 0; foreach(ProFlareBatch flareBatch in flareBatchs){ if(flareBatch._atlas == _Atlas){ matchCount++; } } _flare.FlareBatches = new ProFlareBatch[matchCount]; int count = 0; foreach(ProFlareBatch flareBatch in flareBatchs){ if(flareBatch._atlas == _Atlas){ _flare.FlareBatches[count] = flareBatch; _flare.FlareBatches[count].dirty = true; count++; } } } EditorGUILayout.LabelField("Rendered by : "); if(_flare.FlareBatches.Length != 0) for(int i = 0; i < _flare.FlareBatches.Length; i++){ EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField(" "+_flare.FlareBatches[i].gameObject.name); if(GUILayout.Button("Select",GUILayout.Width(60))){ Selection.activeGameObject = _flare.FlareBatches[i].gameObject; } EditorGUILayout.EndHorizontal(); } if(error){ EditorGUILayout.HelpBox("Fix Errors before continuing.", MessageType.Error); } } FlareEditorHelper.DrawGuiDivider(); EditorGUILayout.LabelField("Global Settings :",title); GUILayout.Space(10f); Rect r = EditorGUILayout.BeginVertical("box"); { Rect r2 = r; r2.height = 20; if (GUI.Button(r2, GUIContent.none,dropDownButton)) _flare.EditGlobals = _flare.EditGlobals ? false : true; GUILayout.Label("General"); if(_flare.EditGlobals){ GUILayout.Space(5f); //Scale float _flareGlobalScale = EditorGUILayout.Slider("Scale",_flare.GlobalScale,0f,2000f); if(_flareGlobalScale != _flare.GlobalScale){ _flare.GlobalScale = _flareGlobalScale; foreach(ProFlare flare in Flares){ flare.GlobalScale = _flare.GlobalScale; } } float _flareGlobalBrightness = EditorGUILayout.Slider("Brightness",_flare.GlobalBrightness,0f,1f); if(_flareGlobalBrightness != _flare.GlobalBrightness){ _flare.GlobalBrightness = _flareGlobalBrightness; _flare.GlobalTintColor.a = _flare.GlobalBrightness; foreach(ProFlare flare in Flares){ flare.GlobalBrightness = _flareGlobalBrightness; flare.GlobalTintColor.a = _flare.GlobalBrightness; } } Color _flareGlobalTintColor = EditorGUILayout.ColorField("Tint",_flare.GlobalTintColor); if(_flareGlobalTintColor != _flare.GlobalTintColor){ _flare.GlobalTintColor = _flareGlobalTintColor; _flare.GlobalBrightness = _flare.GlobalTintColor.a; foreach(ProFlare flare in Flares){ flare.GlobalTintColor = _flareGlobalTintColor; flare.GlobalBrightness = _flare.GlobalTintColor.a; } } FlareEditorHelper.DrawGuiInBoxDivider(); //Angle Falloff Options if(selectionCount <= 1){ GUILayout.BeginHorizontal(); { _flare.UseAngleLimit = EditorGUILayout.Toggle("Use Angle Falloff",_flare.UseAngleLimit); GUI.enabled = _flare.UseAngleLimit; _flare.maxAngle = Mathf.Clamp(EditorGUILayout.FloatField("Max Angle",_flare.maxAngle),0,360); } GUILayout.EndHorizontal(); _flare.UseAngleScale = EditorGUILayout.Toggle(" Affect Scale",_flare.UseAngleScale); _flare.UseAngleBrightness = EditorGUILayout.Toggle(" Affect Brightness",_flare.UseAngleBrightness); GUILayout.BeginHorizontal(); { _flare.UseAngleCurve = EditorGUILayout.Toggle(" Use Curve",_flare.UseAngleCurve); GUI.enabled = _flare.UseAngleCurve; _flare.AngleCurve = EditorGUILayout.CurveField(_flare.AngleCurve); if(GUILayout.Button("Reset",GUILayout.MaxWidth(50))){ _flare.AngleCurve = new AnimationCurve(new Keyframe(0, 0f), new Keyframe(1, 1.0f));} GUI.enabled = true; } GUILayout.EndHorizontal(); GUI.enabled = true; FlareEditorHelper.DrawGuiInBoxDivider(); //Max Distance Options - GUILayout.BeginHorizontal(); { _flare.useMaxDistance = EditorGUILayout.Toggle("Use Distance Falloff",_flare.useMaxDistance); GUI.enabled = _flare.useMaxDistance; _flare.GlobalMaxDistance = EditorGUILayout.FloatField(" Max Distance",_flare.GlobalMaxDistance); } GUILayout.EndHorizontal(); _flare.useDistanceScale = EditorGUILayout.Toggle(" Affect Scale",_flare.useDistanceScale); _flare.useDistanceFade = EditorGUILayout.Toggle(" Affect Brightness",_flare.useDistanceFade); GUI.enabled = true; FlareEditorHelper.DrawGuiInBoxDivider(); _flare.OffScreenFadeDist = EditorGUILayout.FloatField("Off Screen Fade Distance",_flare.OffScreenFadeDist); FlareEditorHelper.DrawGuiInBoxDivider(); _flare.neverCull = EditorGUILayout.Toggle("Never Cull Flare",_flare.neverCull); } } } EditorGUILayout.EndVertical(); if(selectionCount <= 1) { r = EditorGUILayout.BeginVertical("box"); Rect r2 = r; r2.height = 20; if (GUI.Button(r2, GUIContent.none,dropDownButton)) _flare.EditDynamicTriggering = _flare.EditDynamicTriggering ? false : true; GUILayout.Label("Dynamics Triggering"); if(_flare.EditDynamicTriggering){GUILayout.Space(5f); _flare.useDynamicEdgeBoost = EditorGUILayout.Toggle("Use Dynamic Edge Boost",_flare.useDynamicEdgeBoost); GUI.enabled = _flare.useDynamicEdgeBoost; _flare.DynamicEdgeBoost = EditorGUILayout.FloatField(" Dynamic Edge Scale",_flare.DynamicEdgeBoost); _flare.DynamicEdgeBrightness = EditorGUILayout.FloatField(" Dynamic Edge Brightness",_flare.DynamicEdgeBrightness); _flare.DynamicEdgeRange = EditorGUILayout.FloatField(" Dynamic Edge Range",_flare.DynamicEdgeRange); _flare.DynamicEdgeBias = EditorGUILayout.FloatField(" Dynamic Edge Bias",_flare.DynamicEdgeBias); GUILayout.BeginHorizontal(); { _flare.DynamicEdgeCurve = EditorGUILayout.CurveField(" Dynamic Edge Curve", _flare.DynamicEdgeCurve); if(GUILayout.Button("Reset",GUILayout.MaxWidth(50))) _flare.DynamicEdgeCurve = new AnimationCurve(new Keyframe(0, 0f), new Keyframe(0.5f, 1), new Keyframe(1, 0f)); } GUILayout.EndHorizontal(); GUI.enabled = true; FlareEditorHelper.DrawGuiInBoxDivider(); _flare.useDynamicCenterBoost = EditorGUILayout.Toggle("Use Dynamic Center Boost",_flare.useDynamicCenterBoost); GUI.enabled = _flare.useDynamicCenterBoost; _flare.DynamicCenterRange = EditorGUILayout.FloatField(" Dynamic Center Range",_flare.DynamicCenterRange); _flare.DynamicCenterBoost = EditorGUILayout.FloatField(" Dynamic Center Scale",_flare.DynamicCenterBoost); _flare.DynamicCenterBrightness = EditorGUILayout.FloatField(" Dynamic Center Brightness",_flare.DynamicCenterBrightness); GUI.enabled = true; } EditorGUILayout.EndVertical(); } if(selectionCount <= 1) { r = EditorGUILayout.BeginVertical("box"); Rect r2 = r; r2.height = 20; if (GUI.Button(r2, GUIContent.none,dropDownButton)) _flare.EditOcclusion = _flare.EditOcclusion ? false : true; GUILayout.Label("Occlusion"); if(_flare.EditOcclusion){GUILayout.Space(5f); _flare.RaycastPhysics = EditorGUILayout.Toggle("Raycast Against Physics",_flare.RaycastPhysics); GUI.enabled = _flare.RaycastPhysics; _flare.mask = LayerMaskField(_flare.mask); FlareEditorHelper.DrawGuiInBoxDivider(); EditorGUILayout.LabelField("Debug Info :"); EditorGUILayout.Toggle(" Flare Occluded",_flare.Occluded); EditorGUILayout.ObjectField(" Occluding GameObject", _flare.OccludingObject, typeof(GameObject), true); GUI.enabled = true; } EditorGUILayout.EndVertical(); } FlareEditorHelper.DrawGuiDivider(); EditorGUILayout.LabelField("Element Settings :",title); GUILayout.Space(10f); if(selectionCount > 1){ EditorGUILayout.HelpBox("Editing flare elements is not supported in while multiple flares selected.", MessageType.Warning,false); }else{ if(_flare._Atlas != null) for(int i = 0; i < _flare.Elements.Count;i++) ElementEditor(_flare.Elements[i],(i+1)); if(_flare._Atlas != null) if(GUILayout.Button("ADD NEW",thinButton)){ ProFlareElement element = new ProFlareElement(); element.flare = _flare; element.SpriteName = _flare._Atlas.elementsList[0].name; element.flareAtlas = _flare._Atlas; element.position = -1; element.Scale = 1; for(int i = 0; i < _flare.FlareBatches.Length; i++){ _flare.FlareBatches[i].dirty = true; } //_flare._FlareBatch.dirty = true; _flare.Elements.Add(element); } } FlareEditorHelper.DrawGuiDivider(); if (GUI.changed||Updated) { //Debug.Log("dirty:"); Updated = false; guiChanged = true; EditorUtility.SetDirty (target); if(selectionCount > 1) foreach(GameObject go in Selection.gameObjects){ ProFlare selectedFlare = go.GetComponent<ProFlare>(); if(selectedFlare) EditorUtility.SetDirty(selectedFlare); } } }
void OnSceneGUI () { _flare = target as ProFlare; if(!_flare.UseAngleLimit) return; Handles.color = new Color(1f,1f,1f,0.2f); Handles.DrawSolidArc(_flare.transform.position, _flare.transform.up, _flare.transform.forward, _flare.maxAngle/2, 5); Handles.DrawSolidArc(_flare.transform.position, _flare.transform.up, _flare.transform.forward, -_flare.maxAngle/2, 5); Handles.color = Color.white; Handles.ScaleValueHandle(_flare.maxAngle, _flare.transform.position + _flare.transform.forward*5, _flare.transform.rotation, 1, Handles.ConeCap, 2); }
public static void LoadFlareData(ProFlare flare, TextAsset asset) { string jsonString = asset.text; // Debug.Log ("LoadFlareData"); Hashtable decodedHash = jsonDecode(jsonString) as Hashtable; if (decodedHash == null) { Debug.LogWarning("Unable to parse Json file: " + asset.name); return; } Hashtable meta = (Hashtable)decodedHash["meta"]; flare.GlobalScale = float.Parse(meta["GlobalScale"].ToString()); flare.GlobalBrightness = float.Parse(meta["GlobalBrightness"].ToString()); flare.GlobalTintColor = FlareJson.decodeColor((Hashtable)meta["GlobalTintColor"]); flare.MultiplyScaleByTransformScale = FlareJson.decodeBool(meta["MultiplyScaleByTransformScale"].ToString()); //Distance Fall off flare.useMaxDistance = FlareJson.decodeBool(meta["useMaxDistance"].ToString()); flare.useDistanceScale = FlareJson.decodeBool(meta["useDistanceScale"].ToString()); flare.useDistanceFade = FlareJson.decodeBool(meta["useDistanceFade"].ToString()); flare.GlobalMaxDistance = float.Parse(meta["GlobalMaxDistance"].ToString()); //Angle Culling Properties flare.UseAngleLimit = FlareJson.decodeBool(meta["UseAngleLimit"].ToString()); flare.maxAngle = float.Parse(meta["maxAngle"].ToString()); flare.UseAngleScale = FlareJson.decodeBool(meta["UseAngleScale"].ToString()); flare.UseAngleBrightness = FlareJson.decodeBool(meta["UseAngleBrightness"].ToString()); flare.UseAngleCurve = FlareJson.decodeBool(meta["UseAngleCurve"].ToString()); flare.AngleCurve = FlareJson.decodeAnimCurve((Hashtable)meta ["AngleCurve"]); // public LayerMask mask = 1; flare.RaycastPhysics = FlareJson.decodeBool(meta["RaycastPhysics"].ToString()); flare.OffScreenFadeDist = float.Parse(meta["OffScreenFadeDist"].ToString()); flare.useDynamicEdgeBoost = FlareJson.decodeBool(meta["useDynamicEdgeBoost"].ToString()); flare.DynamicEdgeBoost = float.Parse(meta["DynamicEdgeBoost"].ToString()); flare.DynamicEdgeBrightness = float.Parse(meta["DynamicEdgeBrightness"].ToString()); flare.DynamicEdgeRange = float.Parse(meta["DynamicEdgeRange"].ToString()); flare.DynamicEdgeBias = float.Parse(meta["DynamicEdgeBias"].ToString()); flare.DynamicEdgeCurve = FlareJson.decodeAnimCurve((Hashtable)meta ["DynamicEdgeCurve"]); flare.useDynamicCenterBoost = FlareJson.decodeBool(meta["useDynamicCenterBoost"].ToString()); flare.DynamicCenterBoost = float.Parse(meta["DynamicCenterBoost"].ToString()); flare.DynamicCenterBrightness = float.Parse(meta["DynamicCenterBrightness"].ToString()); flare.DynamicCenterRange = float.Parse(meta["DynamicCenterRange"].ToString()); flare.DynamicCenterBias = float.Parse(meta["DynamicCenterBias"].ToString()); flare.neverCull = FlareJson.decodeBool(meta["neverCull"].ToString()); flare.Elements.Clear(); Hashtable elements = (Hashtable)meta["Elements"]; foreach (System.Collections.DictionaryEntry item in elements) { Hashtable element = (Hashtable)elements[item.Key]; ProFlareElement elementNew = new ProFlareElement(); elementNew.Editing = FlareJson.decodeBool(element["Editing"].ToString()); elementNew.Visible = FlareJson.decodeBool(element["Visible"].ToString()); elementNew.SpriteName = element["SpriteName"].ToString(); elementNew.flare = flare; elementNew.flareAtlas = flare._Atlas; elementNew.Brightness = float.Parse(element["Brightness"].ToString()); elementNew.Scale = float.Parse(element["Scale"].ToString()); elementNew.ScaleRandom = float.Parse(element["ScaleRandom"].ToString()); elementNew.ScaleFinal = float.Parse(element["ScaleFinal"].ToString()); elementNew.RandomColorAmount = FlareJson.decodeVector4((Hashtable)element["RandomColorAmount"]); // //Element OffSet Properties elementNew.position = float.Parse(element["position"].ToString()); elementNew.useRangeOffset = FlareJson.decodeBool(element["useRangeOffset"].ToString()); elementNew.SubElementPositionRange_Min = float.Parse(element["SubElementPositionRange_Min"].ToString()); elementNew.SubElementPositionRange_Max = float.Parse(element["SubElementPositionRange_Max"].ToString()); elementNew.SubElementAngleRange_Min = float.Parse(element["SubElementAngleRange_Min"].ToString()); elementNew.SubElementAngleRange_Max = float.Parse(element["SubElementAngleRange_Max"].ToString()); elementNew.OffsetPosition = FlareJson.decodeVector3((Hashtable)element["OffsetPosition"]); elementNew.Anamorphic = FlareJson.decodeVector3((Hashtable)element["Anamorphic"]); elementNew.OffsetPostion = FlareJson.decodeVector3((Hashtable)element["OffsetPostion"]); // //Element Rotation Properties elementNew.angle = float.Parse(element["angle"].ToString()); elementNew.useRandomAngle = FlareJson.decodeBool(element["useRandomAngle"].ToString()); elementNew.useStarRotation = FlareJson.decodeBool(element["useStarRotation"].ToString()); elementNew.AngleRandom_Min = float.Parse(element["AngleRandom_Min"].ToString()); elementNew.AngleRandom_Max = float.Parse(element["AngleRandom_Max"].ToString()); elementNew.OrientToSource = FlareJson.decodeBool(element["OrientToSource"].ToString()); elementNew.rotateToFlare = FlareJson.decodeBool(element["rotateToFlare"].ToString()); elementNew.rotationSpeed = float.Parse(element["rotationSpeed"].ToString()); elementNew.rotationOverTime = float.Parse(element["rotationOverTime"].ToString()); // //Colour Properties, elementNew.useColorRange = FlareJson.decodeBool(element["useColorRange"].ToString()); elementNew.OffsetPosition = FlareJson.decodeVector3((Hashtable)element["OffsetPosition"]); elementNew.ElementTint = FlareJson.decodeColor((Hashtable)element["ElementTint"]); elementNew.SubElementColor_Start = FlareJson.decodeColor((Hashtable)element["SubElementColor_Start"]); elementNew.SubElementColor_End = FlareJson.decodeColor((Hashtable)element["SubElementColor_End"]); // //Scale Curve elementNew.useScaleCurve = FlareJson.decodeBool(element["useScaleCurve"].ToString()); elementNew.ScaleCurve = FlareJson.decodeAnimCurve((Hashtable)element ["ScaleCurve"]); // //Override Properties elementNew.OverrideDynamicEdgeBoost = FlareJson.decodeBool(element["OverrideDynamicEdgeBoost"].ToString()); elementNew.DynamicEdgeBoostOverride = float.Parse(element["DynamicEdgeBoostOverride"].ToString()); elementNew.OverrideDynamicCenterBoost = FlareJson.decodeBool(element["OverrideDynamicCenterBoost"].ToString()); elementNew.DynamicCenterBoostOverride = float.Parse(element["DynamicCenterBoostOverride"].ToString()); elementNew.OverrideDynamicEdgeBrightness = FlareJson.decodeBool(element["OverrideDynamicEdgeBrightness"].ToString()); elementNew.DynamicEdgeBrightnessOverride = float.Parse(element["DynamicEdgeBrightnessOverride"].ToString()); elementNew.OverrideDynamicCenterBrightness = FlareJson.decodeBool(element["OverrideDynamicCenterBrightness"].ToString()); elementNew.DynamicCenterBrightnessOverride = float.Parse(element["DynamicCenterBrightnessOverride"].ToString()); elementNew.type = (ProFlareElement.Type)(int.Parse(element["type"].ToString())); elementNew.size = FlareJson.decodeVector2((Hashtable)element["size"]); Hashtable subElements = (Hashtable)element["subElements"]; if (subElements != null) { foreach (System.Collections.DictionaryEntry subItem in subElements) { Hashtable subElement = (Hashtable)subElements[subItem.Key]; SubElement subElementNew = new SubElement(); subElementNew.color = FlareJson.decodeColor((Hashtable)subElement["color"]); subElementNew.position = float.Parse(subElement["position"].ToString()); subElementNew.offset = FlareJson.decodeVector3((Hashtable)subElement["offset"]); subElementNew.angle = float.Parse(subElement["angle"].ToString()); subElementNew.scale = float.Parse(subElement["scale"].ToString()); subElementNew.random = float.Parse(subElement["random"].ToString()); subElementNew.random2 = float.Parse(subElement["random2"].ToString()); subElementNew.RandomScaleSeed = float.Parse(subElement["RandomScaleSeed"].ToString()); subElementNew.RandomColorSeedR = float.Parse(subElement["RandomColorSeedR"].ToString()); subElementNew.RandomColorSeedG = float.Parse(subElement["RandomColorSeedG"].ToString()); subElementNew.RandomColorSeedB = float.Parse(subElement["RandomColorSeedB"].ToString()); subElementNew.RandomColorSeedA = float.Parse(subElement["RandomColorSeedA"].ToString()); elementNew.subElements.Add(subElementNew); } } bool Found = false; for (int i2 = 0; i2 < flare._Atlas.elementsList.Count; i2++) { if (elementNew.SpriteName == flare._Atlas.elementsList[i2].name) { Found = true; elementNew.elementTextureID = i2; } } if (Found) { flare.Elements.Add(elementNew); } else { Debug.LogWarning("ProFlares - Flare Element Missing From Atlas Not Adding - " + elementNew.SpriteName); } } foreach (ProFlareBatch batch in flare.FlareBatches) { batch.dirty = true; } }
// Use this for initialization public static void ExportFlare(ProFlare flare) { Debug.Log("Export Flare"); string fileName = "Assets/ProFlares/ExportedFlares/" + flare.gameObject.name + ".txt"; if (File.Exists(fileName)) { Debug.Log(fileName + " already exists."); //return; } var sr = File.CreateText(fileName); sr.WriteLine("{"); sr.WriteLine("\"meta\": {"); //sr.WriteLine (" \"frame\": {\"x\":768,\"y\":512,\"w\":256,\"h\":256},"); sr.WriteLine(" \"GlobalScale\": {0},", flare.GlobalScale); sr.WriteLine(" \"MultiplyScaleByTransformScale\": {0},", boolToString(flare.MultiplyScaleByTransformScale)); sr.WriteLine(" \"GlobalBrightness\": {0},", flare.GlobalBrightness); sr.WriteLine(" \"GlobalTintColor\": {\"r\":"+ flare.GlobalTintColor.r + ",\"g\":" + flare.GlobalTintColor.g + ",\"b\":" + flare.GlobalTintColor.b + ",\"a\":" + flare.GlobalTintColor.a + "},"); sr.WriteLine(" \"useMaxDistance\": {0},", boolToString(flare.useMaxDistance)); sr.WriteLine(" \"useDistanceScale\": {0},", boolToString(flare.useDistanceScale)); sr.WriteLine(" \"useDistanceFade\": {0},", boolToString(flare.useDistanceFade)); sr.WriteLine(" \"GlobalMaxDistance\": {0},", flare.GlobalMaxDistance); // //Angle Culling Properties sr.WriteLine(" \"UseAngleLimit\": {0},", boolToString(flare.UseAngleLimit)); sr.WriteLine(" \"maxAngle\": {0},", flare.maxAngle); sr.WriteLine(" \"UseAngleScale\": {0},", boolToString(flare.UseAngleScale)); sr.WriteLine(" \"UseAngleBrightness\": {0},", boolToString(flare.UseAngleBrightness)); sr.WriteLine(" \"UseAngleCurve\": {0},", boolToString(flare.UseAngleCurve)); sr.WriteLine(" \"AngleCurve\": {0},", ProFlareExporter.animCurveExport(flare.AngleCurve)); // //Occlusion Properties // public LayerMask mask = 1; ///////////////////////////// sr.WriteLine (" \"mask\": {0},",(int)flare.mask); // public bool RaycastPhysics; sr.WriteLine(" \"RaycastPhysics\": {0},", boolToString(flare.RaycastPhysics)); sr.WriteLine(" \"OffScreenFadeDist\": {0},", flare.OffScreenFadeDist); // // //Dynamic Edge Properties sr.WriteLine(" \"useDynamicEdgeBoost\": {0},", boolToString(flare.useDynamicEdgeBoost)); sr.WriteLine(" \"DynamicEdgeBoost\": {0},", flare.DynamicEdgeBoost); sr.WriteLine(" \"DynamicEdgeBrightness\": {0},", flare.DynamicEdgeBrightness); sr.WriteLine(" \"DynamicEdgeRange\": {0},", flare.DynamicEdgeRange); sr.WriteLine(" \"DynamicEdgeBias\": {0},", flare.DynamicEdgeBias); sr.WriteLine(" \"DynamicEdgeCurve\": {0},", ProFlareExporter.animCurveExport(flare.DynamicEdgeCurve)); // //Dynamic Center Properties sr.WriteLine(" \"useDynamicCenterBoost\": {0},", boolToString(flare.useDynamicCenterBoost)); sr.WriteLine(" \"DynamicCenterBoost\": {0},", flare.DynamicCenterBoost); sr.WriteLine(" \"DynamicCenterBrightness\": {0},", flare.DynamicCenterBrightness); sr.WriteLine(" \"DynamicCenterRange\": {0},", flare.DynamicCenterRange); sr.WriteLine(" \"DynamicCenterBias\": {0},", flare.DynamicCenterBias); // public bool neverCull; sr.WriteLine(" \"neverCull\": {0},", boolToString(flare.neverCull)); sr.WriteLine(" \"Elements\": {"); int count = 0; foreach (ProFlareElement element in flare.Elements) { sr.WriteLine(" \"Element"+ count + "\": {"); sr.WriteLine(" \"Editing\": {0},", boolToString(element.Editing)); sr.WriteLine(" \"Visible\": {0},", boolToString(element.Visible)); // //Element's texture index inside the texture atlas. // public int elementTextureID; sr.WriteLine(" \"elementTextureID\": {0},", element.elementTextureID); // // //Elements Sprite name from the texture atlas, this isn't checked at runtime. Its only used to help stop flares breaking when the atlas changes. // public string SpriteName; sr.WriteLine(" \"Brightness\": {0},", element.Brightness); sr.WriteLine(" \"Scale\": {0},", element.Scale); sr.WriteLine(" \"ScaleRandom\": {0},", element.ScaleRandom); sr.WriteLine(" \"ScaleFinal\": {0},", element.ScaleFinal); sr.WriteLine(" \"RandomColorAmount\": {\"r\":"+ element.RandomColorAmount.x + ",\"g\":" + element.RandomColorAmount.y + ",\"b\":" + element.RandomColorAmount.z + ",\"a\":" + element.RandomColorAmount.w + "},"); // //Element OffSet Properties sr.WriteLine(" \"position\": {0},", element.position); sr.WriteLine(" \"useRangeOffset\": {0},", boolToString(element.useRangeOffset)); sr.WriteLine(" \"SubElementPositionRange_Min\": {0},", element.SubElementPositionRange_Min); sr.WriteLine(" \"SubElementPositionRange_Max\": {0},", element.SubElementPositionRange_Max); sr.WriteLine(" \"SubElementAngleRange_Min\": {0},", element.SubElementAngleRange_Min); sr.WriteLine(" \"SubElementAngleRange_Max\": {0},", element.SubElementAngleRange_Max); sr.WriteLine(" \"OffsetPosition\": {\"r\":"+ element.OffsetPosition.x + ",\"g\":" + element.OffsetPosition.y + ",\"b\":" + element.OffsetPosition.z + "},"); sr.WriteLine(" \"Anamorphic\": {\"r\":"+ element.Anamorphic.x + ",\"g\":" + element.Anamorphic.y + ",\"b\":" + element.Anamorphic.z + "},"); sr.WriteLine(" \"OffsetPostion\": {\"r\":"+ element.OffsetPostion.x + ",\"g\":" + element.OffsetPostion.y + ",\"b\":" + element.OffsetPostion.z + "},"); // //Element Rotation Properties sr.WriteLine(" \"angle\": {0},", element.angle); sr.WriteLine(" \"useRandomAngle\": {0},", boolToString(element.useRandomAngle)); sr.WriteLine(" \"useStarRotation\": {0},", boolToString(element.useStarRotation)); sr.WriteLine(" \"AngleRandom_Min\": {0},", element.AngleRandom_Min); sr.WriteLine(" \"AngleRandom_Max\": {0},", element.AngleRandom_Max); sr.WriteLine(" \"OrientToSource\": {0},", boolToString(element.OrientToSource)); sr.WriteLine(" \"rotateToFlare\": {0},", boolToString(element.rotateToFlare)); sr.WriteLine(" \"rotationSpeed\": {0},", element.rotationSpeed); sr.WriteLine(" \"rotationOverTime\": {0},", element.rotationOverTime); // //Colour Properties, sr.WriteLine(" \"useColorRange\": {0},", boolToString(element.useColorRange)); sr.WriteLine(" \"ElementFinalColor\": {\"r\":"+ element.ElementFinalColor.r + ",\"g\":" + element.ElementFinalColor.g + ",\"b\":" + element.ElementFinalColor.b + ",\"a\":" + element.ElementFinalColor.a + "},"); sr.WriteLine(" \"ElementTint\": {\"r\":"+ element.ElementTint.r + ",\"g\":" + element.ElementTint.g + ",\"b\":" + element.ElementTint.b + ",\"a\":" + element.ElementTint.a + "},"); sr.WriteLine(" \"SubElementColor_Start\": {\"r\":"+ element.SubElementColor_Start.r + ",\"g\":" + element.SubElementColor_Start.g + ",\"b\":" + element.SubElementColor_Start.b + ",\"a\":" + element.SubElementColor_Start.a + "},"); sr.WriteLine(" \"SubElementColor_End\": {\"r\":"+ element.SubElementColor_End.r + ",\"g\":" + element.SubElementColor_End.g + ",\"b\":" + element.SubElementColor_End.b + ",\"a\":" + element.SubElementColor_End.a + "},"); sr.WriteLine(" \"useScaleCurve\": {0},", boolToString(element.useScaleCurve)); sr.WriteLine(" \"ScaleCurve\": {0},", ProFlareExporter.animCurveExport(element.ScaleCurve)); // //Override Properties sr.WriteLine(" \"OverrideDynamicEdgeBoost\": {0},", boolToString(element.OverrideDynamicEdgeBoost)); sr.WriteLine(" \"DynamicEdgeBoostOverride\": {0},", element.DynamicEdgeBoostOverride); sr.WriteLine(" \"OverrideDynamicCenterBoost\": {0},", boolToString(element.OverrideDynamicCenterBoost)); sr.WriteLine(" \"DynamicCenterBoostOverride\": {0},", element.DynamicCenterBoostOverride); sr.WriteLine(" \"OverrideDynamicEdgeBrightness\": {0},", boolToString(element.OverrideDynamicEdgeBrightness)); sr.WriteLine(" \"DynamicEdgeBrightnessOverride\": {0},", element.DynamicEdgeBrightnessOverride); sr.WriteLine(" \"OverrideDynamicCenterBrightness\": {0},", boolToString(element.OverrideDynamicCenterBrightness)); sr.WriteLine(" \"DynamicCenterBrightnessOverride\": {0},", element.DynamicCenterBrightnessOverride); if (element.subElements.Count > 0) { sr.WriteLine(" \"subElements\": {"); int count2 = 0; foreach (SubElement subElement in element.subElements) { sr.WriteLine(" \"subElement"+ count2 + "\": {"); sr.WriteLine(" \"color\": {\"r\":"+ subElement.color.r + ",\"g\":" + subElement.color.g + ",\"b\":" + subElement.color.b + ",\"a\":" + subElement.color.a + "},"); sr.WriteLine(" \"position\": {0},", subElement.position); sr.WriteLine(" \"offset\": {\"r\":"+ subElement.color.r + ",\"g\":" + subElement.color.g + ",\"b\":" + subElement.color.b + "},"); sr.WriteLine(" \"angle\": {0},", subElement.angle); sr.WriteLine(" \"scale\": {0},", subElement.scale); sr.WriteLine(" \"random\": {0},", subElement.random); sr.WriteLine(" \"random2\": {0},", subElement.random2); sr.WriteLine(" \"RandomScaleSeed\": {0},", subElement.RandomScaleSeed); sr.WriteLine(" \"RandomColorSeedR\": {0},", subElement.RandomColorSeedR); sr.WriteLine(" \"RandomColorSeedG\": {0},", subElement.RandomColorSeedG); sr.WriteLine(" \"RandomColorSeedB\": {0},", subElement.RandomColorSeedB); sr.WriteLine(" \"RandomColorSeedA\": {0}", subElement.RandomColorSeedA); count2++; if (count2 == element.subElements.Count) { sr.WriteLine(" }"); } else { sr.WriteLine(" },"); } } sr.WriteLine(" },"); } sr.WriteLine(" \"EditDynamicTriggering\": {0},", boolToString(element.EditDynamicTriggering)); sr.WriteLine(" \"EditOcclusion\": {0},", boolToString(element.EditOcclusion)); sr.WriteLine(" \"ElementSetting\": {0},", boolToString(element.ElementSetting)); sr.WriteLine(" \"OffsetSetting\": {0},", boolToString(element.OffsetSetting)); sr.WriteLine(" \"ColorSetting\": {0},", boolToString(element.ColorSetting)); sr.WriteLine(" \"ScaleSetting\": {0},", boolToString(element.ScaleSetting)); sr.WriteLine(" \"RotationSetting\": {0},", boolToString(element.RotationSetting)); sr.WriteLine(" \"OverrideSetting\": {0},", boolToString(element.OverrideSetting)); sr.WriteLine(" \"type\": \"{0}\"", (int)element.type); sr.WriteLine(" \"size\": {\"x\":"+ element.size.x + ",\"y\":" + element.size.y + "},"); sr.WriteLine(" \"SpriteName\": \"{0}\"", element.SpriteName); count++; if (count == flare.Elements.Count) { sr.WriteLine(" }"); } else { sr.WriteLine(" },"); } } sr.WriteLine(" }"); sr.WriteLine("}"); sr.WriteLine("}"); sr.Close(); EditorUtility.SetDirty(flare); }