123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566 |
- 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");
- UpdateGear(5);
- }
- }
- /// <summary>
- ///
- /// </summary>
- /// <value></value>
- public string skinName
- {
- get { return _skinName; }
- set
- {
- _skinName = value;
- OnChange("skinName");
- UpdateGear(5);
- }
- }
- /// <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()
- {
- if (sourceWidth == 0 || sourceHeight == 0)
- return;
- 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();
- }
- }
- }
|