/** * @inheritDoc */ protected override void _onClear() { base._onClear(); displayIndex = 0; skin = null; slot = null; }
/** * @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(""); } }
/** * @private */ override protected Slot _generateSlot(BuildArmaturePackage dataPackage, SlotDisplayDataSet slotDisplayDataSet, Armature armature) { var slot = BaseObject.BorrowObject <UnitySlot>(); var slotData = slotDisplayDataSet.slot; var displayList = new List <object>(); slot.name = slotData.name; slot._rawDisplay = new GameObject(); slot._meshDisplay = slot._rawDisplay; (slot._rawDisplay as GameObject).AddComponent <SpriteRenderer>(); (slot._rawDisplay as GameObject).name = slot.name; foreach (var displayData in slotDisplayDataSet.displays) { switch (displayData.type) { case DisplayType.Image: if (displayData.texture == null) { displayData.texture = this._getTextureData(dataPackage.dataName, displayData.name); } displayList.Add(slot._rawDisplay); break; case DisplayType.Mesh: if (displayData.texture == null) { displayData.texture = this._getTextureData(dataPackage.dataName, displayData.name); } displayList.Add(slot._meshDisplay); break; case DisplayType.Armature: var childArmature = this.BuildArmature(displayData.name, dataPackage.dataName); if (childArmature != null) { if (!slot.inheritAnimation) { var actions = slotData.actions.Count > 0 ? slotData.actions : childArmature.armatureData.actions; if (actions.Count > 0) { foreach (var actionData in actions) { childArmature._bufferAction(actionData); } } else { childArmature.animation.Play(); } } // hide var childArmatureDisplay = childArmature.display as GameObject; var armatureComponent = childArmatureDisplay.GetComponent <UnityArmatureComponent>(); if (armatureComponent != null && Application.isPlaying) { childArmatureDisplay.transform.parent = _hiddenObject.transform; } else { childArmatureDisplay.transform.parent = (armature.display as GameObject).transform; childArmatureDisplay.SetActive(false); } // (childArmature.display as GameObject).name = slot.name; displayData.armature = childArmature.armatureData; // } displayList.Add(childArmature); break; default: displayList.Add(null); break; } } slot._setDisplayList(displayList); return(slot); }
/** * @private */ protected abstract Slot _generateSlot(BuildArmaturePackage dataPackage, SlotDisplayDataSet slotDisplayDataSet, Armature armature);
/** * @inheritDoc */ protected override void _onClear() { base._onClear(); var disposeDisplayList = new List <object>(); foreach (var eachDisplay in _displayList) { if ( eachDisplay != _rawDisplay && eachDisplay != _meshDisplay && !disposeDisplayList.Contains(eachDisplay) ) { disposeDisplayList.Add(eachDisplay); } } foreach (var eachDisplay in disposeDisplayList) { if (eachDisplay is Armature) { ((Armature)eachDisplay).Dispose(); } else { _disposeDisplay(eachDisplay); } } if (_meshDisplay != null && _meshDisplay != _rawDisplay) // May be _meshDisplay and _rawDisplay is the same one. { _disposeDisplay(_meshDisplay); } if (_rawDisplay != null) { _disposeDisplay(_rawDisplay); } inheritAnimation = true; displayController = null; _blendIndex = -1; _zOrder = 0; _displayDataSet = null; _meshData = null; _childArmature = null; _rawDisplay = null; _meshDisplay = null; _cacheFrames = null; _colorTransform.Identity(); _ffdVertices.Clear(); _replacedDisplayDataSet.Clear(); _zOrderDirty = false; _displayDirty = false; _blendModeDirty = false; _colorDirty = false; _originDirty = false; _transformDirty = false; _ffdDirty = false; _displayIndex = -2; _cacheFrameIndex = -1; _blendMode = BlendMode.Normal; _pivotX = 0.0f; _pivotY = 0.0f; _display = null; _localMatrix.Identity(); _displayList.Clear(); _meshBones.Clear(); }
/** * @private */ override protected Slot _generateSlot(BuildArmaturePackage dataPackage, SlotDisplayDataSet slotDisplayDataSet, Armature armature) { var slot = BaseObject.BorrowObject <UnitySlot>(); var slotData = slotDisplayDataSet.slot; var displayList = new List <object>(); var armatureDisplay = armature.display as GameObject; var transform = armatureDisplay.transform.Find(slotData.name); var gameObject = transform == null ? null : transform.gameObject; if (gameObject == null) { gameObject = new GameObject(slotData.name); gameObject.AddComponent <MeshRenderer>(); gameObject.AddComponent <MeshFilter>(); } slot.name = slotData.name; slot._rawDisplay = gameObject; slot._meshDisplay = slot._rawDisplay; foreach (var displayData in slotDisplayDataSet.displays) { switch (displayData.type) { case DisplayType.Image: if (displayData.texture == null) { displayData.texture = this._getTextureData(dataPackage.dataName, displayData.name); } displayList.Add(slot._rawDisplay); break; case DisplayType.Mesh: if (displayData.texture == null) { displayData.texture = this._getTextureData(dataPackage.dataName, displayData.name); } displayList.Add(slot._meshDisplay); break; case DisplayType.Armature: var childDisplayName = slotData.name + " (" + displayData.name + ")"; var childTransform = armatureDisplay.transform.Find(childDisplayName); var childArmature = childTransform == null? this.BuildArmature(displayData.name, dataPackage.dataName) : BuildArmatureComponent(displayData.name, dataPackage.dataName, null, childTransform.gameObject).armature; if (childArmature != null) { if (childArmature._clock != null) { childArmature._clock.Remove(childArmature); } if (!slot.inheritAnimation) { var actions = slotData.actions.Count > 0 ? slotData.actions : childArmature.armatureData.actions; if (actions.Count > 0) { foreach (var actionData in actions) { childArmature._bufferAction(actionData); } } else { childArmature.animation.Play(); } } displayData.armature = childArmature.armatureData; // // Hide var childArmatureDisplay = childArmature.display as GameObject; childArmatureDisplay.name = childDisplayName; childArmatureDisplay.gameObject.hideFlags = HideFlags.HideInHierarchy; childArmatureDisplay.SetActive(false); } displayList.Add(childArmature); break; default: displayList.Add(null); break; } } slot._setDisplayList(displayList); return(slot); }