Пример #1
0
    void movement()
    {
        float   dist = Vector3.Distance(player.transform.position, this.transform.position);
        Vector3 dir  = player.transform.position - transform.position;

        hit = Physics2D.Raycast(new Vector2(this.transform.position.x, this.transform.position.y), new Vector2(dir.x, dir.y), dist, layerMask);
        Debug.DrawRay(transform.position, dir, Color.red);

        Vector3 fwt = this.transform.TransformDirection(Vector3.right);

        RaycastHit2D hit2 = Physics2D.Raycast(new Vector2(this.transform.position.x, this.transform.position.y), new Vector2(fwt.x, fwt.y), 1.0f, layerMask);

        Debug.DrawRay(new Vector2(this.transform.position.x, this.transform.position.y), new Vector2(fwt.x, fwt.y), Color.cyan);

        if (moving == true)
        {
            if (hasGun == false)
            {
                transform.Translate(Vector3.right * speed * Time.deltaTime);
            }
            else
            {
                if (Vector3.Distance(this.transform.position, player.transform.position) < 5 && pursuingPlayer == true)
                {
                }
                else
                {
                    transform.Translate(Vector3.right * speed * Time.deltaTime);
                }
            }
        }


        if (patrol == true)
        {
            speed = 2.0f;

            if (hit2.collider != null)
            {
                if (hit2.collider.gameObject.tag == "Wall")
                {
                    if (clockwise == false)
                    {
                        transform.Rotate(0, 0, 90);
                    }
                    else
                    {
                        transform.Rotate(0, 0, -90);
                    }
                }
            }

            if (weaponToGoTo != null)
            {
                patrol        = false;
                goingToWeapon = true;
            }
        }

        if (pursuingPlayer == true)
        {
            speed = 3.5f;
            rid.transform.eulerAngles = new Vector3(0, 0, Mathf.Atan2((playerLastPos.y - transform.position.y), (playerLastPos.x - transform.position.x)) * Mathf.Rad2Deg);


            if (hit.collider.gameObject.tag == "Player")
            {
                playerLastPos = player.transform.position;
            }
        }

        if (goingToLastLoc == true)
        {
            speed = 3.0f;
            rid.transform.eulerAngles = new Vector3(0, 0, Mathf.Atan2((playerLastPos.y - transform.position.y), (playerLastPos.x - transform.position.x)) * Mathf.Rad2Deg);
            if (Vector3.Distance(this.transform.position, playerLastPos) < 1.5f)
            {
                patrol         = true;
                goingToLastLoc = false;
            }
        }
        if (goingToWeapon == true)
        {
            speed = 3.0f;
            rid.transform.eulerAngles = new Vector3(0, 0, Mathf.Atan2((weaponToGoTo.transform.position.y - transform.position.y), (weaponToGoTo.transform.position.x - transform.position.x)) * Mathf.Rad2Deg);

            if (ewc.getCur() != null)
            {
                weaponToGoTo   = null;
                patrol         = true;
                goingToWeapon  = false;
                pursuingPlayer = false;
                goingToLastLoc = false;
            }

            if (weaponToGoTo == null)
            {
                weaponToGoTo   = null;
                patrol         = true;
                goingToWeapon  = false;
                pursuingPlayer = false;
                goingToLastLoc = false;
            }
            else
            {
                if (weaponToGoTo.active == false)
                {
                    weaponToGoTo   = null;
                    patrol         = true;
                    goingToWeapon  = false;
                    pursuingPlayer = false;
                    goingToLastLoc = false;
                }
            }
        }
    }
    void movement()
    {
        float   dist = Vector3.Distance(player.transform.position, this.transform.position);
        Vector3 dir  = player.transform.position - transform.position;

        hit = Physics2D.Raycast(new Vector2(this.transform.position.x, this.transform.position.y), new Vector2(dir.x, dir.y), dist, layerMask);
        Debug.DrawRay(transform.position, dir, Color.red);

        Vector3 fwt = this.transform.TransformDirection(Vector3.right);

        RaycastHit2D hit2 = Physics2D.Raycast(new Vector2(this.transform.position.x, this.transform.position.y), new Vector2(fwt.x, fwt.y), 1.0f, layerMask);

        Debug.DrawRay(new Vector2(this.transform.position.x, this.transform.position.y), new Vector2(fwt.x, fwt.y), Color.cyan);

        if (moving == true)     //new for tut 7
        {
            if (hasGun == false)
            {
                transform.Translate(Vector3.right * speed * Time.deltaTime);
            }
            else
            {
                if (Vector3.Distance(this.transform.position, player.transform.position) < 5 && pursuingPlayer == true)                   //new enemy weapon

                {
                }
                else
                {
                    transform.Translate(Vector3.right * speed * Time.deltaTime);
                }
            }
        }


        if (patrol == true)
        {
            //Debug.Log ("Patrolling normally");
            speed = 2.0f;

            if (hit2.collider != null)
            {
                // Debug.LogError(hit2.collider.tag);
                if (hit2.collider.gameObject.tag == "Wall")
                {
                    //Quaternion rot = this.transform.rotation;

                    if (clockwise == false)
                    {
                        transform.Rotate(0, 0, 90);
                    }
                    else
                    {
                        transform.Rotate(0, 0, -90);
                    }
                }
            }

            if (weaponToGoTo != null)
            {
                patrol        = false;
                goingToWeapon = true;
            }
        }

        if (pursuingPlayer == true)
        {
            //transform.Translate(Vector3.right * speed * Time.deltaTime);
            //Debug.Log("Pursuing Player");
            speed = 3.5f;
            rid.transform.eulerAngles = new Vector3(0, 0, Mathf.Atan2((playerLastPos.y - transform.position.y), (playerLastPos.x - transform.position.x)) * Mathf.Rad2Deg);


            if (hit.collider.gameObject.tag == "Player")
            {
                playerLastPos = player.transform.position;
            }
        }

        if (goingToLastLoc == true)
        {
            //Debug.Log ("Checking last known player location");
            speed = 3.0f;
            //	transform.Translate(Vector3.right * 4 * Time.deltaTime);
            rid.transform.eulerAngles = new Vector3(0, 0, Mathf.Atan2((playerLastPos.y - transform.position.y), (playerLastPos.x - transform.position.x)) * Mathf.Rad2Deg);
            if (Vector3.Distance(this.transform.position, playerLastPos) < 1.5f)
            {
                //not found player, return to patrol
                patrol         = true;
                goingToLastLoc = false;
            }
        }
        //&& pursuingPlayer==false && goingToLastLoc==false && patrol==false
        if (goingToWeapon == true)
        {
            //Debug.Log("going weapon");
            speed = 3.0f;
            //	transform.Translate(Vector3d.right * 4 * Time.deltaTime);
            rid.transform.eulerAngles = new Vector3(0, 0, Mathf.Atan2((weaponToGoTo.transform.position.y - transform.position.y), (weaponToGoTo.transform.position.x - transform.position.x)) * Mathf.Rad2Deg);

            if (ewc.getCur() != null)
            {
                //not found player, return to patrol
                weaponToGoTo   = null;
                patrol         = true;
                goingToWeapon  = false;
                pursuingPlayer = false;
                goingToLastLoc = false;
            }

            if (weaponToGoTo == null)               //re wrote this to fix bugs
            {
                weaponToGoTo   = null;
                patrol         = true;
                goingToWeapon  = false;
                pursuingPlayer = false;
                goingToLastLoc = false;
            }
            else
            {
                if (weaponToGoTo.active == false)
                {
                    weaponToGoTo   = null;
                    patrol         = true;
                    goingToWeapon  = false;
                    pursuingPlayer = false;
                    goingToLastLoc = false;
                }
            }
        }
    }