Beispiel #1
0
        public override void AI()
        {
            Projectile.frame++;
            Projectile.rotation = 0.02f * Projectile.velocity.X;
            if (Main.rand.Next(3) == 0)
            {
                AddDust();
            }

            if (target != default && !target.active)
            {
                target = default;
            }
            if (target == default)
            {
                ModProjectileExtensions.ClientSideNPCHitCheck(this);
            }
            if (target != default)
            {
                int     inertia      = 30;
                float   speed        = 12;
                Vector2 targetOffset = target.Center - Projectile.Center;
                targetOffset.SafeNormalize();
                targetOffset       *= speed;
                Projectile.velocity = (Projectile.velocity * (inertia - 1) + targetOffset) / inertia;
            }
        }
        public override void AI()
        {
            base.AI();
            int frame = TimeToLive - Projectile.timeLeft;

            Projectile.frame = (frame / 5) % 5;
            if (target != default && !target.active)
            {
                target = default;
            }
            if (circleStartFrame != default && circleStartFrame - Projectile.timeLeft < CircleDuration)
            {
                int   currentFrame = circleStartFrame - Projectile.timeLeft;
                float rotationSign = Math.Sign(currentFrame - CircleDuration / 2);
                currentVelocity        = currentVelocity.RotatedBy(rotationSign * 2 * MathHelper.TwoPi / CircleDuration);
                Projectile.velocity    = (target?.velocity ?? default) + currentVelocity;
                Projectile.tileCollide = false;
            }
            else if (circleStartFrame != default)
            {
                Projectile.Kill();
            }
            Projectile.rotation = Projectile.velocity.ToRotation();
            ModProjectileExtensions.ClientSideNPCHitCheck(this);
        }