Beispiel #1
0
        /**
         * @private
         */
        protected void _updateDisplay()
        {
            var prevDisplay       = _display != null ? _display : _rawDisplay;
            var prevChildArmature = _childArmature;

            if (_displayIndex >= 0 && _displayIndex < _displayList.Count)
            {
                _display = _displayList[_displayIndex];
                if (_display is Armature)
                {
                    _childArmature = (Armature)_display;
                    _display       = _childArmature.display;
                }
                else
                {
                    _childArmature = null;
                }
            }
            else
            {
                _display       = null;
                _childArmature = null;
            }

            var currentDisplay = _display != null ? _display : _rawDisplay;

            if (currentDisplay != prevDisplay)
            {
                _onUpdateDisplay();
                _replaceDisplay(prevDisplay);

                _blendModeDirty = true;
                _colorDirty     = true;
            }

            // Update frame.
            if (currentDisplay == _rawDisplay || currentDisplay == _meshDisplay)
            {
                _updateFrame();
            }

            // Update child armature.
            if (_childArmature != prevChildArmature)
            {
                if (prevChildArmature != null)
                {
                    prevChildArmature.clock   = null;
                    prevChildArmature._parent = null; // Update child armature parent.
                    if (prevChildArmature.inheritAnimation)
                    {
                        prevChildArmature.animation.Reset();
                    }
                }

                if (_childArmature != null)
                {
                    _childArmature.clock   = _armature.clock;
                    _childArmature._parent = this; // Update child armature parent.

                    // Update child armature flip.
                    _childArmature.flipX = _armature.flipX;
                    _childArmature.flipY = _armature.flipY;

                    if (_childArmature.inheritAnimation)
                    {
                        if (_childArmature.cacheFrameRate == 0) // Set child armature frameRate.
                        {
                            var cacheFrameRate = _armature.cacheFrameRate;
                            if (cacheFrameRate != 0)
                            {
                                _childArmature.cacheFrameRate = cacheFrameRate;
                            }
                        }

                        // Child armature action.
                        var actions = _skinSlotData.slot.actions.Count > 0 ? _skinSlotData.slot.actions : _childArmature.armatureData.actions;
                        if (actions.Count > 0)
                        {
                            foreach (var action in actions)
                            {
                                _childArmature._bufferAction(action);
                            }
                        }
                        else
                        {
                            _childArmature.animation.Play();
                        }
                    }
                }
            }
        }
Beispiel #2
0
        /**
         * @private
         */
        protected void _updateDisplay()
        {
            var prevDisplay       = _display != null ? _display : _rawDisplay;
            var prevChildArmature = _childArmature;

            if (_displayIndex >= 0 && _displayIndex < _displayList.Count)
            {
                _display = _displayList[_displayIndex];
                if (_display is Armature)
                {
                    _childArmature = (Armature)_display;
                    _display       = _childArmature._display;
                }
                else
                {
                    _childArmature = null;
                }
            }
            else
            {
                _display       = null;
                _childArmature = null;
            }

            var currentDisplay = _display != null ? _display : _rawDisplay;

            if (currentDisplay != prevDisplay)
            {
                _onUpdateDisplay();

                if (prevDisplay != null)
                {
                    _replaceDisplay(prevDisplay);
                }
                else
                {
                    _addDisplay();
                }

                _blendModeDirty = true;
                _colorDirty     = true;
            }

            // Update origin.
            if (_displayDataSet != null && _displayIndex >= 0 && _displayIndex < _displayDataSet.displays.Count)
            {
                origin.CopyFrom(_displayDataSet.displays[_displayIndex].transform);
                _originDirty = true;
            }

            // Update meshData.
            _updateMeshData(false);

            // Update frame.
            if (currentDisplay == _rawDisplay || currentDisplay == _meshDisplay)
            {
                _updateFrame();
            }

            // Update child armature.
            if (_childArmature != prevChildArmature)
            {
                if (prevChildArmature != null)
                {
                    prevChildArmature._parent = null; // Update child armature parent.
                    if (inheritAnimation)
                    {
                        prevChildArmature.animation.Reset();
                    }
                }

                if (_childArmature != null)
                {
                    _childArmature._parent = this; // Update child armature parent.

                    // Update child armature flip.
                    _childArmature.flipX = this._armature.flipX;
                    _childArmature.flipY = this._armature.flipY;

                    if (inheritAnimation)
                    {
                        if (_childArmature.cacheFrameRate == 0) // Set child armature frameRate.
                        {
                            var cacheFrameRate = _armature.cacheFrameRate;
                            if (cacheFrameRate != 0)
                            {
                                _childArmature.cacheFrameRate = cacheFrameRate;
                            }
                        }

                        // Child armature action.
                        var slotData = _armature.armatureData.GetSlot(name);
                        var actions  = slotData.actions.Count > 0 ? slotData.actions : _childArmature.armatureData.actions;
                        if (actions.Count > 0)
                        {
                            foreach (var action in actions)
                            {
                                _childArmature._bufferAction(action);
                            }
                        }
                        else
                        {
                            _childArmature.animation.Play();
                        }
                    }
                }
            }
        }