using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Armor : MonoBehaviour
{
    public int maxHits = 3;      // Maximum number of hits the player can resist
    public float invincibilityTime = 2f;    // Duration of invincibility after picking up the armor

    private bool isPickedUp = false;
    private int remainingHits;

    void OnTriggerEnter2D(Collider2D other)
    {
        if (other.CompareTag("Player") && !isPickedUp)
        {
            isPickedUp = true;
            remainingHits = maxHits;

            // Make the player invincible for invincibilityTime duration
            StartCoroutine(ApplyInvincibility(other.gameObject));

            // Disable the armor game object
            gameObject.SetActive(false);
        }
    }

    IEnumerator ApplyInvincibility(GameObject player)
    {
        Player playerScript = player.GetComponent<Player>();

        if (playerScript != null)
        {
            // Enable player invincibility
            playerScript.SetInvincibility(true);

            for (int i = 0; i < maxHits; i++)
            {
                yield return new WaitForSeconds(invincibilityTime);

                // Apply remaining hits to the player
                playerScript.TakeDamage(-1);

                remainingHits--;

                // If all hits have been absorbed, exit the coroutine
                if (remainingHits <= 0)
                {
                    break;
                }
            }

        }

        // Disable player invincibility
        playerScript.SetInvincibility(false);
    }
}
it says 'Player' does not contain a definition for SetInvinvibility. Here is the Player script for reference: using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class Player : MonoBehaviour
{
    public float speed = 5f; // Speed of character movement
    public int maxHealth = 3; // Maximum player health
    public int currentHealth; // Current player health

    private Animator anim;
    private bool isInvincible = false; // Flag to track invincibility state
    private float invincibleTimer = 2f; // Duration of invincibility in seconds

    private void Start()
    {
        anim = GetComponent<Animator>();
        currentHealth = maxHealth; // Set the initial health to maxHealth value

        StartCoroutine(StartInvincibility());
    }

    private void Update()
    {
        // Move character based on input axes
        float horizontalInput = Input.GetAxis("Horizontal");
        float verticalInput = Input.GetAxis("Vertical");

        // Calculate movement direction
        Vector2 movement = new Vector2(horizontalInput, verticalInput) * speed * Time.deltaTime;

        // Apply movement to the character’s position
        transform.Translate(movement);

        anim.SetFloat("moveX", movement.x);
        anim.SetFloat("moveY", movement.y);
    }

    private void OnCollisionEnter2D(Collision2D collision)
    {
        // Check if the player collides with an enemy or boss and is not invincible
        if ((collision.gameObject.CompareTag("Enemy") || collision.gameObject.CompareTag("Boss")) && !isInvincible)
        {
            TakeDamage(1); // Deduct 1 health point

            if (currentHealth <= 0)
            {
                ResetScene(); // Reset the scene if health reaches 0
            }
            else
            {
                StartCoroutine(StartInvincibility()); // Start the invincibility timer
            }
        }

        // Check if the player collides with a health object
        if (collision.gameObject.CompareTag("Health"))
        {
            AddHealth(1); // Increase health by 1
            Destroy(collision.gameObject); // Destroy the health object
        }

        // Check if the player collides with the armor object
        if (collision.gameObject.CompareTag("Armor"))
        {
            Armor armor = collision.gameObject.GetComponent<Armor>();

            if (armor != null)
            {
                StartCoroutine(ApplyInvincibility(3)); // Apply invincibility for 3 damage hits
            }

            Destroy(collision.gameObject); // Destroy the armor object
        }

        // Check if the player collides with the bomb
        if (collision.gameObject.CompareTag("Bomb"))
        {
            Bomb bomb = collision.gameObject.GetComponent<Bomb>();
            bomb.Explode(); // Trigger bomb explosion on the player
        }

        // Check if the player collides with the laser
        if (collision.gameObject.CompareTag("Laser"))
        {
            TakeDamage(3); // Deduct 3 health points
        }
    }

    public void TakeDamage(int amount)
    {
        currentHealth -= amount; // Deduct the specified amount from the current health

        if (currentHealth <= 0)
        {
            ResetScene(); // Reset the scene if health reaches 0
        }
    }

    public void AddHealth(int amount)
    {
        currentHealth += amount; // Increase the current health by the specified amount
        currentHealth = Mathf.Min(currentHealth, maxHealth); // Ensure current health doesn’t exceed max health
    }

    private IEnumerator StartInvincibility()
    {
        isInvincible = true; // Set the invincibility flag to true

        yield return new WaitForSeconds(invincibleTimer); // Wait for the specified duration

        isInvincible = false; // Set the invincibility flag back to false
    }

    private IEnumerator ApplyInvincibility(int numHits)
    {
        isInvincible = true; // Set the invincibility flag to true

        for (int i = 0; i < numHits; i++)
        {
            yield return new WaitForSeconds(invincibleTimer); // Wait for the specified duration

            TakeDamage(1); // Deduct 1 health point

            if (currentHealth <= 0)
            {
                ResetScene(); // Reset the scene if health reaches 0
                yield break; // Exit the coroutine if player health is <= 0
            }
        }

        isInvincible = false; // Set the invincibility flag back to false
    }

    private void ResetScene()
    {
        SceneManager.LoadScene("Level1");
    }
}