PlaneRun/Assets/Scripts/jetEnemy.cs

143 lines
4.2 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class jetEnemy : MonoBehaviour
{
public float speed = 60;
public float rotSpeed = 100;
public Transform playerTransform;
public GameObject explosion;
public float retreatDis;
public float attackDis;
public int state; // 0 - attack | 1 - go away
private bool shotMissle;
public float attackDistance;
private float TimeBtwSpawn;
public float StartTimeSpawn;
public GameObject missleLauncher;
public GameObject missle;
private Camera cam;
public GameObject missleDrop;
public float targetUItimer;
public GameObject playerMissle;
public bool chased;
// Start is called before the first frame update
void Start()
{
playerTransform = GameObject.FindWithTag("Player").transform;
TimeBtwSpawn = StartTimeSpawn;
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);
}
// Update is called once per frame
void Update()
{
float dist = Vector3.Distance(playerTransform.position, transform.position);
if(state == 0)
{
Vector3 direction = playerTransform.position - transform.position;
Quaternion rotation = Quaternion.LookRotation(direction);
transform.rotation = Quaternion.Lerp(transform.rotation, rotation, rotSpeed * Time.deltaTime);
if(dist <= attackDistance && !shotMissle)
{
ShootMissle();
shotMissle=true;
}
}else if(state == 1)
{
Vector3 direction = transform.position - playerTransform.position;
Quaternion rotation = Quaternion.LookRotation(direction);
transform.rotation = Quaternion.Lerp(transform.rotation, rotation, rotSpeed * Time.deltaTime * 0.5f);
if (dist >= attackDis)
{
shotMissle = false;
state = 0;
}
}
transform.Translate(0, 0, speed * Time.deltaTime);
if (targetUI != null)
targetUI.transform.position = cam.WorldToScreenPoint(transform.position);
if (targetUI.activeSelf)
{
if (targetUItimer > 0)
targetUItimer -= Time.deltaTime;
else
targetUI.SetActive(false);
}
if (chased && playerMissle == null)
{
targetUI.GetComponent<RectTransform>().localScale = new Vector3(2f, 2f, 2f);
HideTargeting();
chased = false;
}
}
void ShootMissle()
{
Instantiate(missle, missleLauncher.transform.position, missleLauncher.transform.rotation);
state = 1;
}
private void OnTriggerEnter(Collider other)
{
if (other.CompareTag("missle"))
{
Instantiate(explosion, transform.position, transform.rotation);
int i = Random.Range(0,3);
if(i ==0)
Instantiate(missleDrop, transform.position, transform.rotation);
Destroy(gameObject, 0);
Destroy(targetUI);
}
if (other.CompareTag("Player"))
{
Instantiate(explosion, transform.position, transform.rotation);
int i = Random.Range(0, 3);
if (i == 0)
Instantiate(missleDrop, transform.position, transform.rotation);
Destroy(gameObject, 0);
Destroy(targetUI);
}
}
public GameObject targetUI;
public void ShowTargeting()
{
Debug.Log("Targeting showed");
targetUI.SetActive(true);
}
public void HideTargeting()
{
Debug.Log("Targeting hiden");
targetUI.SetActive(false);
}
public void ChasedByPlayerMissle(GameObject playerMissle)
{
this.playerMissle = playerMissle;
chased = true;
}
}