Esempio n. 1
0
        private void UpdateRotation()
        {
            var newDirection   = GetRotationVector();
            var targetRotation = RotationUtils.DirectionVectorToRotationQuaternion2D(newDirection);
            var newRotation    = Quaternion.RotateTowards(transform.rotation, targetRotation, MaxRotationSpeed * Time.deltaTime);

            transform.rotation = newRotation;
        }
Esempio n. 2
0
        private void UpdateRotation(Vector2 movementDirection)
        {
            Vector2 newDirection = _isAiming ? GetRotationVector() : movementDirection;

            var targetRotation = RotationUtils.DirectionVectorToRotationQuaternion2D(newDirection);
            var newRotation    = Quaternion.RotateTowards(transform.rotation, targetRotation, MaxRotationSpeed * Time.deltaTime);

            transform.rotation = newRotation;
        }
Esempio n. 3
0
        protected override void CreateSingleProjectile(Vector3 direction)
        {
            var weaponRotation = RotationUtils.DirectionVectorToRotationQuaternion2D(direction);
            var angle          = UnityEngine.Random.Range(-ScatterAngle, ScatterAngle);
            var euler          = weaponRotation.eulerAngles;
            var newRotation    = Quaternion.Euler(euler.x, euler.y, euler.z + angle);
            var newDirection   = newRotation * Vector3.up;

            base.CreateSingleProjectile(newDirection);
        }
Esempio n. 4
0
        public void Init(Vector2 direction, Collider2D parentCollider, int damage, float projectileSpeed, float throwbackPower)
        {
            _rigidbody = GetComponent <Rigidbody2D>();

            _direction      = direction;
            _damage         = damage;
            _throwbackPower = throwbackPower;

            transform.rotation = RotationUtils.DirectionVectorToRotationQuaternion2D(direction);

            _rigidbody.AddForce(direction * projectileSpeed);
            _prevPosition = transform.position;
            _initialized  = true;

            var col = GetComponent <Collider2D>();

            Physics2D.IgnoreCollision(col, parentCollider, true);
        }
Esempio n. 5
0
        void Update()
        {
            var distance = (transform.position - Target.position).magnitude;

            if (distance < MaxDetectionRange)
            {
                var direction        = Target.position - transform.position;
                var expectedRotation = RotationUtils.DirectionVectorToRotationQuaternion2D(direction.normalized);
                var newRotation      = Quaternion.RotateTowards(transform.rotation, expectedRotation, RotationRate * Time.deltaTime);
                transform.rotation = newRotation;

                if (distance < StopFollowDistance)
                {
                    return;
                }

                var hit = Physics2D.Linecast(transform.position, Target.position, 1 << LayerMask.NameToLayer("Obstacle"));
                if (hit.collider == null)
                {
                    transform.position = Vector2.MoveTowards(transform.position, Target.position, MovementSpeed * Time.deltaTime);
                }
            }
        }