revival/game/Assets/Scripts/ArrowWall/Arrow.cs

54 lines
1.6 KiB
C#
Raw Normal View History

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Arrow : MonoBehaviour
{
Rigidbody rb;
// Float for speed of the arrow.
2021-03-12 12:52:56 +01:00
[SerializeField] private float speed;
// Float for time in seconds to wait to destroy the arrow on contact with any other gameobject that is no the player.
2021-03-12 12:52:56 +01:00
[SerializeField] private float waitToDestroy;
// Vector3 to set direction of travel for the arrow once the trigger is activated.
2021-03-12 12:52:56 +01:00
[SerializeField] private Vector3 direction;
[SerializeField] private PlayerDeath pd;
private void Start()
{
rb = GetComponent<Rigidbody>();
}
private void OnTriggerEnter(Collider other)
{
// Checks to make sure other collider is the Player using tag.
if (other.gameObject.CompareTag("Player"))
{
rb.velocity = direction * speed;
}
}
private void OnCollisionEnter(Collision collision)
{
2021-03-12 12:52:56 +01:00
if (collision.gameObject.TryGetComponent(out PlayerDeath playerDeath))
{
// Start Respawn coroutine.
2021-03-12 12:52:56 +01:00
StartCoroutine(pd.RespawnPlayer());
// Destroy arrow on contact with player.
Destroy(gameObject);
}
else
{
// If arrow makes contact with any other gameobject start DestroyArrow corountine.
StartCoroutine(DestoryArrow());
}
}
public IEnumerator DestoryArrow()
{
// set arrow velocity to zero wait for destory time and then destory the arrow.
rb.velocity = Vector3.zero;
yield return new WaitForSeconds(waitToDestroy);
Destroy(gameObject);
}
}