Пример #1
0
    public virtual void GetKnockUp(Vector3 force)
    {
        if (!canKnockUp || isDead)
        {
            return;
        }
        cameraEffect.ShakeForSeconds(0.2f);

        if (_enemyCurrentState == EnemyState.LayOnGround)
        {
            currentLaySec -= 0.5f;
        }
        extraGravity += extraGravityPerKnockUp;
        if (_enemyCurrentState == EnemyState.GotHitToAir)
        {
            GetComponent <Animator>().SetTrigger("HitToAir");
        }
        rb.velocity = Vector3.zero;
        FaceBasedOnPlayerPosition();
        rb.AddForce(force);
        ChangeEnemyState(EnemyState.GotHitToAir);

        GameManager.Instance.lastHitEnemy     = gameObject;
        GameManager.Instance.lastHitEnemyTime = Time.time;
    }
    // Update is called once per frame
    void Update()
    {
        if (_enemyDetector.playerInRange() && !elevatorHasOperated)
        {
            responseDelay -= Time.deltaTime;
            if (responseDelay < 0)
            {
                print("Try to shake the camera");
                _cameraEffect.ShakeForSeconds(0.5f);
                elevatorHasOperated = true;
            }
        }

        if (elevatorHasOperated)
        {
            if (currentSpeed < maxSpeed)
            {
                currentSpeed = Mathf.Lerp(currentSpeed, maxSpeed, speedIncreaseRate);
            }
            rb.velocity = new Vector3(0, currentSpeed, 0);
        }

        if (Math.Abs(currentSpeed - maxSpeed) < 0.5f)
        {
            toNextLevelDelay -= Time.deltaTime;
            if (toNextLevelDelay <= 0)
            {
                Camera.main.GetComponent <CameraFollow>().enabled = false;

                LevelChanger.Instance.FadeToNextLevel();
            }
        }
    }