143 lines
4.2 KiB
C#
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;
|
|
}
|
|
}
|