예제 #1
0
    void Update() //Update is called once per frame
    {
        if (FinalPath.Count > 0)
        {
            foreach (var item in FinalPath)
            {
                Debug.DrawLine(item.transform.position + GetExtents(item), transform.position, Color.red, 2);
            }
        }
        switch (CurrentEnemyID) //unique functions per enemy type
        {
        case EnemyID.Bonus:
            transform.Rotate(Vector3.right * UnityEngine.Random.value * 5);
            gameObject.GetComponent <Renderer>().material.color = Color.Lerp(Color.yellow, Color.black, Mathf.PingPong(Time.time, 1));    //Color pulsing
            StandardMovement();
            break;

        case EnemyID.Charger:
            StandardMovement();
            break;

        case EnemyID.Regenerator:
            gameObject.GetComponent <Renderer>().material.color = Color.Lerp(new Color32(250, 128, 114, 255), new Color32(0, 128, 0, 255), Mathf.PingPong(Time.time, 1.5f));
            StandardMovement();
            break;

        case EnemyID.Phasing:
            Color col = GetComponent <Renderer>().material.color;
            GetComponent <Renderer>().material.color = new Color(col.r, col.g, col.b, Mathf.PingPong(Time.time / 4, 1));
            StandardMovement();
            break;

        case EnemyID.Support:
            if (GameObject.Find("EnemyController").transform.childCount > 2)
            {
                float tempDist = 999999;
                foreach (Transform enemy in GameObject.Find("EnemyController").transform)
                {
                    if (enemy.name != "FragmentEncapsulation" && enemy.name != "Support" && Vector3.Distance(gameObject.transform.position, enemy.position) <= tempDist && enemy.GetComponent <EnemyFunction>().CurrentHP + 2 <= enemy.GetComponent <EnemyFunction>().MaxHP)
                    {
                        tempDist = Vector3.Distance(gameObject.transform.position, enemy.position);
                        Ally     = enemy.gameObject;
                    }
                }
            }
            else
            {
                Ally = gameObject;
            }
            if (Ally = gameObject)
            {
                StandardMovement();
            }
            else
            {
                GetComponent <Rigidbody>().velocity = ((Ally.transform.position - Vector3.back) - transform.position).normalized * MoveSpeed;
            }
            break;

        case EnemyID.Resurrecting:
            Collider GOCollider = GetComponent <Collider>();
            GOCollider.enabled            = false;
            gameObject.transform.position = new Vector3(ResPos.x, Mathf.Lerp((ResPos + (Vector3.down * 30)).y, ResPos.y, Time.time / 20), ResPos.z);
            if (gameObject.transform.position.y >= ResPos.y)
            {
                CurrentEnemyID     = EnemyID.Default;
                GOCollider.enabled = true;
                gameObject.GetComponent <Rigidbody>().constraints = RigidbodyConstraints.FreezeRotationX | RigidbodyConstraints.FreezeRotationY | RigidbodyConstraints.FreezeRotationZ | RigidbodyConstraints.FreezeRotationY;
            }
            break;

        default:
            StandardMovement();
            break;
        }
        if (Input.GetMouseButtonDown(0))
        {
            RaycastHit hit; //Ray stuff for damage text popups
            if ((Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out hit)))
            {
                if (hit.transform == transform) //Is the ray hitting this transform?
                {
                    if (UnityEngine.Random.Range(0, 20) <= 1)
                    {
                        AudioSource.PlayClipAtPoint(DamageSound, maincamera.transform.position, 0.03f);
                    }
                    DamageDealt = GameManagerStuff.Damage;
                    CurrentHP  += (DamageDealt / ArmourVal) * GameManagerStuff.ArmourPiercingPC;
                    GameManager.DisplayValue((DamageDealt / ArmourVal) * GameManagerStuff.ArmourPiercingPC, gameObject.transform.position);
                    GameManager.FragmentEnemy(gameObject, 1, 1);
                    GameManagerStuff.Currency += GameManagerStuff.Bonus;
                    if (CurrentEnemyID == EnemyID.Teleport)
                    {
                        Teleport(gameObject);
                    }
                }
            }
        }
        if (CurrentHP <= 0)
        {
            AudioSource.PlayClipAtPoint(DeathSound, maincamera.transform.position, 0.03f);
            if (CurrentEnemyID == EnemyID.Mother)
            {
                ESp.SpawnBaddie(EnemyID.Child, transform.position + Vector3.right * 5);
                ESp.SpawnBaddie(EnemyID.Child, transform.position + Vector3.left * 5);
                Destroy(killzonepathing);
                Destroy(gameObject);
            }
            else if (CurrentEnemyID == EnemyID.Undead)
            {
                ResPos         = gameObject.transform.position;
                CurrentHP      = MaxHP;
                CurrentEnemyID = EnemyID.Resurrecting;
                gameObject.GetComponent <Rigidbody>().constraints = RigidbodyConstraints.FreezeRotationX | RigidbodyConstraints.FreezeRotationY | RigidbodyConstraints.FreezeRotationZ;
                GetComponent <Renderer>().material.color          = new Color32(152, 251, 152, 255);
                GameManager.FragmentEnemy(gameObject, 10, 15);
            }
            else
            {
                GameManager.FragmentEnemy(gameObject, 10, 15);
                GameManagerStuff.EnemiesKilled++;
                Destroy(killzonepathing);
                Destroy(gameObject);
            }
            GameManagerStuff.Currency += EnemyValue;
        }
    }