SetSprite() public method

public SetSprite ( exAtlas, _atlas, int _index, bool _changeDefaultAnimSprite = false ) : void
_atlas exAtlas,
_index int
_changeDefaultAnimSprite bool
return void
Example #1
0
    // ------------------------------------------------------------------
    // Desc:
    // ------------------------------------------------------------------

    void Update()
    {
        if (playing && (curAnimation != null))
        {
            // advance the time and check if we trigger any animation events
            float delta   = Time.deltaTime * curAnimation.speed;
            float curTime = curAnimation.time;

            // advance the time
            curAnimation.time += delta;
            Step(curAnimation);

            // save the last state
            float             lastAnimTime  = curAnimation.time;
            exSpriteAnimState lastAnimation = curAnimation;

            //
            int newIdx = curAnimation.clip.TriggerEvents(this,
                                                         lastAnimation,
                                                         lastEventInfoIndex,
                                                         curTime,
                                                         delta,
                                                         curAnimation.wrapMode);

            // NOTE: it is possible in the events, user destroy this component. In this case,
            //       the curAnimation will be null.
            if (curAnimation == null ||
                curAnimation != lastAnimation ||
                lastAnimTime != curAnimation.time /*NOTE: it is possible in the event we reply the same animation*/)
            {
                return;
            }
            lastEventInfoIndex = newIdx;

            // set sprite to current time
            exSpriteAnimClip.FrameInfo fi = GetCurFrameInfo();
            if (fi != null)
            {
                sprite.SetSprite(fi.atlas, fi.index);
            }

            // check if stop
            if (curAnimation.wrapMode == WrapMode.Once ||
                curAnimation.wrapMode == WrapMode.Default)
            {
                if ((curAnimation.speed > 0.0f && curAnimation.time >= curAnimation.length) ||
                    (curAnimation.speed < 0.0f && curAnimation.time <= 0.0f))
                {
                    Stop();
                }
            }
        }
    }
Example #2
0
    public void init(exSprite pExSprite)
    {
        //Cache and init ex sprite component
        exSprite = GetComponent <exSprite>();
        exSprite.SetSprite(pExSprite.atlas, pExSprite.index);

        renderer.enabled  = false;
        renderer.material = m_alphaMaterial;
    }
Example #3
0
 ///////////////////////////////////////////////////////////////////////////////
 // functions
 ///////////////////////////////////////////////////////////////////////////////
 // ------------------------------------------------------------------
 // Desc:
 // ------------------------------------------------------------------
 public static void UpdateAtlas( exSprite _sprite, 
                                  exAtlasDB.ElementInfo _elInfo )
 {
     // get atlas and index from textureGUID
     if ( _elInfo != null ) {
         if ( _elInfo.guidAtlas != exEditorHelper.AssetToGUID(_sprite.atlas) ||
              _elInfo.indexInAtlas != _sprite.index )
         {
             _sprite.SetSprite( exEditorHelper.LoadAssetFromGUID<exAtlas>(_elInfo.guidAtlas),
                                _elInfo.indexInAtlas );
         }
     }
     else {
         _sprite.Clear();
     }
 }
Example #4
0
    ///////////////////////////////////////////////////////////////////////////////
    // functions
    ///////////////////////////////////////////////////////////////////////////////

    // ------------------------------------------------------------------
    // Desc:
    // ------------------------------------------------------------------

    public static void UpdateAtlas(exSprite _sprite,
                                   exAtlasDB.ElementInfo _elInfo)
    {
        // get atlas and index from textureGUID
        if (_elInfo != null)
        {
            if (_elInfo.guidAtlas != exEditorHelper.AssetToGUID(_sprite.atlas) ||
                _elInfo.indexInAtlas != _sprite.index)
            {
                _sprite.SetSprite(exEditorHelper.LoadAssetFromGUID <exAtlas>(_elInfo.guidAtlas),
                                  _elInfo.indexInAtlas);
            }
        }
        else
        {
            _sprite.Clear();
        }
    }
Example #5
0
    // ------------------------------------------------------------------
    // Desc:
    // ------------------------------------------------------------------

    public override void OnInspectorGUI()
    {
        // ========================================================
        // Base GUI
        // ========================================================

        base.OnInspectorGUI();
        GUILayout.Space(20);

        // ========================================================
        // init values
        // ========================================================

        //
        bool needRebuild = false;

        editSprite.spanim = editSprite.GetComponent <exSpriteAnimation>();

        // get ElementInfo first
        Texture2D editTexture = exEditorHelper.LoadAssetFromGUID <Texture2D>(editSprite.textureGUID);

        // ========================================================
        // Texture preview (input)
        // ========================================================

        bool textureChanged = false;

        GUI.enabled = !inAnimMode;
        GUILayout.BeginHorizontal();
        GUILayout.Space(20);
        EditorGUIUtility.LookLikeControls();
        Texture2D newTexture = (Texture2D)EditorGUILayout.ObjectField(editTexture
                                                                      , typeof(Texture2D)
                                                                      , false
                                                                      , GUILayout.Width(100)
                                                                      , GUILayout.Height(100)
                                                                      );

        EditorGUIUtility.LookLikeInspector();
        if (newTexture != editTexture)
        {
            editTexture            = newTexture;
            editSprite.textureGUID = exEditorHelper.AssetToGUID(editTexture);
            textureChanged         = true;
            GUI.changed            = true;
        }
        GUILayout.Space(10);
        GUILayout.BeginVertical();
        GUILayout.Space(90);
        GUILayout.Label(editTexture ? editTexture.name : "None");
        GUILayout.EndVertical();
        GUILayout.EndHorizontal();
        GUI.enabled = true;

        // ========================================================
        // get atlas element info from atlas database
        // ========================================================

        exAtlas editAtlas = null;
        int     editIndex = -1;

        exAtlasDB.ElementInfo elInfo = exAtlasDB.GetElementInfo(editSprite.textureGUID);
        if (elInfo != null)
        {
            editAtlas = exEditorHelper.LoadAssetFromGUID <exAtlas>(elInfo.guidAtlas);
            editIndex = elInfo.indexInAtlas;
        }
        bool useAtlas = editAtlas != null && editIndex != -1;

        // get atlas and index from textureGUID
        if (!EditorApplication.isPlaying)
        {
            // if we don't use atlas and current edit target use atlas, clear it.
            if (editSprite.useAtlas != useAtlas)
            {
                editSprite.Clear();
            }

            // if we use atlas, check if the atlas,index changes
            if (useAtlas)
            {
                if (editAtlas != editSprite.atlas ||
                    editIndex != editSprite.index)
                {
                    editSprite.SetSprite(editAtlas, editIndex);
                    GUI.changed = true;
                }
            }

            // check if we are first time assignment
            if (useAtlas || editTexture != null)
            {
                if (isPrefab == false && editSprite.meshFilter.sharedMesh == null)
                {
                    needRebuild = true;
                }
            }
        }

        // ========================================================
        // get trimTexture
        // ========================================================

        GUI.enabled = !inAnimMode && !useAtlas;
        bool newTrimTexture = EditorGUILayout.Toggle("Trim Texture", editSprite.trimTexture);

        if (!useAtlas &&
            (textureChanged || newTrimTexture != editSprite.trimTexture))
        {
            editSprite.GetComponent <Renderer>().sharedMaterial = exEditorHelper.GetDefaultMaterial(editTexture, editTexture.name);
            editSprite.trimTexture = newTrimTexture;

            // get trimUV
            Rect trimUV = new Rect(0, 0, 1, 1);
            if (editTexture != null)
            {
                if (editSprite.trimTexture)
                {
                    if (exTextureHelper.IsValidForAtlas(editTexture) == false)
                    {
                        exTextureHelper.ImportTextureForAtlas(editTexture);
                    }
                    trimUV = exTextureHelper.GetTrimTextureRect(editTexture);
                    trimUV = new Rect(trimUV.x / editTexture.width,
                                      (editTexture.height - trimUV.height - trimUV.y) / editTexture.height,
                                      trimUV.width / editTexture.width,
                                      trimUV.height / editTexture.height);
                }

                if (editSprite.customSize == false)
                {
                    editSprite.width  = trimUV.width * editTexture.width;
                    editSprite.height = trimUV.height * editTexture.height;
                }
            }
            editSprite.trimUV       = trimUV;
            editSprite.updateFlags |= exPlane.UpdateFlags.UV;
            editSprite.updateFlags |= exPlane.UpdateFlags.Vertex;
        }
        GUI.enabled = true;

        // ========================================================
        // color
        // ========================================================

        editSprite.color = EditorGUILayout.ColorField("Color", editSprite.color);

        // ========================================================
        // atlas & index
        // ========================================================

        GUILayout.BeginHorizontal();
        GUI.enabled = false;
        EditorGUILayout.ObjectField("Atlas"
                                    , editSprite.atlas
                                    , typeof(exAtlas)
                                    , false
                                    );
        GUI.enabled = true;

        GUI.enabled = !inAnimMode;
        if (GUILayout.Button("Edit...", GUILayout.Width(40), GUILayout.Height(15)))
        {
            exAtlasEditor editor = exAtlasEditor.NewWindow();
            editor.Edit(editSprite.atlas);
        }
        GUI.enabled = true;
        GUILayout.EndHorizontal();

        GUI.enabled = false;
        EditorGUILayout.IntField("Index", editSprite.index);
        GUI.enabled = true;

        // ========================================================
        // custom size
        // ========================================================

        GUI.enabled           = !inAnimMode;
        editSprite.customSize = EditorGUILayout.Toggle("Custom Size", editSprite.customSize);
        GUI.enabled           = true;

        // ========================================================
        // width & height
        // ========================================================

        ++EditorGUI.indentLevel;
        GUI.enabled = !inAnimMode && editSprite.customSize;
        // width
        float newWidth = EditorGUILayout.FloatField("Width", editSprite.width);

        if (newWidth != editSprite.width)
        {
            if (newWidth < 1.0f)
            {
                newWidth = 1.0f;
            }
            editSprite.width = newWidth;
        }

        // height
        float newHeight = EditorGUILayout.FloatField("Height", editSprite.height);

        if (newHeight != editSprite.height)
        {
            if (newHeight < 1.0f)
            {
                newHeight = 1.0f;
            }
            editSprite.height = newHeight;
        }
        --EditorGUI.indentLevel;

        // ========================================================
        // Reset to original
        // ========================================================

        GUILayout.BeginHorizontal();
        GUILayout.Space(30);
        if (GUILayout.Button("Reset", GUILayout.Width(50)))
        {
            if (useAtlas)
            {
                exAtlas.Element el = editAtlas.elements[editIndex];
                editSprite.width  = el.trimRect.width;
                editSprite.height = el.trimRect.height;
            }
            else if (editTexture)
            {
                editSprite.width  = editSprite.trimUV.width * editTexture.width;
                editSprite.height = editSprite.trimUV.height * editTexture.height;
            }
            GUI.changed = true;
        }
        GUILayout.EndHorizontal();
        GUI.enabled = true;

        // ========================================================
        // Rebuild button
        // ========================================================

        GUI.enabled = !inAnimMode;
        GUILayout.BeginHorizontal();
        GUILayout.FlexibleSpace();
        if (GUILayout.Button("Rebuild...", GUILayout.Height(20)))
        {
            needRebuild = true;
        }
        GUILayout.EndHorizontal();
        GUI.enabled = true;
        GUILayout.Space(5);

        // if dirty, build it.
        if (!EditorApplication.isPlaying && !AnimationUtility.InAnimationMode())
        {
            if (needRebuild)
            {
                EditorUtility.ClearProgressBar();
                editSprite.Build(editTexture);
            }
            else if (GUI.changed)
            {
                if (editSprite.meshFilter.sharedMesh != null)
                {
                    editSprite.UpdateMesh(editSprite.meshFilter.sharedMesh);
                }
                EditorUtility.SetDirty(editSprite);
            }
        }
    }
 /// <summary>
 /// Change the sprite image from another image in the same (or different atlas), using the specific index
 /// </summary>
 /// <param name='sprite'>
 /// Sprite. exSprite to be changed
 /// </param>
 /// <param name='atlas'>
 /// Atlas. exAtlas (may be the same atlas or a new one)
 /// </param>
 /// <param name='index'>
 /// Index. int (the identifier of the new Sprite)
 /// </param> 
 private static void ChangeSprite(exSprite sprite, exAtlas atlas, int index)
 {
     float width = sprite.width;
     float height = sprite.height;
     sprite.SetSprite(atlas,index,false);
     sprite.height = height;
     sprite.width = width;
 }
Example #7
0
    // ------------------------------------------------------------------
    // Desc:
    // ------------------------------------------------------------------

    public override void OnInspectorGUI()
    {
        exSprite sprite             = editSpAnim.GetComponent <exSprite>();
        bool     checkDefaultSprite = (sprite != null) && string.IsNullOrEmpty(sprite.textureGUID);

        EditorGUIUtility.LookLikeInspector();
        EditorGUILayout.Space();
        EditorGUI.indentLevel = 1;

        // ========================================================
        // Play Automatically
        // ========================================================

        editSpAnim.playAutomatically = EditorGUILayout.Toggle("Play Automatically", editSpAnim.playAutomatically);

        // ========================================================
        // Default Animation
        // ========================================================

        GUILayout.BeginHorizontal();
        editSpAnim.defaultAnimation = (exSpriteAnimClip)EditorGUILayout.ObjectField("Default Animation"
                                                                                    , editSpAnim.defaultAnimation
                                                                                    , typeof(exSpriteAnimClip)
                                                                                    , false
                                                                                    );
        if (GUILayout.Button("Edit...", GUILayout.Width(40), GUILayout.Height(15)))
        {
            exSpriteAnimClipEditor editor = exSpriteAnimClipEditor.NewWindow();
            editor.Edit(editSpAnim.defaultAnimation);
        }
        if (editSpAnim.defaultAnimation != null)
        {
            int idx = editSpAnim.animations.IndexOf(editSpAnim.defaultAnimation);
            if (idx == -1)
            {
                editSpAnim.animations.Add(editSpAnim.defaultAnimation);
            }
        }
        GUILayout.EndHorizontal();

        // ========================================================
        // Animations
        // ========================================================

        Rect lastRect = new Rect(0, 0, 1, 1);
        Rect dropRect = new Rect(0, 0, 1, 1);

        EditorGUI.indentLevel = 0;
        showAnimations        = EditorGUILayout.Foldout(showAnimations, "Animations");
        if (showAnimations)
        {
            EditorGUI.indentLevel = 2;
            // int count = EditorGUILayout.IntField ( "Size", editSpAnim.animations.Count );
            int count = exEditorHelper.IntField("Size", editSpAnim.animations.Count);
            lastRect        = GUILayoutUtility.GetLastRect();
            dropRect.height = lastRect.yMax - dropRect.y;
            count           = Mathf.Max(count, 0);

            if (count != editSpAnim.animations.Count)
            {
                //
                if (count > editSpAnim.animations.Count)
                {
                    int num = count - editSpAnim.animations.Count;
                    for (int i = 0; i < num; ++i)
                    {
                        editSpAnim.animations.Add(null);
                    }
                }
                else
                {
                    editSpAnim.animations.RemoveRange(count, editSpAnim.animations.Count - count);
                }

                //
                GUI.changed = true;
            }

            int idxRemoved = -1;
            for (int i = 0; i < editSpAnim.animations.Count; ++i)
            {
                GUILayout.BeginHorizontal();
                editSpAnim.animations[i] =
                    (exSpriteAnimClip)EditorGUILayout.ObjectField("[" + i + "]"
                                                                  , editSpAnim.animations[i]
                                                                  , typeof(exSpriteAnimClip)
                                                                  , false
                                                                  );
                if (GUILayout.Button("-", GUILayout.Width(15), GUILayout.Height(15)))
                {
                    idxRemoved = i;
                }
                if (GUILayout.Button("Edit...", GUILayout.Width(40), GUILayout.Height(15)))
                {
                    exSpriteAnimClipEditor editor = exSpriteAnimClipEditor.NewWindow();
                    editor.Edit(editSpAnim.animations[i]);
                }
                // TODO: I think we can instantiate animation state {
                // EditorGUI.indentLevel += 1;
                // // TODO:
                // EditorGUI.indentLevel -= 1;
                // } TODO end
                GUILayout.EndHorizontal();
            }

            // if we have item to remove
            if (idxRemoved != -1)
            {
                exSpriteAnimClip animClip = editSpAnim.animations[idxRemoved];
                editSpAnim.animations.RemoveAt(idxRemoved);
                if (animClip == editSpAnim.defaultAnimation)
                {
                    editSpAnim.defaultAnimation = null;
                }
            }

            EditorGUI.indentLevel = 1;
            EditorGUILayout.Space();

            lastRect        = GUILayoutUtility.GetLastRect();
            dropRect.x      = lastRect.x + 30;
            dropRect.y      = lastRect.yMax;
            dropRect.width  = lastRect.xMax - 30 - 4;
            dropRect.height = 20;

            exEditorHelper.DrawRect(dropRect, new Color(0.2f, 0.2f, 0.2f, 1.0f), new Color(0.5f, 0.5f, 0.5f, 1.0f));
            GUILayout.Space(20);

            // ========================================================
            // drag and drop
            // ========================================================

            if (dropRect.Contains(Event.current.mousePosition))
            {
                if (Event.current.type == EventType.DragUpdated)
                {
                    // Show a copy icon on the drag
                    foreach (Object o in DragAndDrop.objectReferences)
                    {
                        if (o is exSpriteAnimClip)
                        {
                            DragAndDrop.visualMode = DragAndDropVisualMode.Copy;
                            break;
                        }
                    }
                }
                else if (Event.current.type == EventType.DragPerform)
                {
                    DragAndDrop.AcceptDrag();
                    foreach (Object o in DragAndDrop.objectReferences)
                    {
                        if (o is exSpriteAnimClip)
                        {
                            editSpAnim.animations.Add(o as exSpriteAnimClip);
                        }
                    }
                    GUI.changed = true;
                }
            }
        }
        EditorGUILayout.Space();

        // TODO: FIXME {
        // ========================================================
        //
        // ========================================================

        if (checkDefaultSprite &&
            editSpAnim.animations.Count > 0 &&
            editSpAnim.animations[0] != null &&
            editSpAnim.animations[0].frameInfos.Count > 0)
        {
            exSpriteAnimClip.FrameInfo fi = editSpAnim.animations[0].frameInfos[0];
            sprite.textureGUID = fi.textureGUID;
            sprite.SetSprite(fi.atlas, fi.index);
            sprite.Build();
        }
        // } TODO end

        // ========================================================
        // set dirty if anything changed
        // ========================================================

        if (GUI.changed)
        {
            EditorUtility.SetDirty(editSpAnim);
        }
    }