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

public class MarioController : MonoBehaviour
{
    public float moveSpeed = 5f;
    public float jumpForce = 5f;
    public float ladderClimbSpeed = 2f;
    public int maxHealth = 3;
    private int currentHealth;
    private bool grounded;
    private bool onLadder;
    private bool climbingLadder;
    private Vector2 direction;
    private Rigidbody2D rb2d;
    private new Collider2D collider;
    private Collider2D[] results;

    private void Awake()
    {
        rb2d = GetComponent<Rigidbody2D>();
        collider = GetComponent<Collider2D>();
        results = new Collider2D[4];
    }

    private void Start()
    {
        currentHealth = maxHealth;
    }

    private void CheckCollision()
    {
        grounded = false;
        onLadder = false;

        Vector2 size = collider.bounds.size;
        size.y += 0.1f;
        size.x /= 2f;

        int amount = Physics2D.OverlapBoxNonAlloc(transform.position, size, 0f, results);

        for (int i = 0; i < amount; i++)
        {
            GameObject hit = results[i].gameObject;

            if (hit.layer == LayerMask.NameToLayer("Platform"))
            {
                grounded = hit.transform.position.y < (transform.position.y - 0.5f);
            }
            else if (hit.layer == LayerMask.NameToLayer("Ladder"))
            {
                onLadder = true;
            }
        }
    }

    private void OnCollisionEnter2D(Collision2D collision)
    {
        if (collision.gameObject.layer == LayerMask.NameToLayer("Barrel"))
        {
            // If Mario collides with a barrel, decrease health and reset the scene
            currentHealth = 0;
            ResetScene();
        }
        else if (collision.gameObject.layer == LayerMask.NameToLayer("Win"))
        {
            // If Mario collides with the win object, reset the scene
            ResetScene();
        }
    }

    private void ResetScene()
    {
        // Reload the current scene
        SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
    }

    private void Update()
    {
        CheckCollision();

        if (grounded && Input.GetButtonDown("Jump"))
        {
            rb2d.velocity = new Vector2(rb2d.velocity.x, jumpForce);
        }

        float movement = Input.GetAxis("Horizontal");

        if (grounded)
        {
            direction.y = Mathf.Max(direction.y, -1f);
            climbingLadder = false;
        }

        if (onLadder && Input.GetButton("Vertical"))
        {
            // Climb the ladder vertically
            climbingLadder = true;
            float climbDirection = Input.GetAxis("Vertical");
            rb2d.velocity = new Vector2(0, climbDirection * ladderClimbSpeed);
            rb2d.gravityScale = 0f;
        }
        else if (climbingLadder)
        {
            rb2d.gravityScale = 1f;
            rb2d.velocity = new Vector2(rb2d.velocity.x, 0f);
            rb2d.constraints = RigidbodyConstraints2D.FreezePositionX;
        }
        else
        {
            rb2d.gravityScale = 1f;
            rb2d.constraints = RigidbodyConstraints2D.FreezeRotation;
        }

        rb2d.velocity = new Vector2(movement * moveSpeed, rb2d.velocity.y);

        if (movement > 0)
        {
            transform.localScale = new Vector3(1f, 1f, 1f);
        }
        else if (movement < 0)
        {
            transform.localScale = new Vector3(-1f, 1f, 1f);
        }
    }
}

add to this script that when mario dies it destroys the Life1 game object, then the second time he dies it destroys the Life2 game object and finally after the third time he dies it destroyes the Life3 game object and when the scene resets it instantiates the Life1, Life2, and Life3 game objects again