Exemple #1
0
    public override TASK_RETURN_STATUS Run(Survivor_AI sAI)
    {
        TASK_RETURN_STATUS output = TASK_RETURN_STATUS.FAILED;

        Blackboard bb = sAI.GetBlackboard();

        if (bb.enemyTarget != null)
        {
            if (bb.enemyTarget.getEnemyType() == EnemyType.HELLEPHANT || bb.enemyTarget.getEnemyType() == EnemyType.ZOMBEAR)
            {
                Vector3 dir             = bb.enemyTarget.transform.position - sAI.transform.position;
                float   distFromCrystal = (Vector3.zero - sAI.transform.position).magnitude;
                float   dist            = dir.magnitude;
                if (dist > 5.0f && distFromCrystal < 50.0f)
                {
                    UnityEngine.AI.NavMeshAgent agent = sAI.GetComponent <UnityEngine.AI.NavMeshAgent>();

                    agent.destination = bb.enemyTarget.transform.position;

                    output = TASK_RETURN_STATUS.SUCCEED;
                }
            }
        }


        return(output);
    }
Exemple #2
0
    public override TASK_RETURN_STATUS Run(Survivor_AI sAI)
    {
        Blackboard bb = sAI.GetBlackboard();

        if (GameManager.GetCurrentWaveNumber() > 4 && GameManager.GetCurrentGold() > 150)
        {
            if (bb.ne == null)
            {
                bb.ne = new Tower();
                GameManager.PurchaseTower(TOWER_TYPE.BULLET_TOWER, TOWER_POSITION.NORTHEAST);
            }
            else if (bb.nw == null)
            {
                bb.nw = new Tower();
                GameManager.PurchaseTower(TOWER_TYPE.BULLET_TOWER, TOWER_POSITION.NORTHWEST);
            }
            else if (bb.se == null)
            {
                bb.se = new Tower();
                GameManager.PurchaseTower(TOWER_TYPE.BULLET_TOWER, TOWER_POSITION.NORTHEAST);
            }
            else
            {
                GameManager.PurchaseTower(TOWER_TYPE.BULLET_TOWER, TOWER_POSITION.NORTHEAST);
                bb.sw = new Tower();
            }
        }
        return(TASK_RETURN_STATUS.SUCCEED);
    }
    bool isTargetVisible(Survivor_AI sAI, Enemy e)
    {
        bool output = false;

        if (e != null)
        {
            Survivor   survivor = sAI.GetSurvivor();
            RaycastHit hit;

            Vector3 offset = (Vector3.up * 0.5f);

            Vector3 dir = e.transform.position - survivor.transform.position;
            dir += offset;

            dir.Normalize();

            int layerMask = 1 << LayerMask.NameToLayer("Player");
            layerMask = ~layerMask;

            if (Physics.Raycast(survivor.transform.position + offset, dir, out hit, 1000.0f, layerMask))
            {
                if (hit.collider.gameObject.layer == LayerMask.NameToLayer("Enemy"))
                {
                    //if (hit.collider.gameObject.GetInstanceID () == e.gameObject.GetInstanceID ())
                    //{
                    output = true;
                    //}
                }
            }
        }
        return(output);
    }
Exemple #4
0
    public override TASK_RETURN_STATUS Run(Survivor_AI sAI)
    {
        TASK_RETURN_STATUS output = TASK_RETURN_STATUS.FAILED;

        Blackboard bb   = sAI.GetBlackboard();
        float      dist = (sAI.transform.position - bb.moveToPosition).magnitude;

        if (dist > 1.0f)
        {
            UnityEngine.AI.NavMeshAgent agent = sAI.GetComponent <UnityEngine.AI.NavMeshAgent>();
            agent.destination = bb.moveToPosition;

            output = TASK_RETURN_STATUS.FAILED;
        }
        else
        {
            bb.nodesForAStar.Remove(bb.currNodeToGetTo);
            if (bb.nodesForAStar.Count > 0)
            {
                bb.currNodeToGetTo = bb.nodesForAStar[0];
                bb.moveToPosition  = bb.currNodeToGetTo.transform.position;
            }
            output = TASK_RETURN_STATUS.SUCCEED;
        }

        return(output);
    }
Exemple #5
0
    Enemy FindClosestHellephantTarget(Survivor_AI sAI)
    {
        Enemy target = null;

        float closestSoFar = Mathf.Infinity;
        //int worst = 0;

        List <Enemy> allEnemies = GameManager.getHellephantList();

        foreach (Enemy e in allEnemies)
        {
            if (e.getState() != EnemyState.DEAD)
            {
                float dist = (e.transform.position - sAI.transform.position).magnitude;
                if (dist < closestSoFar)
                {
                    target       = e;
                    closestSoFar = dist;
                    sAI.GetBlackboard().distFromTarget = closestSoFar;
                }
            }
        }


        return(target);
    }
Exemple #6
0
    void SearchForFireballs()
    {
        if (fireballs.Length > 0)
        {
            foreach (Fireball f in fireballs)
            {
                float range = 1.0f;

                Survivor_AI sAI = FindClosestSurvivorToFireBall(f);

                float distance = Vector3.Distance(sAI.GetSurvivor().transform.position, f.transform.position);

                if (distance < range)
                {
                    ResetSurvivorsBT();

                    sAI.GetBlackBoard().incomingFireball = f;

                    sAI.GetBlackBoard().currentSurvivorPosition = sAI.GetSurvivor().transform.position;

                    Task BT_Evade_Fireball = new Sequence_EvadeFireballs();

                    sAI.SetBehaviorTree(BT_Evade_Fireball);
                }
            }
        }
    }
Exemple #7
0
    Enemy FindPriorityTarget(Survivor_AI sAI)
    {
        Enemy result = null;

        List <Enemy> bunniesList     = GameManager.getZomBunnyList();
        List <Enemy> hellephantsList = GameManager.getHellephantList();
        List <Enemy> clownsList      = GameManager.getClownList();

        if (bunniesList.Count > 0)
        {
            result = FindClosestBunny(sAI, bunniesList);
        }

        if (clownsList.Count > 0 && bunniesList.Count == 0)
        {
            result = FindClosestClown(sAI, clownsList);
        }

        if (hellephantsList.Count > 0 && bunniesList.Count == 0)
        {
            result = FindClosestHellephant(sAI, hellephantsList);
        }

        return(result);
    }
Exemple #8
0
    void SurvivorFlee()
    {
        List <Enemy> enemies = GameManager.getAllEnemies();

        if (enemies.Count > 0)
        {
            foreach (Enemy e in enemies)
            {
                float range = 5.0f;

                Survivor_AI sAI = FindClosestSurvivorToTarget(e);

                float distance = Vector3.Distance(sAI.GetSurvivor().transform.position, e.transform.position);

                if (distance < range)
                {
                    ResetSurvivorsBT();

                    Task BT_Flee_Zombie = new Sequence_FleeZombie();

                    sAI.GetBlackBoard().target = e;

                    sAI.GetBlackBoard().currentSurvivorPosition = sAI.GetSurvivor().transform.position;

                    sAI.SetBehaviorTree(BT_Flee_Zombie);
                }
            }
        }
    }
Exemple #9
0
    Enemy FindClosestBunny(Survivor_AI sAI, List <Enemy> bunnies)
    {
        Enemy output       = null;
        float closestSoFar = Mathf.Infinity;

        for (int i = 0; i < bunnies.Count; i++)
        {
            Enemy e = bunnies[i];

            if (e.getState() != EnemyState.DEAD)
            {
                float dist = (e.transform.position - sAI.GetSurvivor().transform.position).magnitude;
                if (dist < closestSoFar && dist < sAI.GetSurvivor().currentWeapon.getRange())
                {
                    output       = e;
                    closestSoFar = dist;
                }
            }
        }
        if (output != null)   //Debug.Log("Survivor " + sAI.GetSurvivor().name +
                              //" is Targeting enemy position " + output.transform.position
        {
        }
        return(output);
    }
Exemple #10
0
    public override TASK_RETURN_STATUS Run(Survivor_AI sAI)
    {
        TASK_RETURN_STATUS output = TASK_RETURN_STATUS.FAILED;

        Blackboard bb = sAI.GetBlackboard();

        if (bb.enemyTarget != null)
        {
            Vector3 dir = sAI.transform.position - bb.enemyTarget.gameObject.transform.position;

            float dist = dir.magnitude;
            if (dist < 5.0f)
            {
                //dir.Normalize();

                dir += sAI.transform.position;
                UnityEngine.AI.NavMeshAgent agent = sAI.GetComponent <UnityEngine.AI.NavMeshAgent>();
                agent.destination = dir;

                //sAI.transform.position += dir;

                output = TASK_RETURN_STATUS.SUCCEED;
            }
        }
        return(output);
    }
Exemple #11
0
    public override TASK_RETURN_STATUS Run(Survivor_AI sAI)
    {
        //run A*
        TASK_RETURN_STATUS output = TASK_RETURN_STATUS.FAILED;

        Blackboard bb = sAI.GetBlackboard();


        if (bb.nodesForAStar.Count <= 0)
        {
            GameObject go       = GameObject.FindGameObjectWithTag("AStar");
            AStarObj   aStarObj = go.GetComponent <AStarObj>();
            //AStarObj aStarObj = GameObject.FindGameObjectWithTag("AStar").GetComponent<AStarObj>(); //new AStarObj();
            aStarObj.RunThroughPath(sAI, bb.startNode, bb.goalNode);
            if (bb.nodesForAStar.Count > 0)
            {
                output             = TASK_RETURN_STATUS.SUCCEED;
                bb.currNodeToGetTo = bb.nodesForAStar[0];
                bb.moveToPosition  = bb.currNodeToGetTo.transform.position;
            }
        }
        else
        {
            output = TASK_RETURN_STATUS.SUCCEED;
        }

        return(output);
    }
Exemple #12
0
    Enemy FindClosestBunnyTarget(Survivor_AI sAI)
    {
        Enemy target = null;

        float closestSoFar = Mathf.Infinity;
        int   worst        = 0;

        List <Enemy> allEnemies = GameManager.getZomBunnyList();

        foreach (Enemy e in allEnemies)
        {
            if (e.getState() != EnemyState.DEAD)
            {
                float dist = (e.transform.position - sAI.transform.position).magnitude;
                if (dist < closestSoFar && dist < sAI.GetCurrWeapon().getRange())
                {
                    target       = e;
                    closestSoFar = dist;
                }
            }
        }


        return(target);
    }
Exemple #13
0
 public void MoveSurvivorBack(Survivor_AI sAI)
 {
     sAI.GetSurvivor().MoveTo(sAI.GetCurrDefensePoint().transform.position);
     sAI.mvmtTracker  = Moving.NOT_MOVING_ON_ASTAR;
     SearchingForLoot = false;
     Invoke("SearchForLoot", 20.0f);
 }
Exemple #14
0
    public override TASK_RETURN_STATUS Run(Survivor_AI sAI)
    {
        Gate north = GameManager.GetGate(GATE_POSITION.NORTH);
        Gate east  = GameManager.GetGate(GATE_POSITION.EAST);
        Gate south = GameManager.GetGate(GATE_POSITION.SOUTH);
        Gate west  = GameManager.GetGate(GATE_POSITION.WEST);


        if (north.GetHealth() <= 0)
        {
            GameManager.RepairGate(GATE_POSITION.NORTH);
        }

        if (east.GetHealth() <= 0)
        {
            GameManager.RepairGate(GATE_POSITION.EAST);
        }

        if (south.GetHealth() <= 0)
        {
            GameManager.RepairGate(GATE_POSITION.SOUTH);
        }

        if (west.GetHealth() <= 0)
        {
            GameManager.RepairGate(GATE_POSITION.WEST);
        }


        return(TASK_RETURN_STATUS.SUCCEED);
    }
Exemple #15
0
    public override TASK_RETURN_STATUS Run(Survivor_AI sAI)
    {
        TASK_RETURN_STATUS output = TASK_RETURN_STATUS.SUCCESS;

        Debug.Log("Testing");

        return(output);
    }
Exemple #16
0
    public override TASK_RETURN_STATUS Run(Survivor_AI sAI)
    {
        hivemind.UpdateDefensePoints();

        base.Run(sAI);

        return(TASK_RETURN_STATUS.SUCCEED);
    }
Exemple #17
0
    public override TASK_RETURN_STATUS Run(Survivor_AI sAI)
    {
        sAI.SetMvmtTree(MOVEMENT_TREE.DEFAULT);
        sAI.GetHiveRef().MoveSurvivorBack(sAI);
        //sAI.GetSurvivor().MoveTo(sAI.GetCurrDefensePoint().transform.position);

        return(TASK_RETURN_STATUS.SUCCEED);
    }
Exemple #18
0
    public override TASK_RETURN_STATUS Run(Survivor_AI sAI)
    {
        TASK_RETURN_STATUS output = TASK_RETURN_STATUS.SUCCESS;

        sAI.GetSurvivor().SwitchWeapons(WEAPON_TYPE.PISTOL);

        return(output);
    }
    public override TASK_RETURN_STATUS Run(Survivor_AI sAI)
    {
        TASK_RETURN_STATUS output = TASK_RETURN_STATUS.SUCCESS;

        FindPath(sAI, sAI.GetSurvivor().transform.position, targetPoint);


        return(output);
    }
Exemple #20
0
    public override TASK_RETURN_STATUS Run(Survivor_AI sAI)
    {
        while (GameManager.GetCurrentGold() >= 10) //40)
        {
            GameManager.PurchaseAmmo(WEAPON_TYPE.ASSAULT);
        }

        return(TASK_RETURN_STATUS.SUCCEED);
    }
    Collider[] FindEnemiesInRange(Survivor_AI sAI)
    {
        int mask = 1 << LayerMask.NameToLayer("Enemy");

        Collider[] cols = Physics.OverlapSphere(sAI.transform.position, sAI.enemySearchRadius, mask);


        return(cols);
    }
Exemple #22
0
    float GetDistFromTarget(Enemy e, Survivor_AI sAI)
    {
        float dist;

        Vector3 dtt = e.gameObject.transform.position - sAI.gameObject.transform.position;

        dist = dtt.magnitude;

        return(dist);
    }
Exemple #23
0
    public override TASK_RETURN_STATUS Run(Survivor_AI sAI)
    {
        TASK_RETURN_STATUS output = TASK_RETURN_STATUS.FAILED;

        Blackboard bb = sAI.GetBlackboard();

        bb.distFromTarget = GetDistFromTarget(bb.enemyTarget, sAI);
        output            = TASK_RETURN_STATUS.SUCCEED;

        return(output);
    }
Exemple #24
0
    public override TASK_RETURN_STATUS Run(Survivor_AI sAI)
    {
        TASK_RETURN_STATUS output = TASK_RETURN_STATUS.FAILED;

        if (GameManager.getAllEnemies().Count > 4)
        {
            output = TASK_RETURN_STATUS.SUCCEED;
        }

        return(output);
    }
    public override TASK_RETURN_STATUS Run(Survivor_AI sAI)
    {
        for (int i = 0; i < children.Count; i++)
        {
            Task child = children[i];

            child.Run(sAI);
        }

        return(TASK_RETURN_STATUS.SUCCESS);
    }
Exemple #26
0
    void SpendGold()
    {
        if (GameManager.GetBreakTimeRemaining() > 0)
        {
            // let the first survivor on list make the purchasing decesions
            Survivor_AI sAI = survivorAIs[0];

            ResetSurvivorsBT(); // reset before making purchases
            sAI.SetBehaviorTree(new Sequence_SpendGold());
        }
    }
Exemple #27
0
    public override TASK_RETURN_STATUS Run(Survivor_AI sAI)
    {
        TASK_RETURN_STATUS output = TASK_RETURN_STATUS.FAILED;

        if (sAI.GetBlackboard().nodesForAStar.Count <= 0)
        {
            output = TASK_RETURN_STATUS.SUCCEED;
        }

        return(output);
    }
Exemple #28
0
    public override TASK_RETURN_STATUS Run(Survivor_AI sAI)
    {
        TASK_RETURN_STATUS output = TASK_RETURN_STATUS.FAILURE;

        if (enemyTarget.getState() == EnemyState.NORMAL)
        {
            sAI.GetBlackBoard().target = enemyTarget;
            output = TASK_RETURN_STATUS.SUCCESS;
        }
        return(output);
    }
Exemple #29
0
 public override TASK_RETURN_STATUS Run(Survivor_AI sAI)
 {
     if (sAI.GetSurvivor().GetWeapon(WEAPON_TYPE.SHOTGUN).getAmmo() < 10)
     {
         //while (GameManager.GetCurrentGold() >= 25)
         //{
         GameManager.PurchaseAmmo(WEAPON_TYPE.SHOTGUN);
         GameManager.PurchaseAmmo(WEAPON_TYPE.SHOTGUN);
         //}
     }
     return(TASK_RETURN_STATUS.SUCCEED);
 }
Exemple #30
0
    public override TASK_RETURN_STATUS Run(Survivor_AI sAI)
    {
        TASK_RETURN_STATUS output = TASK_RETURN_STATUS.FAILURE;

        if(GameManager.GetBreakTimeRemaining() > 0)
        {
            SpendGoldOnAmmo();

            output = TASK_RETURN_STATUS.SUCCESS;
        }

        return output;

    }