Пример #1
0
    public static void ShowQuickTips(string message, Color color)
    {
        if (_kNewTipsQueue.Count < 10 && !string.IsNullOrEmpty(message))
        {
            TipsElement element = new TipsElement();
            element.InitData(_template);
            element.TextContent.text = "请选择要";
            int minHeight = (int)element.TextContent.preferredHeight;
            element.TextContent.text  = message;
            element.TextContent.color = color;
            float txtWidth = element.TextContent.preferredWidth;
            int   lines    = (int)element.TextContent.preferredHeight / minHeight;
            if (txtWidth > 580)
            {
                txtWidth = 600;
            }
            else
            {
                txtWidth += 20;
            }
            element._lifeTime = 2.5f;
            element._txtLines = lines;

            element.ImgBackGround.GetComponent <RectTransform>().sizeDelta = new Vector2(txtWidth, _lineHeight * lines);
            element.TextContent.GetComponent <RectTransform>().sizeDelta   = new Vector2(txtWidth - 18, _lineHeight * lines);
            element.Alpha = 0.0f;
            element.TextContent.enabled = true;
            _kNewTipsQueue.Enqueue(element);
        }
        else
        {
            return;
        }
    }
Пример #2
0
    private static void PopTips(float dt)
    {
        _fTimeSinceLastPop += dt;
        if (_kTipsQueue.Count > 0)
        {
            float factor = 1;
            _fDelayTime    = _fDefautDelayTime * factor;
            _fPopNextDelay = _fDefautPopNextDelay * factor;
            _fFlyTime      = _fDefautFlyTime * factor;
        }
        for (int i = 0; i < 3; i++)
        {
            if (_elements[i] != null)
            {
                _elements[i]._lifeTime -= 0.03f;
                if (_elements[i]._lifeTime <= 0)
                {
                    GameObject.DestroyImmediate(_elements[i].GetTarget());
                    _elements[i] = null;
                }
            }
        }
        if (_kNewTipsQueue.Count > 0)
        {
            if (_grid.transform.childCount > 0)
            {
                if (_speedTime >= 1.0f)
                {
                    for (int k = 0; k < 3; k++)
                    {
                        if (_elements[k] == null)
                        {
                            _elements[k] = _kNewTipsQueue.Dequeue() as TipsElement;
                            _elements[k].GetTarget().transform.parent = _grid.transform;
                            _elements[k].SetAlpha(1.0f);
                            _elements[k].GetTarget().transform.GetChild(0).gameObject.SetActive(true);
                            _elements[k].GetTarget().SetActive(true);
                            if (_elements[k]._txtLines > 1)
                            {
                                RectTransform tran = _elements[k].GetTargetTrans();
                                tran.localPosition = new Vector3(tran.localPosition.x, tran.localPosition.y - (_elements[k]._txtLines - 1) * _lineHeight / 2, tran.localPosition.z);
                            }
                            else
                            {
                                _elements[k].GetTargetTrans().localPosition = new Vector3(0, 0, 0);
                            }
                            _speed = _elements[k]._txtLines * _lineHeight * 0.03f;
                            _elements[k]._moveDistance = _elements[k]._txtLines * _lineHeight;
                            _moveDistance = _elements[k]._txtLines * _lineHeight;
                            _speedTime    = 0;
                            break;
                        }
                    }
                }
            }
            else
            {
                _elements[0] = _kNewTipsQueue.Dequeue() as TipsElement;
                //_elements[0].GetTarget().transform.parent = _grid.transform;
                _elements[0].GetTarget().transform.SetParent(_grid.transform);
                _elements[0].SetAlpha(1.0f);
                _elements[0].GetTarget().transform.GetChild(0).gameObject.SetActive(true);
                _elements[0].GetTarget().SetActive(true);

                if (_elements[0]._txtLines > 1)
                {
                    RectTransform tran = _elements[0].GetTargetTrans();
                    tran.localPosition = new Vector3(tran.localPosition.x, tran.localPosition.y - (_elements[0]._txtLines - 1) * _lineHeight / 2, tran.localPosition.z);
                }
                else
                {
                    _elements[0].GetTargetTrans().localPosition = new Vector3(0, 0, 0);
                }
                _speed = _elements[0]._txtLines * _lineHeight * 0.03f;
                _elements[0]._moveDistance = _elements[0]._txtLines * _lineHeight;
                _moveDistance = _elements[0]._txtLines * _lineHeight;
                _speedTime    = 0;
            }
        }
        if (_speedTime < 1.0f && _grid.transform.childCount > 0)
        {
            _speedTime += dt;
            for (int j = 0; j < _grid.transform.childCount; j++)
            {
                Transform child = _grid.transform.GetChild(j);
                child.localPosition = new Vector3(child.localPosition.x, child.localPosition.y + _speed, child.localPosition.z);
            }
            _haveMove += _speed;
            if (_haveMove >= _moveDistance || _speedTime >= 1.0f)
            {
                if (_haveMove < _moveDistance)
                {
                    for (int j = 0; j < _grid.transform.childCount; j++)
                    {
                        Transform child = _grid.transform.GetChild(j);
                        child.localPosition = new Vector3(child.localPosition.x, child.localPosition.y + (_moveDistance - _haveMove), child.localPosition.z);
                    }
                }
                _haveMove  = 0;
                _speedTime = 1.0f;
            }
        }


        if (_fTimeSinceLastPop > (_fDelayTime + _fPopNextDelay) && _kNewTipsQueue.Count > 0 && !_isShow)
        {
            _isShow            = true;
            _fTimeSinceLastPop = 0.0f;
            TipsElementInterface element = _kNewTipsQueue.Dequeue() as TipsElementInterface;
            element.GetTargetTrans().SetAsLastSibling();
            float elementLastTime = 0.0f;
            float alphaChangeRate = 1.0f / _fFlyTime;

            Updater.ON_UPDATE elementUpdate = delegate(float delta)
            {
                elementLastTime += delta;
            };

            TweenCallback onComplete = delegate()
            {
                element.GetTarget().SetActive(false);
                element.GetTargetTrans().anchoredPosition = _vect3[0];
                _kUpdater.onUpdate -= elementUpdate;
                if (element as TipsElement != null)
                {
                    _tipsPool.ReturnObject(element as TipsElement);
                }
                _isShow = false;
            };

            GameConst.driver.StartCoroutine(func(delegate()
            {
                TipsElement tempElement = element as TipsElement;
                element.SetAlpha(1.0f);
                element.GetTarget().transform.GetChild(0).gameObject.SetActive(true);
                element.GetTarget().SetActive(true);
                Tween tween = element.GetTargetTrans().DOLocalMove(tempElement.EndPos, _fFlyTime);
                tween.SetUpdate(true);
                tween.OnComplete(onComplete);
                _kUpdater.onUpdate += elementUpdate;
            }, _fDelayTime / (float)1000));
        }
    }