Exemplo n.º 1
0
    public virtual void Fire(UBattleUnit startUnit, Vector3 endPosition, float duration, string easeName = null)
    {
        this.BindGameLoop();

        _transStart    = startUnit.GetBoneTransform("missile");
        _startUnit     = startUnit;
        _startUnitId   = startUnit.unitId;
        _startPosition = _transStart.position;
        _startAngle    = _startUnit.curDirectionAngle;

        _transEnd        = null;
        _endUnit         = null;
        _endUnitId       = 0;
        _endPosition     = endPosition;
        _endTeleportFlag = -1;

        _duration  = duration <= 0 ? _duration : duration;
        _startTime = GetMSTime();
        _easeName  = string.IsNullOrEmpty(easeName) ? _easeName : easeName;
        _easeFunc  = EaseFunc.GetFunction(easeName);

        _transform          = this.transform;
        _transform.position = _startPosition;

        _isEnded          = false;
        _delayTimeCounter = _delayTime;

        this.OnEffectStart();
    }
Exemplo n.º 2
0
    public virtual void Fire(GameObject objStart, Vector3 endPosition, float duration, string easeName = null)
    {
        this.BindGameLoop();

        _transStart    = objStart.transform;
        _startUnit     = null;
        _startUnitId   = 0;
        _startPosition = _transStart.position;
        _startAngle    = -1.0f;

        _transEnd        = null;
        _endUnit         = null;
        _endUnitId       = 0;
        _endPosition     = endPosition;
        _endTeleportFlag = -1;

        _duration  = duration <= 0 ? _duration : duration;
        _startTime = GetMSTime();
        _easeName  = string.IsNullOrEmpty(easeName) ? _easeName : easeName;
        _easeFunc  = EaseFunc.GetFunction(easeName);

        _transform          = this.transform;
        _transform.position = _startPosition;

        _isEnded          = false;
        _delayTimeCounter = _delayTime;

        this.OnEffectStart();
    }
Exemplo n.º 3
0
    private void OnParabolaStart()
    {
        if (_maxParabolaHeight == 0)
        {
            _parabolaAutoRotate = false;
            _parabolaOffset     = Vector3.zero;
            return;
        }
        _parabolaEaseFunc = _parabolaEase.hasFunc ? _parabolaEase.func : EaseFunc.GetFunction("EaseOutCubic");
        var endPosition    = GetEndPosition();
        var parabolaHeight = _maxParabolaHeight;
        var distance       = UGameTools.GetPosDistance(_startPosition, endPosition);

        if (endPosition.y > _startPosition.y)
        {
            var normalLineLength = Mathf.Abs((endPosition.x - _startPosition.x) * distance * 0.5f / (endPosition.y - _startPosition.y));
            if (normalLineLength <= _maxParabolaHeight)
            {
                parabolaHeight = normalLineLength * 0.5f;
            }
        }
        var heightLimit = distance * _parabolaLimitFactor;

        parabolaHeight = parabolaHeight > heightLimit ? heightLimit : parabolaHeight;
        if (endPosition.x - _startPosition.x > 0)
        {
            _parabolaOffset.x = (endPosition.y - _startPosition.y) * parabolaHeight * -1 / distance;
            _parabolaOffset.y = (endPosition.x - _startPosition.x) * parabolaHeight / distance;
        }
        else
        {
            _parabolaOffset.x = (endPosition.y - _startPosition.y) * parabolaHeight / distance;
            _parabolaOffset.y = (endPosition.x - _startPosition.x) * parabolaHeight * -1 / distance;
        }

        if (_parabolaAutoRotate)
        {
            var nextPosition = GetPosition(0.03f, EaseValue(0.03f), _startPosition, endPosition);
            _transform.localEulerAngles = new Vector3(0, 0, UGameTools.GetPosAngle(_startPosition, nextPosition));
        }
    }