Exemple #1
0
        void LateUpdate()
        {
            if (_viewCamera && _armorBones && _armorCmpt)
            {
                if (_armorCmpt.hasRequest)
                {
                    return;
                }


                // 计算鼠标在界面上的位置
                if (_uiCamera == null)
                {
                    _uiCamera = GetComponentInParent <Camera>();
                }
                Vector2 cursor = Input.mousePosition - _uiCamera.WorldToScreenPoint(transform.position);
                _toolTip.UpdateToolTip(cursor);

                // 右键点击检查
                bool rightClick = false;
                if (Input.GetMouseButtonDown(1))
                {
                    _lastRightButtonDownPosition = cursor;
                }
                if (Input.GetMouseButtonUp(1))
                {
                    rightClick = (_lastRightButtonDownPosition - cursor).sqrMagnitude <= 2.1f;
                }

                // 显示激活的骨骼组
                if (_activeGroup != ArmorType.None)
                {
                    bool hasHover = false;

                    for (int i = groupFirst[(int)_activeGroup]; i <= groupLast[(int)_activeGroup]; i++)
                    {
                        // 更新骨骼 UI 的位置
                        _boneUIs[i].UpdatePosition(_armorBones.nodes(i).bone, _viewCamera);

                        // 更新高亮骨骼
                        if (!hasHover && _boneUIs[i].isHover(cursor))
                        {
                            hasHover       = true;
                            highlightIndex = i;
                        }
                    }

                    if (!hasHover)
                    {
                        highlightIndex = -1;
                    }
                }

                // 显示已装备的装甲
                else if (_armorsVisible)
                {
                    bool hasHover = false;

                    for (int i = 0; i < 16; i++)
                    {
                        if (_boneUIs[i].enabled)
                        {
                            // 更新骨骼 UI 的位置
                            _boneUIs[i].UpdatePosition(_armorBones.nodes(i).bone, _viewCamera);

                            // 更新高亮骨骼
                            if (!hasHover && _boneUIs[i].isHover(cursor))
                            {
                                hasHover       = true;
                                highlightIndex = i;
                            }
                        }
                    }

                    if (!hasHover)
                    {
                        highlightIndex = -1;
                        if (rightClick)
                        {
                            OnSettingsButtonClick();
                        }
                    }
                    else
                    {
                        _boneUIs[_highlightIndex].pressing = Input.GetMouseButton(0);

                        if (Input.GetMouseButtonDown(0))
                        {
                            _mouseDownIndex = _highlightIndex;
                        }

                        if (Input.GetMouseButtonUp(0) && _mouseDownIndex == _highlightIndex)
                        {
                            SetArmorsVisible(false);
                            isDecoration = false;
                            focused      = true;
                        }
                    }
                }

                // 显示选中的装甲
                else if (_focused)
                {
                    _boneUIs[_highlightIndex].UpdatePosition(_armorBones.nodes(_highlightIndex).bone, _viewCamera);
                    if (_boneUIs[_highlightIndex].isHover(cursor))
                    {
                        _boneUIs[_highlightIndex].pressing = Input.GetMouseButton(0);
                        if (Input.GetMouseButtonUp(0))
                        {
                            isDecoration = !_isDecoration;
                        }
                    }
                    else
                    {
                        if (rightClick)
                        {
                            OnSettingsButtonClick();
                        }
                    }
                }

                // 显示操作控件
                else if (_showHandles)
                {
                    Vector3 screenPosition = new Vector3(
                        cursor.x * _viewCamera.targetTexture.width / viewSize.x,
                        cursor.y * _viewCamera.targetTexture.height / viewSize.y);

                    _vc.moveHandle.customMousePosition   = screenPosition;
                    _vc.rotateHandle.customMousePosition = screenPosition;
                    _vc.scaleHandle.customMousePosition  = screenPosition;

                    if (rightClick)
                    {
                        SetMoveHandle(null);
                        SetRotateHandle(null);
                        SetScaleHandle(null);
                        focused = true;
                    }
                }

                if (_focused || _showHandles)
                {
                    // 描边动画
                    if (_outline)
                    {
                        _outlineStartTime += Time.unscaledDeltaTime;
                        _outlineStartTime %= 1f;
                        _outline.color     = Interpolation.Parabolic(_outlineStartTime) * (outlineColor2 - outlineColor1) + outlineColor1;
                    }
                }
            }

            if (_light)
            {
                if (_activeGroup != ArmorType.None || _armorsVisible || _showHandles || _focused)
                {
                    _light.color = Color.Lerp(_light.color, darkLightColor, Time.unscaledDeltaTime * lightDamping);
                }
                else
                {
                    _light.color = Color.Lerp(_light.color, normalLightColor, Time.unscaledDeltaTime * lightDamping);
                }
            }
        }