Example #1
0
    protected void AutoRotate(bool useCurrentPosition = false)
    {
        if (!_autoRotate)
        {
            _endAngle = _startAngle;
            return;
        }
        var startPos = useCurrentPosition ? _transform.position : _startPosition;
        var angle    = UGameTools.GetPosAngle(_startPosition, GetEndPosition());

        if (_startAngle < 0)
        {
            _transform.localEulerAngles = new Vector3(0, 0, angle);
            _endAngle = _startAngle;
        }
        else
        {
            _transform.localEulerAngles = new Vector3(0, 0, _startAngle);
            _endAngle = angle;
            if (_endAngle - _startAngle > 180.0f)
            {
                _endAngle -= 360.0f;
            }
            else if (_startAngle - _endAngle > 180.0f)
            {
                _endAngle += 360.0f;
            }
        }
    }
Example #2
0
    public void Fire(int index, UBattleUnit uUnit, string eventName)
    {
        _uTowerBase?.Fire(index);

        if (_autoRotateSpineList.Count == 0)
        {
            FireUnitEvent(eventName);
            return;
        }
        var startPos = GetBonePosition("center");
        var endPos   = uUnit.GetBonePosition("body");
        var angle    = UGameTools.GetPosAngle(startPos, endPos);

        for (int i = 0; i < _autoRotateSpineList.Count; i++)
        {
            var spine = _autoRotateSpineList[i];
            spine.UpdateDirectionByAngle(angle);
            if (i == 0)
            {
                _curDirectionAngle = spine.GetCurDirectionAngle();
                if (_boneMissile != null)
                {
                    _boneMissile.position = spine.GetBulletWorldPosition();
                }
            }
        }
        FireUnitEvent(eventName);
    }
Example #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));
        }
    }
Example #4
0
    public override void LoopUpdate(int msDelta, int msTime, float sDelta, float sTime)
    {
        if (_delayTimeCounter > 0)
        {
            _delayTimeCounter -= msDelta;
            if (_delayTimeCounter > 0)
            {
                return;
            }
            _startPosition = _transStart != null ? _transStart.position : _startPosition;
            OnEffectStart();
        }

        if (_isEnded || _stayStartTime != 0)
        {
            return;
        }
        var flyTime = msTime - _startTime - _stayTime;

        if (flyTime <= 0)
        {
            return;
        }
        if (_endUnit != null && _endUnit.unitId != _endUnitId)
        {
            OnEffectEnd(false);
            return;
        }
        var endPosition = GetEndPosition();

        if (flyTime >= _duration)
        {
            _transform.position = endPosition;
            OnEffectEnd(true);
            return;
        }

        var time         = flyTime / _duration;
        var percent      = EaseValue(time);
        var lastPosition = _transform.position;

        _transform.position = GetPosition(time, percent, _startPosition, endPosition);

        if (_parabolaAutoRotate)
        {
            if (time > 0)
            {
                _transform.localEulerAngles = new Vector3(0, 0, UGameTools.GetPosAngle(lastPosition, _transform.position));
            }
        }
        else
        {
            if (_startAngle != _endAngle)
            {
                _transform.localEulerAngles = new Vector3(0, 0, _startAngle + (_endAngle - _startAngle) * percent);
            }
            else if (_endTeleportFlag != -1 && _endUnit.teleportFlag != _endTeleportFlag)
            {
                _endTeleportFlag = _endUnit.teleportFlag;
                AutoRotate(true);
            }
        }
    }
Example #5
0
 protected void RefreshScale()
 {
     _localScale.x         = UGameTools.GetPosDistance(_startPosition, GetEndPosition()) / _originLength;
     _transform.localScale = _localScale;
 }