示例#1
0
        /// <summary>
        /// This function is called for the boss to move towards the player
        /// </summary>
        void MoveTheBoss()
        {
            if (!attackTarget)
            {
                return;
            }

            // Turn the boss to look at the player
            Quaternion rotateToPlayer = Quaternion.LookRotation(vToPlayer, Vector3.up);

            // Get local Euler angles before rotation
            Vector3    euler1      = transform.localEulerAngles;
            Quaternion previousRot = transform.rotation;

            // Do rotation
            transform.rotation = rotateToPlayer;

            // Get new local euler angles
            float eulerY = transform.localEulerAngles.y;
            float eulerZ = transform.localEulerAngles.z;

            // Revert the rotation
            transform.rotation = previousRot;

            // Ease the rotation to the target.
            transform.localRotation = AnimMath.Slide(transform.localRotation, Quaternion.Euler(0, eulerY, eulerZ), .3f);

            // Move in the direction of the player
            pawn.SimpleMove(vToPlayer * moveSpeed);
        }
示例#2
0
        void LateUpdate()
        {
            Vector2 pos       = new Vector2(transform.position.x, transform.position.y);
            Vector2 targetPos = new Vector2(target.position.x, target.position.y);

            pos = AnimMath.Slide(pos, target.position, .01f);
        }
示例#3
0
        /// <summary>
        /// This function is called when the boss takes damage from the player
        /// </summary>
        void Stunned()
        {
            Quaternion startingNeckRot     = neckBone.transform.localRotation;
            Quaternion startingLeftArmRot  = shoulderLeft.transform.localRotation;
            Quaternion startingRightArmRot = shoulderRight.transform.localRotation;

            Quaternion targetNeckRot     = startingNeckRot * Quaternion.Euler(50, 0, 0);
            Quaternion targetLeftArmRot  = startingLeftArmRot * Quaternion.Euler(0, 0, 40);
            Quaternion targetRightArmRot = startingRightArmRot * Quaternion.Euler(0, 0, 40);

            neckBone.transform.localRotation      = AnimMath.Slide(startingNeckRot, targetNeckRot, .003f);
            shoulderLeft.transform.localRotation  = AnimMath.Slide(startingLeftArmRot, targetLeftArmRot, .001f);
            shoulderRight.transform.localRotation = AnimMath.Slide(startingRightArmRot, targetRightArmRot, .001f);
        }
示例#4
0
        /// <summary>
        /// This function is called when the boss is able to do it's third attack
        /// </summary>
        void DoAttack3()
        {
            Projectile projectile;
            Quaternion startingNeckRot = neckBone.transform.localRotation;

            attack3Timer += Time.deltaTime;

            if (attack3Timer >= .75f)
            {
                projectile = Instantiate(prefabProjectile, neckBone.transform.position, neckBone.rotation);
            }
            Quaternion targetNeckRot = startingNeckRot * Quaternion.Euler(60, 0, 0);

            transform.localRotation = AnimMath.Slide(startingNeckRot, targetNeckRot, .005f);
        }
示例#5
0
        void Update()
        {
            float   posY      = transform.position.y;
            Vector2 pos       = new Vector2(transform.position.x, transform.position.y);
            Vector2 targetPos = new Vector2(target.position.x, target.position.y);

            if (target.transform.position.y >= 3.5)
            {
                transform.position = AnimMath.Slide(transform.position, target.position, .008f);
            }
            else
            {
                transform.position += scrollSpeed * Time.deltaTime;
            }
        }
示例#6
0
        /// <summary>
        /// This function is called when the boss is able to do it's first attack
        /// </summary>
        void DoAttack1()
        {
            Quaternion startingLeftArmRot = shoulderLeft.transform.localRotation;
            Quaternion targetLeftArmRot   = startingLeftArmRot * Quaternion.Euler(50, 0, 10);

            attackTimer += Time.deltaTime;

            if (attackTimer <= .5f)
            {
                shoulderLeft.transform.localRotation = AnimMath.Slide(startingLeftArmRot, targetLeftArmRot, .01f);
            }
            if (attackTimer >= .51f)
            {
                shoulderLeft.transform.localRotation = AnimMath.Slide(shoulderLeft.transform.localRotation, Quaternion.identity, .01f);
            }
        }
示例#7
0
        void SwingSword()
        {
            Quaternion startingRot = sword.transform.rotation;
            Quaternion targetRot   = sword.transform.rotation * Quaternion.Euler(0, -60, 0);

            swingSeconds += Time.deltaTime;

            if (swingSeconds >= .25f)
            {
                targetRot = sword.transform.rotation * Quaternion.Euler(0, 60, 0);
            }

            sword.transform.rotation = AnimMath.Slide(startingRot, targetRot, .0001f);

            damageCooldown = 3;
        }
示例#8
0
        /// <summary>
        /// This function is called when the boss is able to do it's second attack
        /// </summary>
        void DoAttack2()
        {
            Quaternion startingRot     = transform.localRotation;
            Quaternion startingTailRot = tailBone.transform.localRotation;

            Quaternion targetTorsoRot = startingRot * Quaternion.Euler(0, 180, 0);
            Quaternion targetTailRot  = startingTailRot * Quaternion.Euler(0, 45, 0);

            attack2Timer += Time.deltaTime;

            if (attack2Timer >= .25f)
            {
                targetTailRot = startingTailRot * Quaternion.Euler(0, -90, 0);
            }
            if (attack2Timer > .5f)
            {
                targetTorsoRot = Quaternion.identity;
            }

            transform.localRotation          = AnimMath.Slide(startingRot, targetTorsoRot, .001f);
            tailBone.transform.localRotation = AnimMath.Slide(startingTailRot, targetTailRot, .001f);
        }
示例#9
0
        /// <summary>
        /// This function eases to a target with two floats.
        /// </summary>
        /// <param name="current"></param>
        /// <param name="target"></param>
        /// <param name="percentLeftAfter1Second"></param>
        /// <returns></returns>
        public static float Slide(float current, float target, float percentLeftAfter1Second)
        {
            float p = 1 - Mathf.Pow(percentLeftAfter1Second, Time.deltaTime);

            return(AnimMath.Lerp(current, target, p));
        }
示例#10
0
        /// <summary>
        /// This function eases between two quaternions.
        /// </summary>
        /// <param name="current"></param>
        /// <param name="target"></param>
        /// <param name="percentLeftAfter1Second"></param>
        /// <returns></returns>
        public static Quaternion Slide(Quaternion current, Quaternion target, float percentLeftAfter1Second = .05f)
        {
            float p = 1 - Mathf.Pow(percentLeftAfter1Second, Time.deltaTime);

            return(AnimMath.Lerp(current, target, p));
        }