Ejemplo n.º 1
0
    /// <summary>
    /// Copy the inner rectangle from one sprite to another.
    /// </summary>

    /*
     * static void CopyInnerRect (ProFlareAtlas.Element oldSprite, ProFlareAtlas.Element newElement)
     * {
     *      float offsetX = oldSprite.inner.xMin - oldSprite.outer.xMin;
     *      float offsetY = oldSprite.inner.yMin - oldSprite.outer.yMin;
     *      float sizeX = oldSprite.inner.width;
     *      float sizeY = oldSprite.inner.height;
     *
     *      if (Mathf.Approximately(newElement.outer.width, oldSprite.outer.width))
     *      {
     *              // The sprite has not been rotated or it's a square
     *              newElement.inner = new Rect(newElement.outer.xMin + offsetX, newElement.outer.yMin + offsetY, sizeX, sizeY);
     *      }
     *      else if (Mathf.Approximately(newElement.outer.width, oldSprite.outer.height))
     *      {
     *              // The sprite was rotated since the last time it was imported
     *              newElement.inner = new Rect(newElement.outer.xMin + offsetY, newElement.outer.yMin + offsetX, sizeY, sizeX);
     *      }
     * }
     */
    /// <summary>
    /// Parses the string json into a value
    /// </summary>
    /// <param name="json">A JSON string.</param>
    /// <returns>An ArrayList, a Hashtable, a double, a string, null, true, or false</returns>
    public static object jsonDecode(string json)
    {
        // save the string for debug information
        FlareJson.lastDecode = json;

        if (json != null)
        {
            char[] charArray = json.ToCharArray();
            int    index     = 0;
            bool   success   = true;
            object value     = FlareJson.parseValue(charArray, ref index, ref success);

            if (success)
            {
                FlareJson.lastErrorIndex = -1;
            }
            else
            {
                FlareJson.lastErrorIndex = index;
            }

            return(value);
        }
        else
        {
            return(null);
        }
    }
Ejemplo n.º 2
0
    /// <summary>
    /// Converts a Hashtable / ArrayList / Dictionary(string,string) object into a JSON string
    /// </summary>
    /// <param name="json">A Hashtable / ArrayList</param>
    /// <returns>A JSON encoded string, or null if object 'json' is not serializable</returns>
    public static string jsonEncode(object json)
    {
        var builder = new StringBuilder(BUILDER_CAPACITY);
        var success = FlareJson.serializeValue(json, builder);

        return(success ? builder.ToString() : null);
    }
Ejemplo n.º 3
0
    public override void OnInspectorGUI()
    {
        _ProFlareAtlas = target as ProFlareAtlas;
        CheckUndo();
        //	 base.OnInspectorGUI();
        FlareEditorHelper.DrawGuiDivider();
        GUIStyle title        = FlareEditorHelper.TitleStyle();
        GUIStyle thinButton   = FlareEditorHelper.ThinButtonStyle();
        GUIStyle enumDropDown = FlareEditorHelper.EnumStyleButton();
        GUIStyle redButton    = FlareEditorHelper.ThinButtonRedStyle();


        EditorGUILayout.LabelField("ProFlare Atlas Editor", title);
        GUILayout.Space(10f);

        _ProFlareAtlas.texture = EditorGUILayout.ObjectField("Flare Atlas Texture", _ProFlareAtlas.texture, typeof(Texture2D), false) as Texture2D;

        if (_ProFlareAtlas.texture == null)
        {
            EditorGUILayout.HelpBox("Assign a texture to the atlas.", MessageType.Warning, true);
            return;
        }
        TextAsset ta = EditorGUILayout.ObjectField("Atlas JSON Import", null, typeof(TextAsset), false) as TextAsset;

        if (ta != null)
        {
            FlareJson.LoadSpriteData(_ProFlareAtlas, ta);
            Updated = true;
        }

        FlareEditorHelper.DrawGuiDivider();
        EditorGUILayout.LabelField("Atlas Elements", title);
        GUILayout.Space(6f);

        EditorGUILayout.BeginHorizontal();


        if (_ProFlareAtlas.elementsList.Count < 1)
        {
            EditorGUILayout.HelpBox("No Elements in flare atlas", MessageType.Warning, true);
        }
        else
        {
            _ProFlareAtlas.elementNameList = new string[_ProFlareAtlas.elementsList.Count];

            for (int i = 0; i < _ProFlareAtlas.elementNameList.Length; i++)
            {
                _ProFlareAtlas.elementNameList[i] = _ProFlareAtlas.elementsList[i].name;
            }


            int _ProFlareAtlasElementNumber = EditorGUILayout.Popup(_ProFlareAtlas.elementNumber, _ProFlareAtlas.elementNameList, enumDropDown);

            if (_ProFlareAtlasElementNumber != _ProFlareAtlas.elementNumber)
            {
                _ProFlareAtlas.elementNumber = _ProFlareAtlasElementNumber;
                renameString = _ProFlareAtlas.elementsList[_ProFlareAtlas.elementNumber].name;
            }

            if (GUILayout.Button("EDIT", thinButton))
            {
                Updated = true;
                if (_ProFlareAtlas.editElements)
                {
                    _ProFlareAtlas.editElements = false;
                }
                else
                {
                    _ProFlareAtlas.editElements = true;
                }
            }
        }

        if (GUILayout.Button("ADD NEW", thinButton))
        {
            _ProFlareAtlas.editElements = true;

            ProFlareAtlas.Element element = new ProFlareAtlas.Element();

            element.name = "New Element " + _ProFlareAtlas.elementsList.Count;

            renameString     = element.name;
            element.Imported = false;

            _ProFlareAtlas.elementsList.Add(element);

            _ProFlareAtlas.elementNumber = _ProFlareAtlas.elementsList.Count - 1;


            Updated = true;
        }

        EditorGUILayout.EndHorizontal();

        if (_ProFlareAtlas.elementsList.Count < 1)
        {
            return;
        }

        EditorGUILayout.BeginVertical("box");
        GUILayout.Space(20f);

        Rect lastRect = GUILayoutUtility.GetLastRect();

        Rect outerRect2 = new Rect(lastRect.center.x, 0 + lastRect.yMin, 200, 200);

        if (_ProFlareAtlas.elementsList.Count > 0)
        {
            GUI.DrawTextureWithTexCoords(outerRect2, _ProFlareAtlas.texture, _ProFlareAtlas.elementsList[_ProFlareAtlas.elementNumber].UV, false);
            GUILayout.Space(200f);
        }
        GUI.enabled = _ProFlareAtlas.editElements;



        if (_ProFlareAtlas.editElements)
        {
            int extra = 0;
#if UNITY_4_3
            extra = 10;
#endif
            Rect outerRect3 = new Rect(107 + extra, lastRect.yMin, 0.5f, 200);

            Rect rect = new Rect(0, 0, 1, 1);

            GUI.DrawTextureWithTexCoords(outerRect3, EditorGUIUtility.whiteTexture, rect, false);

            Rect outerRect4 = new Rect(7 + extra, 100 + lastRect.yMin, 200, 0.5f);

            GUI.DrawTextureWithTexCoords(outerRect4, EditorGUIUtility.whiteTexture, rect, true);
        }

        GUILayout.BeginHorizontal();

        if (!_ProFlareAtlas.elementsList[_ProFlareAtlas.elementNumber].Imported)
        {
            renameString = EditorGUILayout.TextField("Name", renameString);
            if (GUILayout.Button("RENAME"))
            {
                Updated = true;
                _ProFlareAtlas.elementsList[_ProFlareAtlas.elementNumber].name = renameString;
            }
        }
        else
        {
            EditorGUILayout.LabelField("Name - " + renameString);
        }

        GUILayout.EndHorizontal();

        EditorGUILayout.Toggle("Imported :", _ProFlareAtlas.elementsList[_ProFlareAtlas.elementNumber].Imported);

        float width  = EditorGUILayout.Slider("Width", _ProFlareAtlas.elementsList[_ProFlareAtlas.elementNumber].UV.width, 0f, 1f);
        float height = EditorGUILayout.Slider("Height", _ProFlareAtlas.elementsList[_ProFlareAtlas.elementNumber].UV.height, 0f, 1f);

        float CenterX = EditorGUILayout.Slider("Center X", _ProFlareAtlas.elementsList[_ProFlareAtlas.elementNumber].UV.center.x, 0f, 1f);
        float CenterY = EditorGUILayout.Slider("Center Y", _ProFlareAtlas.elementsList[_ProFlareAtlas.elementNumber].UV.center.y, 0f, 1f);

        float xMin = _ProFlareAtlas.elementsList[_ProFlareAtlas.elementNumber].UV.xMin;
        float yMin = _ProFlareAtlas.elementsList[_ProFlareAtlas.elementNumber].UV.yMin;

        Rect newRect = new Rect(xMin, yMin, width, height);

        newRect.center = new Vector2(CenterX, CenterY);

        GUILayout.Space(40f);

        _ProFlareAtlas.elementsList[_ProFlareAtlas.elementNumber].UV = newRect;

        if (GUILayout.Button("DELETE ELEMENT", redButton))
        {
            Updated = true;
            _ProFlareAtlas.elementsList.Remove(_ProFlareAtlas.elementsList[_ProFlareAtlas.elementNumber]);
            _ProFlareAtlas.elementNumber = 0;
        }

        EditorGUILayout.EndVertical();

        GUI.enabled = true;


        if (GUI.changed || Updated)
        {
            Updated    = false;
            guiChanged = true;
            EditorUtility.SetDirty(target);
        }

        FlareEditorHelper.DrawGuiDivider();
    }
Ejemplo n.º 4
0
    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;
        }
    }