public void Reset() { CurrentState = TURRET_STATE.IDLE; this.gameObject.GetComponent <Health>().Reset(); m_TargetedEnemy = null; }
public override void Act(int value) { if (!TurretActive) { return; } switch (value) { case (int)TURRET_STATE.IDLE: CurrentState = TURRET_STATE.IDLE; // Make turret head rotate this.gameObject.transform.GetChild(1).transform.RotateAround(this.gameObject.transform.position, Vector3.up, (5 + Random.Range(0, 5)) * Time.deltaTime); break; case (int)TURRET_STATE.ATTACKING: CurrentState = TURRET_STATE.ATTACKING; // Make turret head aim at enemy Vector3 dir = (m_TargetedEnemy.transform.position - this.gameObject.transform.GetChild(1).transform.position).normalized; dir.y = 0; Quaternion lookRotation = Quaternion.LookRotation(dir); this.gameObject.transform.GetChild(1).transform.rotation = Quaternion.Slerp(this.gameObject.transform.GetChild(1).transform.rotation, lookRotation /** Quaternion.Euler(0, 90, 0)*/, Time.deltaTime * 5); // Check if can fire if (d_Timer > AttackSpeed) { //this.gameObject.transform.GetChild(1).transform.LookAt(m_TargetedEnemy.transform.position); //if (Vector3.Dot(this.gameObject.transform.GetChild(1).transform.rotation.eulerAngles, dir) > 0.75f) float dot = Vector3.Dot(this.gameObject.transform.GetChild(1).transform.forward, dir); if (dot > 0.75) { if (TurretType != TURRET_TYPE.HEAVY) { dir = (m_TargetedEnemy.transform.position - this.gameObject.transform.GetChild(1).transform.position).normalized; GameObject go = Instantiate(ProjectilePrefab, this.gameObject.transform.GetChild(1).transform.position, lookRotation * Quaternion.Euler(90, 0, 0)) as GameObject; go.GetComponent <Rigidbody>().AddForce(dir * go.GetComponent <Projectile>().ProjectileSpeed, ForceMode.Impulse); go.GetComponent <Projectile>().Sender = this.gameObject; } else { // Fire 1st projectile dir = (m_TargetedEnemy.transform.position - this.gameObject.transform.GetChild(1).transform.GetChild(0).transform.position).normalized; GameObject go = Instantiate(ProjectilePrefab, this.gameObject.transform.GetChild(1).transform.GetChild(0).transform.position, lookRotation * Quaternion.Euler(90, 90, 90)) as GameObject; go.GetComponent <Rigidbody>().AddForce(dir * go.GetComponent <Projectile>().ProjectileSpeed, ForceMode.Impulse); go.GetComponent <Projectile>().Sender = this.gameObject; // Fire 2nd projectile dir = (m_TargetedEnemy.transform.position - this.gameObject.transform.GetChild(1).transform.GetChild(1).transform.position).normalized; go = Instantiate(ProjectilePrefab, this.gameObject.transform.GetChild(1).transform.GetChild(1).transform.position, lookRotation * Quaternion.Euler(90, 90, 90)) as GameObject; go.GetComponent <Rigidbody>().AddForce(dir * go.GetComponent <Projectile>().ProjectileSpeed, ForceMode.Impulse); go.GetComponent <Projectile>().Sender = this.gameObject; } } d_Timer = 0.0; } else { d_Timer += Time.deltaTime; } break; } }