예제 #1
0
 void RandomMove()
 {
     //Let's go.... THIS WAY
     currentDirection = Random.Range(0, 360);
     currentVelocity  = speed;
     AIController     = AIStart;
 }
예제 #2
0
    void AlliesClose()
    {
        bool allyNear = false;

        GameObject[] enemyList = GameObject.FindGameObjectsWithTag("Enemy");
        foreach (GameObject g in enemyList)
        {
            if (g != gameObject)
            {
                float allyDist = Vector3.Distance(g.gameObject.transform.position, gameObject.transform.position);
                if (allyDist < friendlyRange)
                {
                    allyNear = true;
                }
            }
        }
        //Yes, Attack
        if (allyNear)
        {
            AIController = Attack;
        }

        //No, is HP low?
        else
        {
            AIController = HPLow;
        }
    }
예제 #3
0
 void MoveToSpawn()
 {
     //E.T. Goooooo Hooooooome
     rot = Mathf.Atan2((spawn.y - rb2d.transform.position.y), (spawn.x - transform.position.x)) * Mathf.Rad2Deg - 90;
     currentDirection = rot;
     currentVelocity  = speed;
     AIController     = AIStart;
 }
예제 #4
0
 void Retreat()
 {
     //RUN AWAAAAAAAAAAAAAAAAAAY
     if (player != null)
     {
         rot = Mathf.Atan2((player.transform.position.y - transform.position.y), (player.transform.position.x - transform.position.x)) * Mathf.Rad2Deg + 90;
     }
     currentDirection = rot;
     currentVelocity  = speed;
     AIController     = AIStart;
 }
예제 #5
0
    void Attack()
    {
        //CHAAAAAAAAAAAAAAAARGE
        if (player != null)
        {
            rot = Mathf.Atan2((player.transform.position.y - transform.position.y), (player.transform.position.x - transform.position.x)) * Mathf.Rad2Deg - 90;
        }

        currentDirection = rot;
        currentVelocity  = speed;
        AIController     = AIStart;
    }
예제 #6
0
    void HPLow()
    {
        //Yes, Run away
        if (hp <= HPThreshold)
        {
            AIController = Retreat;
        }

        //No, Attack
        else
        {
            AIController = Attack;
        }
    }
예제 #7
0
    void RandomIdle()
    {
        //Move in a random direction
        if (Random.value >= 0.5f)
        {
            AIController = RandomMove;
        }

        //Or Sit still
        else
        {
            AIController = Idle;
        }
    }
예제 #8
0
    void FarFromSpawn()
    {
        //Yes, move to Spawn
        if (spawnDist > spawnTetherRange)
        {
            AIController = MoveToSpawn;
        }

        //No? Random Idle
        else
        {
            AIController = RandomIdle;
        }
    }
예제 #9
0
    void PlayerInAggroRange()
    {
        //Yes, Check if Allies are near
        if (playerDist < aggroRange)
        {
            AIController = AlliesClose;
        }

        //No, is HP low?
        else
        {
            AIController = HPLow;
        }
    }
예제 #10
0
    void PlayerInThreatZone()
    {
        //Yes, check if in Aggro range
        if (playerDist < threatRange)
        {
            AIController = PlayerInAggroRange;
        }

        //No, Check if too Far from spawn
        else
        {
            AIController = FarFromSpawn;
        }
    }
예제 #11
0
    void Start()
    {
        rb2d         = gameObject.GetComponent <Rigidbody2D>();
        anim         = GetComponent <Animator>();
        spawn        = gameObject.transform.position;
        AIController = PlayerInThreatZone;

        InvokeRepeating("Tick", 0, 0.1f);

        if (GameObject.FindGameObjectWithTag("Player") == null)
        {
            player = gameObject.transform;
        }
        else
        {
            player     = GameObject.FindGameObjectWithTag("Player").transform;
            playerDist = Vector3.Distance(gameObject.transform.position, player.transform.position);
        }
        spawnDist = Vector3.Distance(gameObject.transform.position, spawn);
    }
예제 #12
0
 void Idle()
 {
     //Zzzzzz
     currentVelocity = 0;
     AIController    = AIStart;
 }
예제 #13
0
 void AIStart()
 {
     //Start of our descision Tree
     AIController = PlayerInThreatZone;
 }