// Use this for initialization void Start() { rigidbody = transform.GetComponent <Rigidbody>(); boxCollider = transform.GetComponent <BoxCollider>(); timeSinceStateChanged = 0.0f; bossPos = bossArcherPos.MEDIUMRIGHT; bossState = bossArcherIA.IDLE; timeSinceStateChanged = 0.0f; timeJumping = 0.0f; arrows = new Transform[arrowPool.childCount]; for (int i = 0; i < arrowPool.childCount; ++i) { arrows[i] = arrowPool.GetChild(i); } arrowsScript = new BossArrowScript[arrowPool.childCount]; for (int i = 0; i < arrows.Length; ++i) { arrowsScript[i] = arrows[i].GetComponent <BossArrowScript>(); } animator = transform.GetComponent <Animator>(); firstStopPoint = true; slowFPS.SlowFPSChangedStatusEvent += SlowFPSStateChanged; timeWhenLastHitted = Time.time; playerScript.PlayerDeadEvent += GlitchDead; playerScript.PlayerReviveEvent += GlitchRevives; upArrow.gameObject.SetActive(false); heart1 = HUDLives.FindChild("Heart1").GetComponent <Image>(); heart2 = HUDLives.FindChild("Heart2").GetComponent <Image>(); heart3 = HUDLives.FindChild("Heart3").GetComponent <Image>(); heart4 = HUDLives.FindChild("Heart4").GetComponent <Image>(); heart5 = HUDLives.FindChild("Heart5").GetComponent <Image>(); //transform.FindChild("GlitchCollider").GetComponent<GlitchArcher>().BossGlitchedEvent += GlitchArcher; endBoss.BossGlitchEvent += GlitchArcher; }
public void EndTurning() { if (bossState == bossArcherIA.TURNING_LEFT_TO_RUN) { transform.localEulerAngles = new Vector3(0f, 90f, 0f); bossState = bossArcherIA.MOVING; } else if (bossState == bossArcherIA.TURNING_RIGHT_TO_RUN) { transform.localEulerAngles = new Vector3(0f, 270f, 0f); bossState = bossArcherIA.MOVING; } else if (bossState == bossArcherIA.TURNING_LEFT_TO_STOP) { transform.localEulerAngles = new Vector3(0f, 180f, 0f); bossState = bossArcherIA.PRESHOOT; } else if (bossState == bossArcherIA.TURNING_RIGHT_TO_STOP) { transform.localEulerAngles = new Vector3(0f, 180f, 0f); bossState = bossArcherIA.PRESHOOT; } animator.speed = 1; }
public void ShootArrows() { upArrow.gameObject.SetActive(false); upArrow.canMove = false; if (bossState != bossArcherIA.DEAD) { bossState = bossArcherIA.POSTSHOOT; } timeSinceStateChanged = 0.0f; animator.speed = 1f; int random; if (lives == 5) { PrepareArrows(shootTypes.FIVE_NEAR_GLITCH); } else if (lives == 4) { random = Random.Range(1, 3); switch (random) { case 1: PrepareArrows(shootTypes.NINE_NEAR_GLITCH); break; case 2: PrepareArrows(shootTypes.NEW_SHOOT_TYPE_BIG); break; } } else if (lives == 3) { random = Random.Range(1, 5); switch (random) { case 1: PrepareArrows(shootTypes.ELEVEN_NEAR_GLITCH); break; case 2: PrepareArrows(shootTypes.NEW_SHOOT_TYPE_NORMAL); break; case 3: PrepareArrows(shootTypes.LEFT_TO_RIGHT); break; case 4: PrepareArrows(shootTypes.RIGHT_TO_LEFT); break; } } else if (lives == 2) { random = Random.Range(1, 5); switch (random) { case 1: PrepareArrows(shootTypes.NEW_SHOOT_TYPE_SMALL); break; case 2: PrepareArrows(shootTypes.LEFT_TO_RIGHT); break; case 3: PrepareArrows(shootTypes.RIGHT_TO_LEFT); break; case 4: PrepareArrows(shootTypes.ULTRA_DIFFICULT_ULTRA); break; } } else if (lives <= 1) { random = Random.Range(1, 6); switch (random) { case 1: PrepareArrows(shootTypes.NEW_SHOOT_TYPE_SMALL); break; case 2: PrepareArrows(shootTypes.LEFT_TO_RIGHT); break; case 3: PrepareArrows(shootTypes.RIGHT_TO_LEFT); break; case 4: PrepareArrows(shootTypes.ELEVEN_NEAR_GLITCH); break; case 5: PrepareArrows(shootTypes.ULTRA_DIFFICULT_ULTRA); break; } } shootInThisPlatform = true; StartCoroutine("CO_ShootArrows"); }
public void InsultingAnimationEnded() { if (lives == 2) { currentSpecialSpeed = 2f; } else if (lives == 1) { currentSpecialSpeed = 3f; } camera.ZoomArcherOut(); holesActives = false; int random; switch (bossPos) { case bossArcherPos.MAXLEFT: movingRight = true; break; case bossArcherPos.MEDIUMLEFT: random = Random.Range(1, 3); if (random == 1) { movingRight = true; } else { movingRight = false; } break; case bossArcherPos.MEDIUMRIGHT: random = Random.Range(1, 3); if (random == 1) { movingRight = true; } else { movingRight = false; } break; case bossArcherPos.MAXRIGHT: movingRight = false; break; } if (!shootInThisPlatform) { bossState = bossArcherIA.PRESHOOT; } else if (movingRight) { bossState = bossArcherIA.TURNING_LEFT_TO_RUN; animator.SetBool("Run", true); animator.speed = currentSpecialSpeed; animator.SetTrigger("TurnLeft"); } else { bossState = bossArcherIA.TURNING_RIGHT_TO_RUN; animator.SetBool("Run", true); animator.speed = currentSpecialSpeed; animator.SetTrigger("TurnRight"); } timeSinceStateChanged = 0.0f; }
public void OnCollisionEnter(Collision coll) { if (bossState == bossArcherIA.DEAD && !coll.collider.CompareTag("BossHit") && Time.time - timeWhenLastHitted >= 1f) { animator.speed = 1f; animator.SetTrigger("GroundHitted"); } else if (coll.collider.CompareTag("BossHit") && Time.time - timeWhenLastHitted >= 2f && bossState != bossArcherIA.DEAD) { SoundManager.instance.PlaySingle(hit); timeWhenLastHitted = Time.time; transform.localEulerAngles = new Vector3(0f, 180f, 0f); animator.speed = 1f; --lives; if (lives == 0) { heart1.sprite = heartEmpty; SoundManager.instance.PlaySingle(scream); animator.SetTrigger("LastHitted"); camera.ZoomOut(); glitchDebris.ArcherDead(); bossState = bossArcherIA.DEAD; glitchDialogue.SetActive(true); glitchCollider.SetActive(true); shake.enabled = false; if (BossDeadEvent != null) { BossDeadEvent(); } } else if (lives == 1) { heart2.sprite = heartEmpty; holesActives = true; camera.ZoomArcherIn(); timeInPreShoot = 0f; timeInPostShoot = 0f; animator.SetTrigger("Hitted"); bossState = bossArcherIA.HITTED; } else if (lives == 2) { heart3.sprite = heartEmpty; holesActives = true; camera.ZoomArcherIn(); animator.SetTrigger("Hitted"); bossState = bossArcherIA.HITTED; } else if (lives == 3) { shake.enabled = true; heart4.sprite = heartEmpty; holesActives = true; camera.ZoomArcherIn(); timeInPreShoot = 1f; timeInPostShoot = 1f; glitchDebris.Fall(); animator.SetTrigger("Hitted"); bossState = bossArcherIA.HITTED; } else if (lives == 4) { heart5.sprite = heartEmpty; holesActives = true; camera.ZoomArcherIn(); animator.SetTrigger("Hitted"); bossState = bossArcherIA.HITTED; } } }
public void OnTriggerEnter(Collider coll) { if (coll.transform.name == "JumpPoint" && bossState == bossArcherIA.MOVING && bossState != bossArcherIA.DEAD) { currentStartJumpPoint = transform.position; timeJumping = 0.0f; SoundManager.instance.PlaySingle(jumpSound); int random; random = Random.Range(1, 3); if (bossPos == bossArcherPos.MAXRIGHT) { if (random == 1) { bossPos = bossArcherPos.MEDIUMRIGHT; currentEndJumpPoint = EndJumpPoint[4].position + new Vector3(-1f, -1f, 0f); currentMiddleJumpPoint = MiddleJumpPoint[4].position; } else { bossPos = bossArcherPos.MEDIUMLEFT; currentEndJumpPoint = EndJumpPoint[2].position + new Vector3(-1f, -1f, 0f); currentMiddleJumpPoint = MiddleJumpPoint[3].position; } } else if (bossPos == bossArcherPos.MAXLEFT) { if (random == 1) { bossPos = bossArcherPos.MEDIUMLEFT; currentEndJumpPoint = EndJumpPoint[1].position + new Vector3(+1f, -1f, 0f); currentMiddleJumpPoint = MiddleJumpPoint[0].position; } else { bossPos = bossArcherPos.MEDIUMRIGHT; currentEndJumpPoint = EndJumpPoint[3].position + new Vector3(1f, -1f, 0f); currentMiddleJumpPoint = MiddleJumpPoint[1].position; } } else if (bossPos == bossArcherPos.MEDIUMLEFT && movingRight) { if (random == 1) { bossPos = bossArcherPos.MEDIUMRIGHT; currentEndJumpPoint = EndJumpPoint[3].position + new Vector3(1f, -1f, 0f); currentMiddleJumpPoint = MiddleJumpPoint[2].position; } else { bossPos = bossArcherPos.MAXRIGHT; currentEndJumpPoint = EndJumpPoint[5].position + new Vector3(1f, -1f, 0f); currentMiddleJumpPoint = MiddleJumpPoint[3].position; } } else if (bossPos == bossArcherPos.MEDIUMLEFT && !movingRight) { bossPos = bossArcherPos.MAXLEFT; currentEndJumpPoint = EndJumpPoint[0].position + new Vector3(-1f, -1f, 0f); currentMiddleJumpPoint = MiddleJumpPoint[0].position; } else if (bossPos == bossArcherPos.MEDIUMRIGHT && movingRight) { bossPos = bossArcherPos.MAXRIGHT; currentEndJumpPoint = EndJumpPoint[5].position + new Vector3(1f, -1f, 0f); currentMiddleJumpPoint = MiddleJumpPoint[4].position; } else if (bossPos == bossArcherPos.MEDIUMRIGHT && !movingRight) { if (random == 1) { bossPos = bossArcherPos.MEDIUMLEFT; currentEndJumpPoint = EndJumpPoint[2].position + new Vector3(-1f, -1f, 0f); currentMiddleJumpPoint = MiddleJumpPoint[2].position; } else { bossPos = bossArcherPos.MAXLEFT; currentEndJumpPoint = EndJumpPoint[0].position + new Vector3(-1f, -1f, 0f); currentMiddleJumpPoint = MiddleJumpPoint[1].position; } } else { Debug.Log("HEHE; ERROR"); } bossState = bossArcherIA.JUMPING; fallingJump = false; animator.SetTrigger("Jump"); } else if (coll.transform.name == "StopPoint" && firstStopPoint && bossState != bossArcherIA.DEAD && !shootInThisPlatform) { firstStopPoint = false; } else if (coll.transform.name == "StopPoint" && !firstStopPoint && bossState != bossArcherIA.DEAD && !shootInThisPlatform) { if (bossPos == bossArcherPos.MEDIUMLEFT || bossPos == bossArcherPos.MEDIUMRIGHT) { transform.position = new Vector3(transform.position.x, transform.position.y, 17.5f - 5.34f); } if (movingRight) { bossState = bossArcherIA.TURNING_RIGHT_TO_STOP; animator.speed = currentSpecialSpeed; animator.SetTrigger("TurnRight"); } else { bossState = bossArcherIA.TURNING_LEFT_TO_STOP; animator.speed = currentSpecialSpeed; animator.SetTrigger("TurnLeft"); } animator.SetBool("Run", false); } }
// Update is called once per frame void Update() { if (slowFPSactivated && (bossState == bossArcherIA.JUMPING || bossState == bossArcherIA.FALLING_JUMP)) { animator.speed = 0.5f; } else if (slowFPSactivated) { animator.speed = currentSpecialSpeed * 0.5f; } else if (bossState == bossArcherIA.JUMPING || bossState == bossArcherIA.FALLING_JUMP) { animator.speed = 1f; } else { animator.speed = currentSpecialSpeed; } if (world.doUpdate) { if (!fallingDead) { rigidbody.velocity = Vector3.zero; } switch (bossState) { case bossArcherIA.MOVING: transform.Translate(Vector3.forward * world.lag * horizontalVelocity); break; case bossArcherIA.FALLING_JUMP: if (fallingJump) { bossState = bossArcherIA.MOVING; } break; case bossArcherIA.JUMPING: float perc; timeJumping += world.lag; perc = timeJumping / timeToJump; perc = perc * perc * (3f - 2f * perc); Vector3 firstLerpPoint = Vector3.Lerp(currentStartJumpPoint, currentMiddleJumpPoint, perc); Vector3 secondLerpPoint = Vector3.Lerp(currentMiddleJumpPoint, currentEndJumpPoint, perc); Vector3 currentPosition = Vector3.Lerp(firstLerpPoint, secondLerpPoint, perc); transform.position = currentPosition; if (IsGrounded() && perc >= 0.5f) { shootInThisPlatform = false; bossState = bossArcherIA.FALLING_JUMP; } break; case bossArcherIA.PRESHOOT: if (canShoot) { timeSinceStateChanged += world.lag; if (timeSinceStateChanged >= timeInPreShoot) { bossState = bossArcherIA.SHOOTING; animator.speed = currentSpecialSpeed; animator.SetTrigger("Attack"); } } else { timeSinceStateChanged = 0.0f; } break; case bossArcherIA.SHOOTING: break; case bossArcherIA.POSTSHOOT: timeSinceStateChanged += world.lag; if (timeSinceStateChanged >= timeInPostShoot) { int random; switch (bossPos) { case bossArcherPos.MAXLEFT: movingRight = true; break; case bossArcherPos.MEDIUMLEFT: random = Random.Range(1, 3); if (random == 1) { movingRight = true; } else { movingRight = false; } break; case bossArcherPos.MEDIUMRIGHT: random = Random.Range(1, 3); if (random == 1) { movingRight = true; } else { movingRight = false; } break; case bossArcherPos.MAXRIGHT: movingRight = false; break; } if (movingRight) { bossState = bossArcherIA.TURNING_LEFT_TO_RUN; animator.SetBool("Run", true); animator.speed = currentSpecialSpeed; animator.SetTrigger("TurnLeft"); } else { bossState = bossArcherIA.TURNING_RIGHT_TO_RUN; animator.SetBool("Run", true); animator.speed = currentSpecialSpeed; animator.SetTrigger("TurnRight"); } } break; case bossArcherIA.TURNING_LEFT_TO_RUN: case bossArcherIA.TURNING_RIGHT_TO_RUN: case bossArcherIA.TURNING_LEFT_TO_STOP: case bossArcherIA.TURNING_RIGHT_TO_STOP: case bossArcherIA.HITTED: break; case bossArcherIA.IDLE: if (start) { bossState = bossArcherIA.PRESHOOT; start = false; } break; case bossArcherIA.DEAD: if (fallingDead) { timeFalling += world.lag; float percentage = timeFalling / timeToMoveZWhileFall; if (percentage >= 1.0f) { percentage = 1.0f; } float xPos = Mathf.Lerp(startXPosWhenDead, endXPosWhenDead, percentage); float zPos = Mathf.Lerp(startZPosWhenDead, endZPosWhenDead, percentage); transform.position = new Vector3(xPos, transform.position.y, zPos); } break; } } }
public void ShootArrows() { upArrow.gameObject.SetActive(false); upArrow.canMove = false; if(bossState != bossArcherIA.DEAD) bossState = bossArcherIA.POSTSHOOT; timeSinceStateChanged = 0.0f; animator.speed = 1f; int random; if (lives == 5) { PrepareArrows(shootTypes.FIVE_NEAR_GLITCH); } else if (lives == 4) { random = Random.Range(1, 3); switch (random) { case 1: PrepareArrows(shootTypes.NINE_NEAR_GLITCH); break; case 2: PrepareArrows(shootTypes.NEW_SHOOT_TYPE_BIG); break; } } else if (lives == 3) { random = Random.Range(1, 5); switch (random) { case 1: PrepareArrows(shootTypes.ELEVEN_NEAR_GLITCH); break; case 2: PrepareArrows(shootTypes.NEW_SHOOT_TYPE_NORMAL); break; case 3: PrepareArrows(shootTypes.LEFT_TO_RIGHT); break; case 4: PrepareArrows(shootTypes.RIGHT_TO_LEFT); break; } } else if (lives == 2) { random = Random.Range(1, 5); switch (random) { case 1: PrepareArrows(shootTypes.NEW_SHOOT_TYPE_SMALL); break; case 2: PrepareArrows(shootTypes.LEFT_TO_RIGHT); break; case 3: PrepareArrows(shootTypes.RIGHT_TO_LEFT); break; case 4: PrepareArrows(shootTypes.ULTRA_DIFFICULT_ULTRA); break; } } else if (lives <= 1) { random = Random.Range(1, 6); switch (random) { case 1: PrepareArrows(shootTypes.NEW_SHOOT_TYPE_SMALL); break; case 2: PrepareArrows(shootTypes.LEFT_TO_RIGHT); break; case 3: PrepareArrows(shootTypes.RIGHT_TO_LEFT); break; case 4: PrepareArrows(shootTypes.ELEVEN_NEAR_GLITCH); break; case 5: PrepareArrows(shootTypes.ULTRA_DIFFICULT_ULTRA); break; } } shootInThisPlatform = true; StartCoroutine("CO_ShootArrows"); }
public void InsultingAnimationEnded() { if (lives == 2) currentSpecialSpeed = 2f; else if (lives == 1) currentSpecialSpeed = 3f; camera.ZoomArcherOut(); holesActives = false; int random; switch (bossPos) { case bossArcherPos.MAXLEFT: movingRight = true; break; case bossArcherPos.MEDIUMLEFT: random = Random.Range(1, 3); if (random == 1) { movingRight = true; } else { movingRight = false; } break; case bossArcherPos.MEDIUMRIGHT: random = Random.Range(1, 3); if (random == 1) { movingRight = true; } else { movingRight = false; } break; case bossArcherPos.MAXRIGHT: movingRight = false; break; } if (!shootInThisPlatform) bossState = bossArcherIA.PRESHOOT; else if (movingRight) { bossState = bossArcherIA.TURNING_LEFT_TO_RUN; animator.SetBool("Run", true); animator.speed = currentSpecialSpeed; animator.SetTrigger("TurnLeft"); } else { bossState = bossArcherIA.TURNING_RIGHT_TO_RUN; animator.SetBool("Run", true); animator.speed = currentSpecialSpeed; animator.SetTrigger("TurnRight"); } timeSinceStateChanged = 0.0f; }
public void OnCollisionEnter(Collision coll) { if (bossState == bossArcherIA.DEAD && !coll.collider.CompareTag("BossHit") && Time.time - timeWhenLastHitted >= 1f) { animator.speed = 1f; animator.SetTrigger("GroundHitted"); } else if (coll.collider.CompareTag("BossHit") && Time.time - timeWhenLastHitted >= 2f && bossState != bossArcherIA.DEAD) { SoundManager.instance.PlaySingle(hit); timeWhenLastHitted = Time.time; transform.localEulerAngles = new Vector3(0f, 180f, 0f); animator.speed = 1f; --lives; if (lives == 0) { heart1.sprite = heartEmpty; SoundManager.instance.PlaySingle(scream); animator.SetTrigger("LastHitted"); camera.ZoomOut(); glitchDebris.ArcherDead(); bossState = bossArcherIA.DEAD; glitchDialogue.SetActive(true); glitchCollider.SetActive(true); shake.enabled = false; if (BossDeadEvent != null) BossDeadEvent(); } else if (lives == 1) { heart2.sprite = heartEmpty; holesActives = true; camera.ZoomArcherIn(); timeInPreShoot = 0f; timeInPostShoot = 0f; animator.SetTrigger("Hitted"); bossState = bossArcherIA.HITTED; } else if (lives == 2) { heart3.sprite = heartEmpty; holesActives = true; camera.ZoomArcherIn(); animator.SetTrigger("Hitted"); bossState = bossArcherIA.HITTED; } else if (lives == 3) { shake.enabled = true; heart4.sprite = heartEmpty; holesActives = true; camera.ZoomArcherIn(); timeInPreShoot = 1f; timeInPostShoot = 1f; glitchDebris.Fall(); animator.SetTrigger("Hitted"); bossState = bossArcherIA.HITTED; } else if (lives == 4) { heart5.sprite = heartEmpty; holesActives = true; camera.ZoomArcherIn(); animator.SetTrigger("Hitted"); bossState = bossArcherIA.HITTED; } } }
public void OnTriggerEnter(Collider coll) { if (coll.transform.name == "JumpPoint" && bossState == bossArcherIA.MOVING && bossState != bossArcherIA.DEAD) { currentStartJumpPoint = transform.position; timeJumping = 0.0f; SoundManager.instance.PlaySingle(jumpSound); int random; random = Random.Range(1, 3); if (bossPos == bossArcherPos.MAXRIGHT) { if (random == 1) { bossPos = bossArcherPos.MEDIUMRIGHT; currentEndJumpPoint = EndJumpPoint[4].position + new Vector3(-1f, -1f, 0f); currentMiddleJumpPoint = MiddleJumpPoint[4].position; } else { bossPos = bossArcherPos.MEDIUMLEFT; currentEndJumpPoint = EndJumpPoint[2].position + new Vector3(-1f, -1f, 0f); currentMiddleJumpPoint = MiddleJumpPoint[3].position; } } else if (bossPos == bossArcherPos.MAXLEFT) { if (random == 1) { bossPos = bossArcherPos.MEDIUMLEFT; currentEndJumpPoint = EndJumpPoint[1].position + new Vector3(+1f, -1f, 0f); currentMiddleJumpPoint = MiddleJumpPoint[0].position; } else { bossPos = bossArcherPos.MEDIUMRIGHT; currentEndJumpPoint = EndJumpPoint[3].position + new Vector3(1f, -1f, 0f); currentMiddleJumpPoint = MiddleJumpPoint[1].position; } } else if (bossPos == bossArcherPos.MEDIUMLEFT && movingRight) { if (random == 1) { bossPos = bossArcherPos.MEDIUMRIGHT; currentEndJumpPoint = EndJumpPoint[3].position + new Vector3(1f, -1f, 0f); currentMiddleJumpPoint = MiddleJumpPoint[2].position; } else { bossPos = bossArcherPos.MAXRIGHT; currentEndJumpPoint = EndJumpPoint[5].position + new Vector3(1f, -1f, 0f); currentMiddleJumpPoint = MiddleJumpPoint[3].position; } } else if (bossPos == bossArcherPos.MEDIUMLEFT && !movingRight) { bossPos = bossArcherPos.MAXLEFT; currentEndJumpPoint = EndJumpPoint[0].position + new Vector3(-1f, -1f, 0f); currentMiddleJumpPoint = MiddleJumpPoint[0].position; } else if (bossPos == bossArcherPos.MEDIUMRIGHT && movingRight) { bossPos = bossArcherPos.MAXRIGHT; currentEndJumpPoint = EndJumpPoint[5].position + new Vector3(1f, -1f, 0f); currentMiddleJumpPoint = MiddleJumpPoint[4].position; } else if (bossPos == bossArcherPos.MEDIUMRIGHT && !movingRight) { if (random == 1) { bossPos = bossArcherPos.MEDIUMLEFT; currentEndJumpPoint = EndJumpPoint[2].position + new Vector3(-1f, -1f, 0f); currentMiddleJumpPoint = MiddleJumpPoint[2].position; } else { bossPos = bossArcherPos.MAXLEFT; currentEndJumpPoint = EndJumpPoint[0].position + new Vector3(-1f, -1f, 0f); currentMiddleJumpPoint = MiddleJumpPoint[1].position; } } else { Debug.Log("HEHE; ERROR"); } bossState = bossArcherIA.JUMPING; fallingJump = false; animator.SetTrigger("Jump"); } else if (coll.transform.name == "StopPoint" && firstStopPoint && bossState != bossArcherIA.DEAD && !shootInThisPlatform) { firstStopPoint = false; } else if (coll.transform.name == "StopPoint" && !firstStopPoint && bossState != bossArcherIA.DEAD && !shootInThisPlatform) { if (bossPos == bossArcherPos.MEDIUMLEFT || bossPos == bossArcherPos.MEDIUMRIGHT) transform.position = new Vector3(transform.position.x, transform.position.y, 17.5f - 5.34f); if (movingRight) { bossState = bossArcherIA.TURNING_RIGHT_TO_STOP; animator.speed = currentSpecialSpeed; animator.SetTrigger("TurnRight"); } else { bossState = bossArcherIA.TURNING_LEFT_TO_STOP; animator.speed = currentSpecialSpeed; animator.SetTrigger("TurnLeft"); } animator.SetBool("Run", false); } }
// Update is called once per frame void Update() { if (slowFPSactivated && (bossState == bossArcherIA.JUMPING || bossState == bossArcherIA.FALLING_JUMP)) { animator.speed = 0.5f; } else if (slowFPSactivated) { animator.speed = currentSpecialSpeed * 0.5f; } else if (bossState == bossArcherIA.JUMPING || bossState == bossArcherIA.FALLING_JUMP) { animator.speed = 1f; } else { animator.speed = currentSpecialSpeed; } if (world.doUpdate) { if (!fallingDead) rigidbody.velocity = Vector3.zero; switch (bossState) { case bossArcherIA.MOVING: transform.Translate(Vector3.forward * world.lag * horizontalVelocity); break; case bossArcherIA.FALLING_JUMP: if (fallingJump) bossState = bossArcherIA.MOVING; break; case bossArcherIA.JUMPING: float perc; timeJumping += world.lag; perc = timeJumping / timeToJump; perc = perc * perc * (3f - 2f * perc); Vector3 firstLerpPoint = Vector3.Lerp(currentStartJumpPoint, currentMiddleJumpPoint, perc); Vector3 secondLerpPoint = Vector3.Lerp(currentMiddleJumpPoint, currentEndJumpPoint, perc); Vector3 currentPosition = Vector3.Lerp(firstLerpPoint, secondLerpPoint, perc); transform.position = currentPosition; if (IsGrounded() && perc >= 0.5f) { shootInThisPlatform = false; bossState = bossArcherIA.FALLING_JUMP; } break; case bossArcherIA.PRESHOOT: if (canShoot) { timeSinceStateChanged += world.lag; if (timeSinceStateChanged >= timeInPreShoot) { bossState = bossArcherIA.SHOOTING; animator.speed = currentSpecialSpeed; animator.SetTrigger("Attack"); } } else { timeSinceStateChanged = 0.0f; } break; case bossArcherIA.SHOOTING: break; case bossArcherIA.POSTSHOOT: timeSinceStateChanged += world.lag; if (timeSinceStateChanged >= timeInPostShoot) { int random; switch (bossPos) { case bossArcherPos.MAXLEFT: movingRight = true; break; case bossArcherPos.MEDIUMLEFT: random = Random.Range(1, 3); if (random == 1) { movingRight = true; } else { movingRight = false; } break; case bossArcherPos.MEDIUMRIGHT: random = Random.Range(1, 3); if (random == 1) { movingRight = true; } else { movingRight = false; } break; case bossArcherPos.MAXRIGHT: movingRight = false; break; } if (movingRight) { bossState = bossArcherIA.TURNING_LEFT_TO_RUN; animator.SetBool("Run", true); animator.speed = currentSpecialSpeed; animator.SetTrigger("TurnLeft"); } else { bossState = bossArcherIA.TURNING_RIGHT_TO_RUN; animator.SetBool("Run", true); animator.speed = currentSpecialSpeed; animator.SetTrigger("TurnRight"); } } break; case bossArcherIA.TURNING_LEFT_TO_RUN: case bossArcherIA.TURNING_RIGHT_TO_RUN: case bossArcherIA.TURNING_LEFT_TO_STOP: case bossArcherIA.TURNING_RIGHT_TO_STOP: case bossArcherIA.HITTED: break; case bossArcherIA.IDLE: if (start) { bossState = bossArcherIA.PRESHOOT; start = false; } break; case bossArcherIA.DEAD: if (fallingDead) { timeFalling += world.lag; float percentage = timeFalling / timeToMoveZWhileFall; if (percentage >= 1.0f) percentage = 1.0f; float xPos = Mathf.Lerp(startXPosWhenDead, endXPosWhenDead, percentage); float zPos = Mathf.Lerp(startZPosWhenDead, endZPosWhenDead, percentage); transform.position = new Vector3(xPos, transform.position.y, zPos); } break; } } }
// Use this for initialization void Start() { rigidbody = transform.GetComponent<Rigidbody>(); boxCollider = transform.GetComponent<BoxCollider>(); timeSinceStateChanged = 0.0f; bossPos = bossArcherPos.MEDIUMRIGHT; bossState = bossArcherIA.IDLE; timeSinceStateChanged = 0.0f; timeJumping = 0.0f; arrows = new Transform[arrowPool.childCount]; for (int i = 0; i < arrowPool.childCount; ++i) { arrows[i] = arrowPool.GetChild(i); } arrowsScript = new BossArrowScript[arrowPool.childCount]; for (int i = 0; i < arrows.Length; ++i) { arrowsScript[i] = arrows[i].GetComponent<BossArrowScript>(); } animator = transform.GetComponent<Animator>(); firstStopPoint = true; slowFPS.SlowFPSChangedStatusEvent += SlowFPSStateChanged; timeWhenLastHitted = Time.time; playerScript.PlayerDeadEvent += GlitchDead; playerScript.PlayerReviveEvent += GlitchRevives; upArrow.gameObject.SetActive(false); heart1 = HUDLives.FindChild("Heart1").GetComponent<Image>(); heart2 = HUDLives.FindChild("Heart2").GetComponent<Image>(); heart3 = HUDLives.FindChild("Heart3").GetComponent<Image>(); heart4 = HUDLives.FindChild("Heart4").GetComponent<Image>(); heart5 = HUDLives.FindChild("Heart5").GetComponent<Image>(); //transform.FindChild("GlitchCollider").GetComponent<GlitchArcher>().BossGlitchedEvent += GlitchArcher; endBoss.BossGlitchEvent += GlitchArcher; }