void UpdateBossState() { if (criticalPointsQuant <= 0) { bossState = TentacleBossStates.HEAD_ATTACK; } switch (bossState) { case TentacleBossStates.ON_SPAWN: OnSpawn(); break; case TentacleBossStates.HORIZONTAL_MOVEMENT: HorizontalMovement(); break; case TentacleBossStates.TENTACLE_ATTACK: TentacleAttack(); break; case TentacleBossStates.HEAD_ATTACK: HeadAttack(); break; case TentacleBossStates.KILLED: break; } }
public override void OnCollisionEnter2D(Collision2D collision) { base.OnCollisionEnter2D(collision); if (collision.gameObject.tag == "PlayerBullet") { if (canBeKilled) { Rigidbody2D rb = GetComponent <Rigidbody2D>(); rb.constraints = RigidbodyConstraints2D.None; BoxCollider2D boxCollider = GetComponent <BoxCollider2D>(); if (boxCollider) { boxCollider.enabled = false; } bossState = TentacleBossStates.KILLED; } } if (collision.gameObject.tag == "Player") { player.Kill(); } }
void OnSpawn() { transform.position = Vector3.MoveTowards(transform.position, targetStartPosition, entranceSpeed * Time.deltaTime); if (transform.position == targetStartPosition) { bossState = TentacleBossStates.HORIZONTAL_MOVEMENT; } }
void TentacleAttack() { int randomTentacle = Random.Range(0, tentacles.Count); Debug.Log("Tentacle index selected: " + randomTentacle); if (tentacles[randomTentacle].IsAlive()) { tentacles[randomTentacle].Attack(); } canMove = false; bossState = TentacleBossStates.HORIZONTAL_MOVEMENT; }
public override void Start() { base.Start(); targetStartPosition = new Vector3(transform.position.x, transform.position.y - verticalDistanceToTravel, transform.position.z); //levelManager = LevelManager.GetInstance(); player = FindObjectOfType <PlayerSlimy>(); criticalPointsQuant = tentacles.Count; canBeKilled = false; lockPosTimer = 0; startMovingTimer = 0; AudioManager.Instance.PlayAudioClip(onSpawnSound); bossState = TentacleBossStates.ON_SPAWN; canMove = true; }
void HorizontalMovement() { if (canMove) { Vector2 smoothMovement = Vector2.Lerp(transform.position, // Boss Position new Vector2(player.transform.position.x, transform.position.y), // Lerp to player X axis position lerpMovementSpeed * Time.deltaTime); // Lerp speed // Apply smooth movement transform.position = smoothMovement; // ATTACK lockPosTimer += Time.deltaTime; if (lockPosTimer >= timeToLockPosAndAttack) { // Attack with tentacles if there are still any if (criticalPointsQuant > 0) { bossState = TentacleBossStates.TENTACLE_ATTACK; } else { bossState = TentacleBossStates.HEAD_ATTACK; } lockPosTimer = 0; } } else { startMovingTimer += Time.unscaledDeltaTime; if (startMovingTimer >= timeToMoveAgain) { canMove = true; startMovingTimer = 0; } } }