/// <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); }
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); }
/// <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); }
/// <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); }
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; } }
/// <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); } }
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; }
/// <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); }