How to stop the countdown timer when I have collected all the coins?

So, I have followed the roll-a-ball tutorial, I also added a countdown timer and give it a C# script so that if you couldn’t collect all the coins within the time limit, it will automatically change scene to “Game Over” scene. However, when I collect all the coins, the timer still running. I want to stop the countdown timer when I collect all of the coins so it will prevent the change scene.

This is my PlayerController Script

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

public class PlayerController : MonoBehaviour
{

    public float speed;
    public Text countText;
    public GameObject winButton;
    public GameObject mainMenu;

    private Rigidbody rb;
    private int count;

    void Start()
    {
        rb = GetComponent<Rigidbody>();
        count = 0;
        SetCountText();
        winButton.SetActive(false);
        mainMenu.SetActive(false);
        winCards.SetActive(false);
    }


    void FixedUpdate()
    {
        float moveHorizontal = Input.GetAxis("Horizontal");
        float moveVertical = Input.GetAxis("Vertical");

        Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);

        rb.AddForce(movement * speed);
    }

    void OnTriggerEnter(Collider other)
    {
        if (other.gameObject.CompareTag("Collectible"))
        {
            other.gameObject.SetActive(false);
            count = count + 1;
            SetCountText();
        }
    }

    void SetCountText()
    {
        countText.text = "COLLECT: " + count.ToString() + "/12";
        if (count >= 12)
        {

            winButton.SetActive(true);
            mainMenu.SetActive(true);
            winCards.SetActive(true);
        }

    }

}

and this is my Count down timer script

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

public class TimerEnd : MonoBehaviour
{

    public string GameOver;
    private float timer = 0f;
    private Text timerSeconds;


    // Use this for initialization
    void Start()
    {
        timerSeconds = GetComponent<Text>();
    }

    // Update is called once per frame
    void Update()
    {
        timer += Time.deltaTime;
        timerSeconds.text = timer.ToString("f2");
        if (timer <= 0)
        {
            Application.LoadLevel("Game Over");
        }
       
    }
}

What should I do? I’m still confused, please give me a clear answer bcs I am still new at this.

THANKYOU

In your PlayerController create a

public static bool CollectedAll = false;

In Update of TimerEnd write at the beginning:

if(PlayerController.CollectedAll)
    return;

Then just set this bool to true when you collect last coin.

@jevon7d

This should get you started. If you need any more help with furthering the script I would be glad to help.

 using System.Collections;
 using UnityEngine.UI;
 using System.Collections.Generic;
 using UnityEngine;
 
 public class PlayerController : MonoBehaviour
 {
     public float speed;
     public Text countText;
     public GameObject winButton;
     public GameObject mainMenu;
 
     private Rigidbody rb;
     private int count;
     private bool hasWon = false;
 
     void Start()
     {
         rb = GetComponent<Rigidbody>();
         count = 0;
         SetCountText();
         winButton.SetActive(false);
         mainMenu.SetActive(false);
         winCards.SetActive(false);
     }
 
     void FixedUpdate()
     {
         float moveHorizontal = Input.GetAxis("Horizontal");
         float moveVertical = Input.GetAxis("Vertical");
 
         Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);
 
         rb.AddForce(movement * speed);
     }
 
     void OnTriggerEnter(Collider other)
     {
         if (other.gameObject.CompareTag("Collectible"))
         {
             other.gameObject.SetActive(false);
             count = count + 1;
             SetCountText();
         }
     }
 
     void SetCountText()
     {
         countText.text = "COLLECT: " + count.ToString() + "/12";
         if (count >= 12)
         {
             winButton.SetActive(true);
             mainMenu.SetActive(true);
             winCards.SetActive(true);
             hasWon = true;
         }
     }

     public bool HasWon() {
         return hasWon;
     }
 }

Count down timer script

 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine.UI;
 using UnityEngine;
 
 public class TimerEnd : MonoBehaviour
 {
 
     public string GameOver;
     private float timer = 0f;
     private Text timerSeconds;
     public PlayerController control;
 
     // Use this for initialization
     void Start()
     {
         timerSeconds = GetComponent<Text>();
         if (control == null) {
             control = GetComponent<PlayerController>();
         }
     }
 
     // Update is called once per frame
     void Update()
     {
         if (control.HasWon() == false){
             timer += Time.deltaTime; 
         }

         timerSeconds.text = timer.ToString("f2");
         if (timer <= 0)
         {
             Application.LoadLevel("Game Over");
         }
     }
 }