Untitled

 avatar
unknown
plain_text
2 months ago
4.0 kB
7
Indexable
using UnityEngine;
using System.Collections;

public class PointsCounter : MonoBehaviour
{
    public int Points;
    public int Streak; // Tracks the current scoring streak
    public int BestStreak; // Tracks the highest streak

    public bool isActive = true;
    public GameObject Area;
    public float PointCooldown = 2f;

    public bool didScore = false; // Tracks if a score has occurred

    [Header("Streak Feature")]
    private const string PointsKey = "SavedPoints";
    private const string StreakKey = "SavedStreak"; // Key for saving streak
    private const string BestStreakKey = "SavedBestStreak";

    public AudioSource pointGet;

    [Header("Dependencies")]
    public FallCheck fallCheck; // Reference to FallCheck script
    public EnterCheck enterCheck; // Reference to EnterCheck script

    [Header("Reset Settings")]
    public float scoreResetDelay = 2f; // Time in seconds before resetting didScore

    public void SetActive(bool state)
    {
        isActive = state;
    }

    private void Start()
    {
        Points = PlayerPrefs.GetInt(PointsKey, 0);
        BestStreak = PlayerPrefs.GetInt(BestStreakKey, 0);
        Streak = PlayerPrefs.GetInt(StreakKey, 0); // Load the saved streak
    }

    private void OnTriggerEnter(Collider other)
    {
        if (!isActive) return;

        if (other.CompareTag("Basketball"))
        {
            Debug.Log("Scored Point!");
            didScore = true; // Set didScore to true when scoring
            pointGet.Play();

            Points++;
            Streak++;

            // Update the best streak if the current streak is higher
            if (Streak > BestStreak)
            {
                BestStreak = Streak;
                PlayerPrefs.SetInt(BestStreakKey, BestStreak);
            }

            PlayerPrefs.SetInt(PointsKey, Points);
            PlayerPrefs.SetInt(StreakKey, Streak); // Save the current streak
            PlayerPrefs.Save();

            if (Area != null)
            {
                BoxCollider areaCollider = Area.GetComponent<BoxCollider>();
                if (areaCollider != null)
                {
                    areaCollider.enabled = false;
                    StartCoroutine(ReenableColliderAfterCooldown(areaCollider));
                }
            }
        }
    }

    // Call this method when the player fails to score (implement failure detection in your game logic)
    public void ResetStreak()
    {
        Streak = 0;
        PlayerPrefs.SetInt(StreakKey, Streak); // Save the reset streak
        PlayerPrefs.Save();
        didScore = false; // Reset didScore on failure
    }

    private IEnumerator ReenableColliderAfterCooldown(BoxCollider collider)
    {
        yield return new WaitForSeconds(PointCooldown);
        collider.enabled = true;
    }

    private void Update()
    {
        // Check if FallCheck hasCollidedWithGround is enabled
        if (fallCheck != null && fallCheck.hasCollidedWithGround)
        {
            if (enterCheck != null && enterCheck.didEnter)
            {
                if (didScore)
                {
                    // Maintain the streak
                }
                else
                {
                    // Reset streak if both didEnter and hasCollidedWithGround are active but didScore is not
                    ResetStreak();
                }
            }
        }

        // Reset didScore after a delay if required
        if (fallCheck != null && fallCheck.hasCollidedWithGround && didScore)
        {
            StartCoroutine(ResetDidScoreAfterDelay());
        }
    }

    private IEnumerator ResetDidScoreAfterDelay()
    {
        yield return new WaitForSeconds(scoreResetDelay);
        didScore = false;
    }

    public void ResetPoints()
    {
        Points = 0;
        PlayerPrefs.SetInt(PointsKey, Points);
        PlayerPrefs.Save();
    }
}
Leave a Comment