2021-03-05 00:31:22 +01:00
|
|
|
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;
|
2021-03-05 00:31:22 +01:00
|
|
|
// 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;
|
2021-03-05 00:31:22 +01:00
|
|
|
// 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;
|
2021-03-05 00:31:22 +01:00
|
|
|
|
|
|
|
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))
|
2021-03-05 00:31:22 +01:00
|
|
|
{
|
|
|
|
// Start Respawn coroutine.
|
2021-03-12 16:58:18 +01:00
|
|
|
playerDeath.Respawn();
|
2021-03-05 00:31:22 +01:00
|
|
|
// 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);
|
|
|
|
}
|
|
|
|
}
|