using System; using System.Collections.Generic; using CommonUI.Data; using UnityEngine; using UnityEngine.UI; using CommonUI_Unity3D.Impl; namespace CommonUnity3D.UGUI { public class ImageGraphics : Image { private static Material s_DefaultImageMaterial; public static Material DefaultImageMaterial { get { if (s_DefaultImageMaterial == null) { if(UnityShaders.UI_Image_Shader != null) { s_DefaultImageMaterial = new Material(UnityShaders.UI_Image_Shader); } else { s_DefaultImageMaterial = new Material(Shader.Find("MFUGUI/Image")); } s_DefaultImageMaterial.mainTextureScale = new Vector2(1, 1); s_DefaultImageMaterial.color = UnityEngine.Color.white; //ret.SetFloat("_Gray", 1); s_DefaultImageMaterial.SetPass(0); } return s_DefaultImageMaterial; } } private DisplayNode mBinding; public DisplayNode Binding { get { return mBinding; } } private CommonUI_Unity3D.Impl.UnityImage mSrc; private Rect mClip; private Vector2 mPivot; public ImageGraphics() { this.material = ImageGraphics.DefaultImageMaterial; } protected override void Start() { this.mBinding = DisplayNode.AsDisplayNode(gameObject); base.Start(); } public override bool Raycast(Vector2 sp, Camera eventCamera) { if (mBinding != null && mBinding.Enable && mBinding.EnableTouchInParents) { return base.Raycast(sp, eventCamera); } return false; } public void SetImage(CommonUI_Unity3D.Impl.UnityImage src) { if (base.sprite != null) { Sprite.Destroy(sprite); } this.mSrc = src; this.mClip = new Rect(0, 0, src.Width, src.Height); this.mPivot = new Vector2(.5f, .5f); this.sprite = UIUtils.CreateSprite(mSrc, mClip, mPivot); this.material = mSrc.TextureMaterial; } public void SetImage(CommonUI_Unity3D.Impl.UnityImage src, Rect clip, Vector2 pivot) { if (base.sprite != null) { Sprite.Destroy(sprite); } this.mSrc = src; this.mClip = clip; this.mPivot = pivot; this.sprite = UIUtils.CreateSprite(src, clip, pivot); this.material = mSrc.TextureMaterial; } public void SetImage(CommonUI_Unity3D.Impl.UnityImage src, CommonUI.Gemo.Rectangle2D clip, Vector2 pivot) { if (base.sprite != null) { Sprite.Destroy(sprite); } this.mSrc = src; this.mClip = new Rect(clip.x, src.Texture.height - clip.y - clip.height, clip.width, clip.height); this.mPivot = pivot; this.sprite = Sprite.Create(mSrc.Texture2D, mClip, mPivot); this.material = mSrc.TextureMaterial; } protected override void OnDestroy() { if (base.sprite != null) { Sprite.Destroy(sprite); } base.OnDestroy(); } private void ResetTexture() { if (this.mSrc != null && sprite != null && this.mSrc.Texture2D != sprite.texture) { if (base.sprite != null) { Sprite.Destroy(sprite); } this.sprite = UIUtils.CreateSprite(mSrc, mClip, mPivot); this.material = mSrc.TextureMaterial; this.SetAllDirty(); } } protected override void OnEnable() { base.OnEnable(); ResetTexture(); } void Update() { ResetTexture(); } } }