Files
Crash-Course/Assets/Scripts/Game/FallPlatform.cs

55 lines
1.8 KiB
C#
Raw Normal View History

using System.Collections;
using UnityEngine;
public class FallPlatform : MonoBehaviour
{
public float fallDelay = 2f; // Delay before the platform falls
public float resetDelay = 4f; // Delay before the platform resets
bool falling;
Rigidbody2D rb;
2025-03-07 11:29:09 -05:00
Vector3 defposition;
void Start()
{
2025-03-07 11:29:09 -05:00
defposition = transform.parent.position;
rb = transform.parent.GetComponent<Rigidbody2D>();
}
private void OnTriggerEnter2D(Collider2D collision) // Makes platform fall when player or another platform touch it
{
2025-04-07 18:56:43 -04:00
try
{
2025-04-07 18:56:43 -04:00
if (collision.transform.childCount != 0 && !falling && (collision.gameObject.CompareTag("Player") || collision.transform.GetChild(0).TryGetComponent(out FallPlatform _)))
{
StartCoroutine(FallAfterDelay());
}
}
catch (System.Exception e)
{
Debug.LogError("Error in FallPlatform: " + e.Message);
}
}
private IEnumerator FallAfterDelay() // Sets platform to fall and respawn
{
falling = true;
yield return new WaitForSeconds(fallDelay);
rb.bodyType = RigidbodyType2D.Dynamic;
yield return new WaitForSeconds(resetDelay);
2025-03-07 11:29:09 -05:00
transform.parent.GetComponent<Animator>().SetTrigger("respawn");
yield return new WaitForSeconds(0.5f);
Respawn();
}
//only resets the object script is attached to, need to fix so platform will reset with fall trigger object
2025-03-07 11:29:09 -05:00
// Use transform.parent to get the object it's attatched to
private void Respawn() // Resets the platform position
2025-03-07 11:29:09 -05:00
{
falling = false;
rb.bodyType = RigidbodyType2D.Static;
transform.parent.position = defposition;
transform.parent.rotation = Quaternion.identity;
}
}