You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

124 lines
3.3 KiB

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);
}
}