// Update is called once per frame void Update() { if (enemyController.freezeEnemy) { // add anything here to happen while frozen i.e. time compensations return; } // do ScrewDriver ai logic if it's enabled if (enableAI) { // get player position if (player != null) { playerPosition = player.transform.position; } // screwdriver has only two states - closed and open // while closed he's below standing megaman's bullet height // while open he shoots bullet spreads two times switch (screwDriverState) { case ScrewDriverState.Closed: animator.Play("ScrewDriver_Closed"); // check distance to player if (player != null && !doAttack) { float distance = Vector2.Distance(transform.position, playerPosition); if (distance <= playerRange) { doAttack = true; openTimer = openDelay; } } // within distance and can attack if (doAttack) { // delay before opening to attack openTimer -= Time.deltaTime; if (openTimer <= 0) { // switch to open state // NOTE: animation has events that shoot the bullets and goes back to closed state screwDriverState = ScrewDriverState.Open; } } break; case ScrewDriverState.Open: // firing of the bullets is performed via animation events calling ShootBullet() animator.Play("ScrewDriver_Open"); break; } } }
// called from the last animation event in the ScrewDriver_Open animation private void OpenAnimationStop() { doAttack = false; screwDriverState = ScrewDriverState.Closed; }