Ejemplo n.º 1
0
 public void Reset()
 {
     CurrentState = TURRET_STATE.IDLE;
     this.gameObject.GetComponent <Health>().Reset();
     m_TargetedEnemy = null;
 }
Ejemplo n.º 2
0
    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;
        }
    }