/** * @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(""); } }
/** * @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(""); } }
/** * @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(""); } }
/** * @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(""); } }
/** * @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(""); } } }
/** * @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(""); } }
/** * @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); }