/**
         * @private
         */
        public void AddFFDTimeline(FFDTimelineData value)
        {
            if (value != null && value.skin != null && value.slot != null)
            {
                var skin = ffdTimelines.ContainsKey(value.skin.name) ?
                           ffdTimelines[value.skin.name] :
                           (ffdTimelines[value.skin.name] = new Dictionary <string, Dictionary <string, FFDTimelineData> >());

                var slot = skin.ContainsKey(value.slot.slot.name) ?
                           skin[value.slot.slot.name] :
                           (skin[value.slot.slot.name] = new Dictionary <string, FFDTimelineData>());

                if (!slot.ContainsKey(value.displayIndex.ToString()))
                {
                    slot[value.displayIndex.ToString()] = value;
                }
                else
                {
                    DragonBones.Warn("");
                }
            }
            else
            {
                DragonBones.Warn("");
            }
        }
Пример #2
0
 /**
  * @language zh_CN
  * 添加龙骨数据。
  * @param data 龙骨数据。
  * @param name 为数据指定一个名称,以便可以通过这个名称获取数据,如果未设置,则使用数据中的名称。
  * @see #parseDragonBonesData()
  * @see #getDragonBonesData()
  * @see #removeDragonBonesData()
  * @see dragonBones.DragonBonesData
  * @version DragonBones 3.0
  */
 public void AddDragonBonesData(DragonBonesData data, string name = null)
 {
     if (data != null)
     {
         name = DragonBones.IsAvailableString(name) ? name : data.name;
         if (DragonBones.IsAvailableString(name))
         {
             if (!_dragonBonesDataMap.ContainsKey(name))
             {
                 _dragonBonesDataMap[name] = data;
             }
             else
             {
                 DragonBones.Warn("Same name data. " + name);
             }
         }
         else
         {
             DragonBones.Warn("Unnamed data.");
         }
     }
     else
     {
         DragonBones.Warn("");
     }
 }
 /**
  * @private
  */
 public void AddSlotTimeline(SlotTimelineData value)
 {
     if (value != null && value.slot != null && !slotTimelines.ContainsKey(value.slot.name))
     {
         slotTimelines[value.slot.name] = value;
     }
     else
     {
         DragonBones.Warn("");
     }
 }
 /**
  * @private
  */
 public void AddBoneTimeline(BoneTimelineData value)
 {
     if (value != null && value.bone != null && !boneTimelines.ContainsKey(value.bone.name))
     {
         boneTimelines[value.bone.name] = value;
     }
     else
     {
         DragonBones.Warn("");
     }
 }
 /**
  * @private
  */
 public void AddSlot(SlotDisplayDataSet value)
 {
     if (value != null && value.slot != null && !slots.ContainsKey(value.slot.name))
     {
         slots[value.slot.name] = value;
     }
     else
     {
         DragonBones.Warn("");
     }
 }
Пример #6
0
 /**
  * @language zh_CN
  * 将一个指定的骨骼从骨架中移除。
  * @param value 需要移除的骨骼。
  * @see dragonBones.Bone
  * @version DragonBones 3.0
  */
 public void RemoveBone(Bone value)
 {
     if (value != null && value.armature == this)
     {
         value._setParent(null);
         value._setArmature(null);
     }
     else
     {
         DragonBones.Warn("");
     }
 }
 /**
  * @private
  */
 public void AddTexture(TextureData value)
 {
     if (value != null && value.name != null && !textures.ContainsKey(value.name))
     {
         textures[value.name] = value;
         value.parent         = this;
     }
     else
     {
         DragonBones.Warn("");
     }
 }
Пример #8
0
 /**
  * @language zh_CN
  * 将一个指定的骨骼添加到骨架中。
  * @param value 需要添加的骨骼。
  * @param parentName 需要添加到父骨骼的名称,如果未设置,则添加到骨架根部。
  * @see dragonBones.Bone
  * @version DragonBones 3.0
  */
 public void AddBone(Bone value, string parentName = null)
 {
     if (value != null)
     {
         value._setArmature(this);
         value._setParent(!string.IsNullOrEmpty(parentName) ? GetBone(parentName) : null);
     }
     else
     {
         DragonBones.Warn("");
     }
 }
 /**
  * @language zh_CN
  * 将一个指定的骨骼添加到骨架中。
  * @param value 需要添加的骨骼。
  * @param parentName 需要添加到父骨骼的名称,如果未设置,则添加到骨架根部。
  * @see dragonBones.Bone
  * @version DragonBones 3.0
  */
 public void AddBone(Bone value, string parentName = null)
 {
     if (value != null)
     {
         value._setArmature(this);
         value._setParent(DragonBones.IsAvailableString(parentName) ? GetBone(parentName) : null);
     }
     else
     {
         DragonBones.Warn("");
     }
 }
Пример #10
0
 /**
  * @private
  */
 public void AddArmature(ArmatureData value)
 {
     if (value != null && value.name != null && !armatures.ContainsKey(value.name))
     {
         armatures[value.name] = value;
         _armatureNames.Add(value.name);
         value.parent = this;
     }
     else
     {
         DragonBones.Warn("");
     }
 }
 /**
  * @private
  */
 public void AddSlot(SlotData value)
 {
     if (value != null && value.name != null && !slots.ContainsKey(value.name))
     {
         slots[value.name] = value;
         _sortedSlots.Add(value);
         _slotDirty = true;
     }
     else
     {
         DragonBones.Warn("");
     }
 }
        /**
         * @language zh_CN
         * 将一个指定的插槽添加到骨架中。
         * @param value 需要添加的插槽。
         * @param parentName 需要添加到的父骨骼名称。
         * @see dragonBones.Slot
         * @version DragonBones 3.0
         */
        public void AddSlot(Slot value, string parentName)
        {
            var bone = GetBone(parentName);

            if (bone != null)
            {
                value._setArmature(this);
                value._setParent(bone);
            }
            else
            {
                DragonBones.Warn("");
            }
        }
 /**
  * @private
  */
 public void AddSkin(SkinData value)
 {
     if (value != null && value.name != null && !skins.ContainsKey(value.name))
     {
         skins[value.name] = value;
         if (_defaultSkin == null)
         {
             _defaultSkin = value;
         }
     }
     else
     {
         DragonBones.Warn("");
     }
 }
 /**
  * @private
  */
 public void AddAnimation(AnimationData value)
 {
     if (value != null && value.name != null && !animations.ContainsKey(value.name))
     {
         animations[value.name] = value;
         _animationNames.Add(value.name);
         if (_defaultAnimation == null)
         {
             _defaultAnimation = value;
         }
     }
     else
     {
         DragonBones.Warn("");
     }
 }
        private static void _returnObject(BaseObject obj)
        {
            var classType = obj.GetType();
            var maxCount  = _maxCountMap.ContainsKey(classType) ? _maxCountMap[classType] : _defaultMaxCount;
            var pool      = _poolsMap.ContainsKey(classType) ? _poolsMap[classType] : _poolsMap[classType] = new List <BaseObject>();

            if (pool.Count < maxCount)
            {
                if (!pool.Contains(obj))
                {
                    pool.Add(obj);
                }
                else
                {
                    DragonBones.Warn("");
                }
            }
        }
Пример #16
0
        /**
         * @language zh_CN
         * 创建一个指定名称的骨架。
         * @param armatureName 骨架数据名称。
         * @param dragonBonesName 龙骨数据名称,如果未设置,将检索所有的龙骨数据,当多个龙骨数据中包含同名的骨架数据时,可能无法创建出准确的骨架。
         * @param skinName 皮肤名称,如果未设置,则使用默认皮肤。
         * @returns 骨架
         * @see dragonBones.Armature
         * @version DragonBones 3.0
         */
        public Armature BuildArmature(string armatureName, string dragonBonesName = null, string skinName = null)
        {
            var dataPackage = new BuildArmaturePackage();

            if (_fillBuildArmaturePackage(dragonBonesName, armatureName, skinName, dataPackage))
            {
                var armature = _generateArmature(dataPackage);
                _buildBones(dataPackage, armature);
                _buildSlots(dataPackage, armature);

                armature.AdvanceTime(0.0f); // Update armature pose.

                return(armature);
            }

            DragonBones.Warn("No armature data. " + armatureName + " " + dragonBonesName != null ? dragonBonesName : "");

            return(null);
        }
        /**
         * @private
         */
        public void AddBone(BoneData value, string parentName)
        {
            if (value != null && value.name != null && !bones.ContainsKey(value.name))
            {
                if (parentName != null)
                {
                    var parent = GetBone(parentName);
                    if (parent != null)
                    {
                        value.parent = parent;
                    }
                    else
                    {
                        (_bonesChildren.ContainsKey(parentName) ?
                         _bonesChildren[parentName] :
                         (_bonesChildren[parentName] = new List <BoneData>())).Add(value);
                    }
                }

                if (_bonesChildren.ContainsKey(value.name))
                {
                    foreach (var child in _bonesChildren[value.name])
                    {
                        child.parent = value;
                    }

                    _bonesChildren.Remove(value.name);
                }

                bones[value.name] = value;
                _sortedBones.Add(value);
                _boneDirty = true;
            }
            else
            {
                DragonBones.Warn("");
            }
        }
Пример #18
0
 /**
  * @language zh_CN
  * 添加贴图集数据。
  * @param data 贴图集数据。
  * @param name 为数据指定一个名称,以便可以通过这个名称获取数据,如果未设置,则使用数据中的名称。
  * @see #parseTextureAtlasData()
  * @see #getTextureAtlasData()
  * @see #removeTextureAtlasData()
  * @see dragonBones.textures.TextureAtlasData
  * @version DragonBones 3.0
  */
 public void AddTextureAtlasData(TextureAtlasData data, string name = null)
 {
     if (data != null)
     {
         name = DragonBones.IsAvailableString(name) ? name : data.name;
         if (DragonBones.IsAvailableString(name))
         {
             var textureAtlasList = _textureAtlasDataMap.ContainsKey(name) ? _textureAtlasDataMap[name] : (_textureAtlasDataMap[name] = new List <TextureAtlasData>());
             if (!textureAtlasList.Contains(data))
             {
                 textureAtlasList.Add(data);
             }
         }
         else
         {
             DragonBones.Warn("Unnamed data.");
         }
     }
     else
     {
         DragonBones.Warn("");
     }
 }
        /**
         * @language zh_CN
         * 更新骨架和动画。 (可以使用时钟实例或显示容器来更新)
         * @param passedTime 两帧之前的时间间隔。 (以秒为单位)
         * @see dragonBones.IAnimateble
         * @see dragonBones.WorldClock
         * @see dragonBones.IArmatureDisplay
         * @version DragonBones 3.0
         */
        public void AdvanceTime(float passedTime)
        {
            if (_animation == null)
            {
                DragonBones.Warn("The armature has been disposed.");
            }

            var scaledPassedTime = passedTime * _animation.timeScale;

            // Animations.
            _animation._advanceTime(scaledPassedTime);

            // Bones and slots.
            if (_bonesDirty)
            {
                _bonesDirty = false;
                _sortBones();
            }

            if (_slotsDirty)
            {
                _slotsDirty = false;
                _sortSlots();
            }

            for (int i = 0, l = _bones.Count; i < l; ++i)
            {
                var bone = _bones [i];
                bone._update(_cacheFrameIndex);
            }

            for (int i = 0, l = _slots.Count; i < l; ++i)
            {
                var slot = _slots [i];
                slot._update(_cacheFrameIndex);

                var childArmature = slot._childArmature;
                if (childArmature != null)
                {
                    if (slot.inheritAnimation) // Animation's time scale will impact to childArmature.
                    {
                        childArmature.AdvanceTime(scaledPassedTime);
                    }
                    else
                    {
                        childArmature.AdvanceTime(passedTime);
                    }
                }
            }

            if (!_lockDispose)
            {
                _lockDispose = true;

                // Actions and events.
                if (_events.Count > 0) // Dispatch event before action.
                {
                    foreach (var evt in _events)
                    {
                        _eventDispatcher.DispatchEvent(evt.type, evt);

                        if (evt.type == EventObject.SOUND_EVENT)
                        {
                            _eventManager.DispatchEvent(evt.type, evt);
                        }

                        evt.ReturnToPool();
                    }

                    _events.Clear();
                }

                if (_actions.Count > 0)
                {
                    foreach (var action in _actions)
                    {
                        if (action.slot != null)
                        {
                            var slot = GetSlot(action.slot.name);
                            if (slot != null)
                            {
                                var childArmature = slot._childArmature;
                                if (childArmature != null)
                                {
                                    childArmature._doAction(action);
                                }
                            }
                        }
                        else if (action.bone != null)
                        {
                            foreach (var slot in _slots)
                            {
                                var childArmature = slot._childArmature;
                                if (childArmature != null)
                                {
                                    childArmature._doAction(action);
                                }
                            }
                        }
                        else
                        {
                            _doAction(action);
                        }
                    }

                    _actions.Clear();
                }

                _lockDispose = false;
            }

            if (_delayDispose)
            {
                ReturnToPool();
            }
        }
        /**
         * @language zh_CN
         * 淡入播放指定名称的动画。
         * @param animationName 动画数据的名称。
         * @param playTimes 循环播放的次数。 [-1: 使用数据默认值, 0: 无限循环播放, [1~N]: 循环播放 N 次]
         * @param fadeInTime 淡入的时间。 [-1: 使用数据默认值, [0~N]: N 秒淡入完毕] (以秒为单位)
         * @param layer 混合的图层,图层高会优先获取混合权重。
         * @param group 混合的组,用于给动画状态编组,方便混合淡出控制。
         * @param fadeOutMode 淡出的模式。
         * @param additiveBlending 以叠加的形式混合。
         * @param displayControl 是否对显示对象属性可控。
         * @param pauseFadeOut 暂停需要淡出的动画。
         * @param pauseFadeIn 暂停需要淡入的动画,直到淡入结束才开始播放。
         * @returns 返回控制这个动画数据的动画状态。
         * @see dragonBones.AnimationFadeOutMode
         * @see dragonBones.AnimationState
         * @version DragonBones 4.5
         */
        public AnimationState FadeIn(
            string animationName, float fadeInTime = -1.0f, int playTimes = -1,
            int layer             = 0, string group = null, AnimationFadeOutMode fadeOutMode = AnimationFadeOutMode.SameLayerAndGroup,
            bool additiveBlending = false, bool displayControl = true,
            bool pauseFadeOut     = true, bool pauseFadeIn     = true
            )
        {
            if (!_animations.ContainsKey(animationName))
            {
                _time = 0;
                DragonBones.Warn(
                    "Non-existent animation. " +
                    " DragonBones: " + _armature.armatureData.parent.name +
                    " Armature: " + _armature.name +
                    " Animation: " + animationName
                    );
                return(null);
            }

            var animationData = _animations[animationName];

            if (float.IsNaN(_time))
            {
                _time = 0.0f;
            }

            _isPlaying = true;

            if (fadeInTime < 0.0f || float.IsNaN(fadeInTime))
            {
                if (_lastAnimationState != null)
                {
                    fadeInTime = animationData.fadeInTime;
                }
                else
                {
                    fadeInTime = 0.0f;
                }
            }

            if (playTimes < 0)
            {
                playTimes = (int)animationData.playTimes;
            }

            _fadeOut(fadeInTime, layer, group, fadeOutMode, pauseFadeOut);

            _lastAnimationState                  = BaseObject.BorrowObject <AnimationState>();
            _lastAnimationState._layer           = layer;
            _lastAnimationState._group           = group;
            _lastAnimationState.additiveBlending = additiveBlending;
            _lastAnimationState.displayControl   = displayControl;
            _lastAnimationState._fadeIn(
                _armature, animationData.animation != null ? animationData.animation : animationData, animationName,
                (uint)playTimes, animationData.position, animationData.duration, _time, 1 / animationData.scale, fadeInTime,
                pauseFadeIn
                );
            _animationStates.Add(_lastAnimationState);
            _animationStateDirty = true;
            _time = 0.0f;
            _armature._cacheFrameIndex = -1;

            if (_animationStates.Count > 1)
            {
                _animationStates.Sort(_sortAnimationState);
            }

            foreach (var slot in _armature.GetSlots())
            {
                if (slot.inheritAnimation)
                {
                    var childArmature = slot.childArmature;
                    if (
                        childArmature != null &&
                        childArmature.animation.HasAnimation(animationName) &&
                        childArmature.animation.GetState(animationName) == null
                        )
                    {
                        childArmature.animation.FadeIn(animationName);
                    }
                }
            }

            if (fadeInTime <= 0.0f)
            {
                _armature.AdvanceTime(0.0f); // Blend animation state, update armature. (pass actions and events)
            }

            return(_lastAnimationState);
        }