using System.Collections.Generic; using UnityEngine; using CommonUI.Data; using CommonUnity3D.UGUI; using UnityImage = CommonUI_Unity3D.Impl.UnityImage; using CommonUI.Cell.Game; using CommonUI_Unity3D.Impl; using System; namespace CommonUnity3D.UGUIEditor { public class UILayout { //-------------------------------------------------------------------------------- internal UILayoutStyle mStyle = UILayoutStyle.NULL; internal Color mFillColor; internal Color mBorderColor; internal int mClipSize; internal int mClipSize2; internal bool mRepeat = false; internal UnityImage mImageSrc; internal CommonUI.Gemo.Rectangle2D mImageRegion; internal CommonUI.Cell.Game.CSpriteMeta mSprite; internal CommonUI.Cell.Game.CSpriteController mSpriteController; internal int mSpriteAnimate; public UILayoutStyle Style { get { return mStyle; } } public Texture2D MainTexture { get { if(mImageSrc != null) { return mImageSrc.Texture2D; } else { return null; } } } public Material MainMaterial { get { if (mImageSrc != null) { return mImageSrc.TextureMaterial; } else { return ImageGraphics.DefaultImageMaterial; } } } public UnityImage ImageSrc { get { return mImageSrc; } } public Color BorderColor { get { return mBorderColor; }} public Color FillColor { get { return mFillColor; } } public CommonUI.Gemo.Rectangle2D ImageRegion { get { return mImageRegion; } } public CommonUI.Cell.Game.CSpriteMeta Sprite { get { return mSprite; } } public int SpriteAnimate { get { return mSpriteAnimate; } } public CommonUI.Cell.Game.CSpriteController SpriteController { get { return mSpriteController; } } public Vector2 PreferredSize { get { if (mImageRegion != null) { return new Vector2(mImageRegion.width, mImageRegion.height); } if (mSprite != null) { CommonUI.Cell.Game.CCD cd = mSprite.getVisibleBounds(mSpriteAnimate); return new Vector2(cd.Width, cd.Height); } return new Vector2(8, 8); } } public float ClipSize { get { return mClipSize; } } public float ClipSize2 { get { return mClipSize2; } } //-------------------------------------------------------------------------------- public static UILayout CreateUILayoutImage(UILayoutStyle style, UnityImage src, int clipsize, CommonUI.Gemo.Rectangle2D imageRegion = null) { UILayout ret = new UILayout(); ret.mStyle = style; ret.mImageSrc = src; ret.mClipSize = clipsize; ret.mClipSize2 = clipsize * 2; if (imageRegion == null) { ret.mImageRegion = new CommonUI.Gemo.Rectangle2D(0, 0, src.Width, src.Height); } else { ret.mImageRegion = imageRegion; } return ret; } public static UILayout CreateUILayoutSprite(CommonUI.Cell.Game.CSpriteMeta spr, int anim) { UILayout ret = new UILayout(); ret.mStyle = UILayoutStyle.SPRITE; ret.mSprite = spr; ret.mSpriteAnimate = anim; ret.mImageSrc = spr.Atlas.GetTile(0) as UnityImage; ret.mImageRegion = spr.Atlas.GetAtlasRegion(spr.getAvaliableTileID()); ret.mSpriteController = new CommonUI.Cell.Game.CSpriteController(ret.mSprite); ret.mSpriteController.SetCurrentAnimate(anim); ret.mSpriteController.IsAutoPlay = true; return ret; } public static UILayout CreateUILayoutColor(Color fillcolor, Color bordercolor) { UILayout ret = new UILayout(); ret.mStyle = UILayoutStyle.COLOR; ret.mFillColor = fillcolor; ret.mBorderColor = bordercolor; return ret; } //-------------------------------------------------------------------------------- protected internal virtual void DecodeFromXML(UIEditor editor, UILayoutMeta e) { this.mStyle = e.Style; this.mFillColor = UIUtils.UInt32_ARGB_To_Color(e.BackColorARGB); this.mBorderColor = UIUtils.UInt32_ARGB_To_Color(e.BorderColorARGB); this.mClipSize = e.ClipSize; this.mClipSize2 = mClipSize * 2; this.mRepeat = e.Repeat; switch (mStyle) { case UILayoutStyle.NULL: case UILayoutStyle.COLOR: break; case UILayoutStyle.SPRITE: if (!string.IsNullOrEmpty(e.SpriteName) && e.SpriteName.StartsWith("@")) { mSprite = editor.ParseSpriteMeta(e.SpriteName, out mSpriteAnimate); if (mSprite != null) { this.mImageSrc = mSprite.Atlas.GetTile(0) as UnityImage; this.mImageRegion = mSprite.Atlas.GetAtlasRegion(mSprite.getAvaliableTileID()); this.mSpriteController = new CommonUI.Cell.Game.CSpriteController(mSprite); this.mSpriteController.SetCurrentAnimate(mSpriteAnimate); this.mSpriteController.IsAutoPlay = true; } } break; case UILayoutStyle.IMAGE_STYLE_ALL_8: case UILayoutStyle.IMAGE_STYLE_ALL_9: case UILayoutStyle.IMAGE_STYLE_H_012: case UILayoutStyle.IMAGE_STYLE_V_036: case UILayoutStyle.IMAGE_STYLE_HLM: case UILayoutStyle.IMAGE_STYLE_VTM: case UILayoutStyle.IMAGE_STYLE_BACK_4: case UILayoutStyle.IMAGE_STYLE_BACK_4_CENTER: if (!string.IsNullOrEmpty(e.AtlasName) && e.AtlasName.StartsWith("#")) { this.mImageSrc = editor.ParseAtlasTile(e.AtlasName, out this.mImageRegion); } else if (!string.IsNullOrEmpty(e.ImageName)) { this.mImageSrc = editor.GetImage(e.ImageName); if (mImageSrc != null) { this.mImageRegion = new CommonUI.Gemo.Rectangle2D(0, 0, mImageSrc.Width, mImageSrc.Height); } } break; default: break; } } //-------------------------------------------------------------------------------- } }