using UnityEngine;
|
|
using System.Collections;
|
|
|
|
[RequireComponent(typeof(Rigidbody2D))]
|
|
public class MissileController : MonoBehaviour {
|
|
|
|
|
|
public float speed = 1;
|
|
public float initVelocity = 5;
|
|
public float boostCoolDown = 0.3f;
|
|
public float difficulty = 0.0f;
|
|
public int totalBoosts = 2;
|
|
|
|
public ParticleSystem boostEffect;
|
|
public GameObject Explosion;
|
|
|
|
[HideInInspector]
|
|
public Vector3 startVelocity;
|
|
[HideInInspector]
|
|
public Vector3 targetPos;
|
|
[HideInInspector]
|
|
public GameObject target;
|
|
[HideInInspector]
|
|
public Rigidbody2D targetRigid;
|
|
[HideInInspector]
|
|
public Collider2D[] ignoreList;
|
|
[HideInInspector]
|
|
public InteractableObject spawningObject;
|
|
|
|
private Rigidbody2D rigid;
|
|
private float startTime = 0.0f;
|
|
private int reCalibrate = 0;
|
|
|
|
// Use this for initialization
|
|
void Start () {
|
|
DontDestroyOnLoad(gameObject);
|
|
startTime = Time.time;
|
|
|
|
Collider2D thisCollider = GetComponent<Collider2D>();
|
|
if (thisCollider != null) {
|
|
foreach (Collider2D collider in ignoreList) {
|
|
Physics2D.IgnoreCollision(thisCollider, collider);
|
|
}
|
|
}
|
|
|
|
rigid = GetComponent<Rigidbody2D>();
|
|
rigid.velocity = startVelocity * initVelocity;
|
|
Destroy(gameObject, boostCoolDown * totalBoosts + 1);
|
|
}
|
|
|
|
// Update is called once per frame
|
|
void FixedUpdate () {
|
|
|
|
if (Time.time - startTime >= boostCoolDown && reCalibrate < totalBoosts) {
|
|
if (reCalibrate == 0) {
|
|
if (target != null) {
|
|
targetPos = target.transform.position;
|
|
}
|
|
}
|
|
if (target != null) {
|
|
moveTorwards(target);
|
|
}
|
|
reCalibrate++;
|
|
startTime = Time.time;
|
|
}
|
|
|
|
|
|
}
|
|
|
|
private void moveTorwards(Vector3 pos) {
|
|
|
|
if (boostEffect != null) {
|
|
boostEffect.startRotation = transform.rotation.eulerAngles.z * Mathf.Deg2Rad;
|
|
boostEffect.Play();
|
|
}
|
|
|
|
Vector2 direction = (pos - transform.position).normalized;
|
|
Debug.DrawLine(transform.position, pos, Color.green,0.3f);
|
|
rigid.velocity = direction * speed;
|
|
//rigid.AddForce(direction * speed, ForceMode2D.Impulse);
|
|
}
|
|
|
|
private void moveTorwards(GameObject target) {
|
|
if (target == null)
|
|
return;
|
|
|
|
if (targetRigid != null && reCalibrate == 1) {
|
|
Debug.DrawLine(targetPos, target.transform.position, Color.blue, 0.3f);
|
|
Vector2 pos = Vector3.Lerp( targetPos,target.transform.position,difficulty);
|
|
moveTorwards(pos);
|
|
return;
|
|
}
|
|
|
|
|
|
moveTorwards(target.transform.position);
|
|
|
|
}
|
|
|
|
|
|
void OnCollisionEnter2D(Collision2D coll) {
|
|
InteractableObject colScript = coll.gameObject.GetComponent<InteractableObject>();
|
|
|
|
if (colScript == null || colScript == spawningObject ) {
|
|
// Debug.Log("I ignored " + coll.gameObject.name);
|
|
return;
|
|
}
|
|
|
|
//Debug.Log("I hit " + coll.gameObject.name);
|
|
|
|
colScript.shot();
|
|
if (Explosion != null) {
|
|
GameObject explosion = (GameObject)Instantiate(Explosion, transform.position, transform.rotation);
|
|
Destroy(explosion, 2.0f);
|
|
}
|
|
|
|
Destroy(this.gameObject);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|