| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561 | using UnityEngine;using FairyGUI.Utils;namespace FairyGUI{    /// <summary>    ///     /// </summary>    public partial class GLoader3D : GObject, IAnimationGear, IColorGear    {        string _url;        AlignType _align;        VertAlignType _verticalAlign;        bool _autoSize;        FillType _fill;        bool _shrinkOnly;        string _animationName;        string _skinName;        bool _playing;        int _frame;        bool _loop;        bool _updatingLayout;        Color _color;        protected PackageItem _contentItem;        protected GoWrapper _content;        public GLoader3D()        {            _url = string.Empty;            _align = AlignType.Left;            _verticalAlign = VertAlignType.Top;            _playing = true;            _color = Color.white;        }        override protected void CreateDisplayObject()        {            displayObject = new Container("GLoader3D");            displayObject.gOwner = this;            _content = new GoWrapper();            _content.onUpdate += OnUpdateContent;            ((Container)displayObject).AddChild(_content);            ((Container)displayObject).opaque = true;        }        override public void Dispose()        {            _content.Dispose();            base.Dispose();        }        /// <summary>        ///         /// </summary>        public string url        {            get { return _url; }            set            {                if (_url == value)                    return;                ClearContent();                _url = value;                LoadContent();                UpdateGear(7);            }        }        override public string icon        {            get { return _url; }            set { this.url = value; }        }        /// <summary>        ///         /// </summary>        public AlignType align        {            get { return _align; }            set            {                if (_align != value)                {                    _align = value;                    UpdateLayout();                }            }        }        /// <summary>        ///         /// </summary>        public VertAlignType verticalAlign        {            get { return _verticalAlign; }            set            {                if (_verticalAlign != value)                {                    _verticalAlign = value;                    UpdateLayout();                }            }        }        /// <summary>        ///         /// </summary>        public FillType fill        {            get { return _fill; }            set            {                if (_fill != value)                {                    _fill = value;                    UpdateLayout();                }            }        }        /// <summary>        ///         /// </summary>        public bool shrinkOnly        {            get { return _shrinkOnly; }            set            {                if (_shrinkOnly != value)                {                    _shrinkOnly = value;                    UpdateLayout();                }            }        }        /// <summary>        ///         /// </summary>        public bool autoSize        {            get { return _autoSize; }            set            {                if (_autoSize != value)                {                    _autoSize = value;                    UpdateLayout();                }            }        }        public bool playing        {            get { return _playing; }            set            {                if (_playing != value)                {                    _playing = value;                    OnChange("playing");                    UpdateGear(5);                }            }        }        public int frame        {            get { return _frame; }            set            {                if (_frame != value)                {                    _frame = value;                    OnChange("frame");                    UpdateGear(5);                }            }        }        /// <summary>        /// Not implemented        /// </summary>        public float timeScale        {            get;            set;        }        /// <summary>        /// Not implemented        /// </summary>        public bool ignoreEngineTimeScale        {            get;            set;        }        /// <summary>        /// Not implemented        /// </summary>        /// <param name="time"></param>        public void Advance(float time)        {        }        /// <summary>        ///         /// </summary>        public bool loop        {            get { return _loop; }            set            {                if (_loop != value)                {                    _loop = value;                    OnChange("loop");                }            }        }        /// <summary>        ///         /// </summary>        /// <value></value>        public string animationName        {            get { return _animationName; }            set            {                _animationName = value;                OnChange("animationName");            }        }        /// <summary>        ///         /// </summary>        /// <value></value>        public string skinName        {            get { return _skinName; }            set            {                _skinName = value;                OnChange("skinName");            }        }        /// <summary>        ///         /// </summary>        public Material material        {            get { return _content.material; }            set { _content.material = value; }        }        /// <summary>        ///         /// </summary>        public string shader        {            get { return _content.shader; }            set { _content.shader = value; }        }        /// <summary>        ///         /// </summary>        public Color color        {            get { return _color; }            set            {                if (_color != value)                {                    _color = value;                    UpdateGear(4);                    OnChange("color");                }            }        }        /// <summary>        ///         /// </summary>        public GameObject wrapTarget        {            get { return _content.wrapTarget; }        }        /// <summary>        ///         /// </summary>        /// <param name="gameObject"></param>        /// <param name="cloneMaterial"></param>        /// <param name="width"></param>        /// <param name="height"></param>        public void SetWrapTarget(GameObject gameObject, bool cloneMaterial, int width, int height)        {            _content.SetWrapTarget(gameObject, cloneMaterial);            _content.SetSize(width, height);            sourceWidth = width;            sourceHeight = height;            UpdateLayout();        }        override public IFilter filter        {            get { return _content.filter; }            set { _content.filter = value; }        }        override public BlendMode blendMode        {            get { return _content.blendMode; }            set { _content.blendMode = value; }        }        /// <summary>        ///         /// </summary>        protected void LoadContent()        {            ClearContent();            if (string.IsNullOrEmpty(_url))                return;            _contentItem = UIPackage.GetItemByURL(_url);            if (_contentItem != null)            {                _contentItem = _contentItem.getBranch();                _contentItem = _contentItem.getHighResolution();                _contentItem.Load();                if (_contentItem.type == PackageItemType.Spine)                {#if FAIRYGUI_SPINE                    LoadSpine();#endif                }                else if (_contentItem.type == PackageItemType.DragoneBones)                {#if FAIRYGUI_DRAGONBONES                    LoadDragonBones();#endif                }            }            else                LoadExternal();        }        virtual protected void OnChange(string propertyName)        {            if (_contentItem == null)                return;            if (_contentItem.type == PackageItemType.Spine)            {#if FAIRYGUI_SPINE                OnChangeSpine(propertyName);#endif            }            else if (_contentItem.type == PackageItemType.DragoneBones)            {#if FAIRYGUI_DRAGONBONES                OnChangeDragonBones(propertyName);#endif            }        }        virtual protected void LoadExternal()        {        }        virtual protected void FreeExternal()        {            GameObject.DestroyImmediate(_content.wrapTarget);        }        protected void UpdateLayout()        {            float contentWidth = sourceWidth;            float contentHeight = sourceHeight;            if (_autoSize)            {                _updatingLayout = true;                if (contentWidth == 0)                    contentWidth = 50;                if (contentHeight == 0)                    contentHeight = 30;                SetSize(contentWidth, contentHeight);                _updatingLayout = false;                if (_width == contentWidth && _height == contentHeight)                {                    _content.SetXY(0, 0);                    _content.SetScale(1, 1);                    InvalidateBatchingState();                    return;                }                //如果不相等,可能是由于大小限制造成的,要后续处理            }            float sx = 1, sy = 1;            if (_fill != FillType.None)            {                sx = this.width / sourceWidth;                sy = this.height / sourceHeight;                if (sx != 1 || sy != 1)                {                    if (_fill == FillType.ScaleMatchHeight)                        sx = sy;                    else if (_fill == FillType.ScaleMatchWidth)                        sy = sx;                    else if (_fill == FillType.Scale)                    {                        if (sx > sy)                            sx = sy;                        else                            sy = sx;                    }                    else if (_fill == FillType.ScaleNoBorder)                    {                        if (sx > sy)                            sy = sx;                        else                            sx = sy;                    }                    if (_shrinkOnly)                    {                        if (sx > 1)                            sx = 1;                        if (sy > 1)                            sy = 1;                    }                    contentWidth = sourceWidth * sx;                    contentHeight = sourceHeight * sy;                }            }            _content.SetScale(sx, sy);            float nx;            float ny;            if (_align == AlignType.Center)                nx = (this.width - contentWidth) / 2;            else if (_align == AlignType.Right)                nx = this.width - contentWidth;            else                nx = 0;            if (_verticalAlign == VertAlignType.Middle)                ny = (this.height - contentHeight) / 2;            else if (_verticalAlign == VertAlignType.Bottom)                ny = this.height - contentHeight;            else                ny = 0;            _content.SetXY(nx, ny);            InvalidateBatchingState();        }        protected void ClearContent()        {            if (_content.wrapTarget != null)            {                if (_contentItem != null)                {                    if (_contentItem.type == PackageItemType.Spine)                    {#if FAIRYGUI_SPINE                        FreeSpine();#endif                    }                    else if (_contentItem.type == PackageItemType.DragoneBones)                    {#if FAIRYGUI_DRAGONBONES                        FreeDragonBones();#endif                    }                }                else                    FreeExternal();            }            _content.wrapTarget = null;            _contentItem = null;        }        protected void OnUpdateContent(UpdateContext context)        {            if (_contentItem == null)                return;            if (_contentItem.type == PackageItemType.Spine)            {#if FAIRYGUI_SPINE                OnUpdateSpine(context);#endif            }            else if (_contentItem.type == PackageItemType.DragoneBones)            {#if FAIRYGUI_DRAGONBONES                OnUpdateDragonBones(context);#endif            }        }        override protected void HandleSizeChanged()        {            base.HandleSizeChanged();            if (!_updatingLayout)                UpdateLayout();        }        override public void Setup_BeforeAdd(ByteBuffer buffer, int beginPos)        {            base.Setup_BeforeAdd(buffer, beginPos);            buffer.Seek(beginPos, 5);            _url = buffer.ReadS();            _align = (AlignType)buffer.ReadByte();            _verticalAlign = (VertAlignType)buffer.ReadByte();            _fill = (FillType)buffer.ReadByte();            _shrinkOnly = buffer.ReadBool();            _autoSize = buffer.ReadBool();            _animationName = buffer.ReadS();            _skinName = buffer.ReadS();            _playing = buffer.ReadBool();            _frame = buffer.ReadInt();            _loop = buffer.ReadBool();            if (buffer.ReadBool())                this.color = buffer.ReadColor(); //color            if (!string.IsNullOrEmpty(_url))                LoadContent();        }    }}
 |