PlaneRun/Assets/Scripts/missle.cs

179 lines
5.2 KiB
C#

using System;
using UnityEngine;
using static UnityEngine.GraphicsBuffer;
public class missle : MonoBehaviour
{
public bool kamikaze;
public float speed = 60;
public float rotSpeed = 100;
public Transform playerTransform;
public GameObject explosion;
public Transform targetFlare;
private Camera cam;
public float targetUItimer;
public GameObject trail;
public GameObject playerMissle;
public bool chased;
PickupManager pm;
// Start is called before the first frame update
void Start()
{
pm = GameObject.FindObjectOfType<PickupManager>();
targetUItimer = 10;
playerTransform = GameObject.FindWithTag("Player").transform;
if(!kamikaze)
{
SearchForFlares();
}
else
{
targetUI = Instantiate(targetUI);
targetUI.transform.SetParent(GameObject.FindGameObjectWithTag("Canvas").transform);
if (playerTransform.gameObject.GetComponent<PickupManager>().missleEnabled)
ShowTargeting();
targetUI.GetComponent<TargetingButton>().enemy = transform;
cam = GameObject.FindGameObjectWithTag("MainCamera").GetComponent<Camera>();
targetUI.SetActive(false);
}
if(chased && playerMissle == null)
{
targetUI.GetComponent<RectTransform>().localScale = new Vector3(2f, 2f, 2f);
HideTargeting();
chased = false;
}
}
// Update is called once per frame
void Update()
{
if (targetFlare == null)
{
SearchForFlares();
transform.Translate(0, 0, speed * Time.deltaTime);
Vector3 direction = playerTransform.position - transform.position;
Quaternion rotation = Quaternion.LookRotation(direction);
transform.rotation = Quaternion.Lerp(transform.rotation, rotation, rotSpeed * Time.deltaTime);
}
else
{
transform.Translate(0, 0, speed * Time.deltaTime);
Vector3 direction = targetFlare.position - transform.position;
Quaternion rotation = Quaternion.LookRotation(direction);
transform.rotation = Quaternion.Lerp(transform.rotation, rotation, rotSpeed * 2 * Time.deltaTime);
}
if (targetUI != null)
targetUI.transform.position = cam.WorldToScreenPoint(transform.position);
if (kamikaze && targetUI.activeSelf)
{
if (targetUItimer > 0)
targetUItimer -= Time.deltaTime;
else
targetUI.SetActive(false);
}
}
private void OnTriggerEnter(Collider other)
{
if (other.CompareTag("missle"))
{
if (trail != null) {
trail.transform.SetParent(null);
trail.GetComponent<missleTrail>().StartTimer();
}
Instantiate(explosion, transform.position, transform.rotation);
Destroy(targetUI);
Destroy(gameObject, 0);
}
if (other.CompareTag("Player"))
{
if (trail != null)
{
trail.transform.SetParent(null);
trail.GetComponent<missleTrail>().StartTimer();
}
Instantiate(explosion, transform.position, transform.rotation);
Destroy(targetUI);
Destroy(gameObject, 0);
}
if (other.CompareTag("flareProjectile")&&!kamikaze)
{
pm.flarePickup.RemoveFlareCount(1);
if (trail != null)
{
trail.transform.SetParent(null);
trail.GetComponent<missleTrail>().StartTimer();
}
Instantiate(explosion, transform.position, transform.rotation);
Destroy(targetUI);
Destroy(other.gameObject, 0);
Destroy(gameObject, 0);
}
}
public void SearchForFlares()
{
if (targetFlare == null && pm.flarePickup.numOfFlares > 0)
{
GameObject[] flaresArr = GameObject.FindGameObjectsWithTag("flareProjectile");
int closestIndex = 0;
if (flaresArr.Length > 0)
{
for (int i = 0; i < flaresArr.Length; i++)
{
if (flaresArr[i] != null)
{
float dist1 = Vector3.Distance(transform.position, flaresArr[i].transform.position);
float dist2 = Vector3.Distance(transform.position, flaresArr[closestIndex].transform.position);
if (dist1 < dist2)
{
closestIndex = i;
}
}
targetFlare = flaresArr[closestIndex].transform;
}
}
}
}
public GameObject targetUI;
public void ShowTargeting()
{
if(kamikaze)
targetUI.SetActive(true);
}
public void HideTargeting()
{
if (kamikaze)
targetUI.SetActive(false);
}
public void ChasedByPlayerMissle(GameObject playerMissle)
{
this.playerMissle = playerMissle;
chased = true;
}
}