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.
 
 

131 lines
3.3 KiB

using UnityEngine;
using System.Collections;
[RequireComponent(typeof(Rigidbody2D))]
public class PlayerController : InteractableObject {
public GameObject bullet;
public float speed;
public float spinSpeed = 5f;
public int health;
public Renderer healthMat;
public Color[] healthColor;
public GameObject Explosion;
public ParticleSystem boostEffect;
private int bulletDirection = -1;
private Rigidbody2D rigid;
private float lastHit = 0.0f;
private bool isImmobilized = false;
// Use this for initialization
void Start() {
rigid = GetComponent<Rigidbody2D>();
rigid.AddForce(transform.right * 200);
}
// Update is called once per frame
void Update() {
}
public void rotatePlayer() {
if (isImmobilized)
return;
rigid.velocity = Vector3.zero;
transform.Rotate(new Vector3(0, 0, spinSpeed) * 50 * Time.deltaTime);
}
public void movePlayer() {
if (isImmobilized)
return;
//Debug.Log(transform.rotation.eulerAngles.z * Mathf.Deg2Rad);
boostEffect.startRotation = -transform.rotation.eulerAngles.z * Mathf.Deg2Rad;
boostEffect.Play();
rigid.AddForce(transform.right * speed,ForceMode2D.Impulse);
}
GameObject findClosestTarget() {
GameObject[] targets = GameObject.FindGameObjectsWithTag("Enemy");
GameObject tMin = null;
float minDist = Mathf.Infinity;
Vector3 currentPos = transform.position;
foreach (GameObject t in targets) {
float dist = Vector3.Distance(t.transform.position, currentPos);
if (dist < minDist) {
tMin = t;
minDist = dist;
}
}
return tMin;
}
public void shoot() {
if (isImmobilized)
return;
GameObject bulletClone = (GameObject)Instantiate(bullet, transform.position + (transform.up * bulletDirection * 0.1f), transform.rotation);
MissileController bulletScript = bulletClone.GetComponent<MissileController>();
bulletScript.startVelocity = transform.up * bulletDirection;
bulletDirection = -bulletDirection;
bulletScript.ignoreList = GetComponents<Collider2D>();
bulletScript.target = findClosestTarget();
bulletScript.enabled = true;
}
private void ImmobilizePlayer() {
isImmobilized = true;
rigid.angularDrag = 0;
rigid.drag = 1;
rigid.constraints = RigidbodyConstraints2D.None;
}
public override void shot() {
if (Time.time - lastHit < 1) {
return;
}
health--;
if (isImmobilized) {
killPlayer();
}
if (health <= 0) {
ImmobilizePlayer();
health = 0;
}
healthMat.material.color = healthColor[3-health];
lastHit = Time.time;
}
private void killPlayer() {
if (Explosion != null)
DontDestroyOnLoad(Instantiate(Explosion, transform.position, transform.rotation));
GameMemory.control.playerDeath();
Destroy(this.gameObject, 0.1f);
}
public void setHealth(int input) {
health = input;
healthMat.material.color = healthColor[3 - health];
}
}