2025-07-30 01:38:12 +05:00
|
|
|
using UnityEngine;
|
|
|
|
|
|
|
|
public class ChaseObstacleTrigger : MonoBehaviour
|
|
|
|
{
|
2025-08-18 17:52:40 +05:00
|
|
|
private float contactTimer = 0f;
|
|
|
|
private bool isPlayerTouching = false;
|
|
|
|
private ChasePlayerController player;
|
|
|
|
|
|
|
|
private void HandleEnter(GameObject obj)
|
|
|
|
{
|
|
|
|
if (!obj.CompareTag("Player")) return;
|
|
|
|
|
|
|
|
player = obj.GetComponent<ChasePlayerController>();
|
|
|
|
if (player != null)
|
|
|
|
{
|
|
|
|
isPlayerTouching = true;
|
|
|
|
contactTimer = 0f;
|
|
|
|
player.OnObstacleHit(); // First hit (stumble)
|
|
|
|
}
|
2025-09-16 17:51:02 +05:00
|
|
|
gameObject.SetActive(false);
|
2025-08-18 17:52:40 +05:00
|
|
|
}
|
|
|
|
|
|
|
|
private void HandleStay()
|
|
|
|
{
|
|
|
|
if (!isPlayerTouching || player == null) return;
|
|
|
|
|
|
|
|
contactTimer += Time.deltaTime;
|
|
|
|
|
|
|
|
if (contactTimer >= 1f)
|
|
|
|
{
|
|
|
|
player.OnObstacleHit(); // Second hit = GameOver
|
|
|
|
isPlayerTouching = false; // Prevent further hits
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
private void HandleExit(GameObject obj)
|
|
|
|
{
|
|
|
|
if (!obj.CompareTag("Player")) return;
|
|
|
|
|
|
|
|
isPlayerTouching = false;
|
|
|
|
contactTimer = 0f;
|
|
|
|
player = null;
|
|
|
|
}
|
|
|
|
|
|
|
|
// ---------- For Collision ----------
|
2025-07-30 01:38:12 +05:00
|
|
|
private void OnCollisionEnter(Collision collision)
|
|
|
|
{
|
2025-08-18 17:52:40 +05:00
|
|
|
HandleEnter(collision.gameObject);
|
|
|
|
}
|
|
|
|
|
|
|
|
private void OnCollisionStay(Collision collision)
|
|
|
|
{
|
|
|
|
HandleStay();
|
|
|
|
}
|
|
|
|
|
|
|
|
private void OnCollisionExit(Collision collision)
|
|
|
|
{
|
|
|
|
HandleExit(collision.gameObject);
|
2025-07-30 01:38:12 +05:00
|
|
|
}
|
|
|
|
|
2025-08-18 17:52:40 +05:00
|
|
|
// ---------- For Trigger ----------
|
2025-07-30 01:38:12 +05:00
|
|
|
private void OnTriggerEnter(Collider other)
|
|
|
|
{
|
2025-08-18 17:52:40 +05:00
|
|
|
HandleEnter(other.gameObject);
|
|
|
|
}
|
|
|
|
|
|
|
|
private void OnTriggerStay(Collider other)
|
|
|
|
{
|
|
|
|
HandleStay();
|
|
|
|
}
|
|
|
|
|
|
|
|
private void OnTriggerExit(Collider other)
|
|
|
|
{
|
|
|
|
HandleExit(other.gameObject);
|
2025-07-30 01:38:12 +05:00
|
|
|
}
|
|
|
|
}
|