protected override IEnumerator Execute()
    {
        SetState(NodeState.RUNNING);

        itemsInView = senses.GetObjectsInView();

        // Look if we see the item
        for (int i = 0; i < itemsInView.Count; i++)
        {
            if (itemsInView[i] == itemToCheck)
            {
                SetState(NodeState.SUCCESS);
                yield break;
            }
        }

        SetState(NodeState.FAILURE);

        yield return(null);
    }
示例#2
0
    public int ChooseRandomAction()
    {
        int chosenAction = 0;

        do
        {
            List <GameObject> objectsInView = _agentSenses.GetObjectsInView();
            int action = Random.Range(0, 6) + 1;
            switch (action)
            {
            case 1:
                // Do we have the enemy flag
                if (!_agentData.HasEnemyFlag)
                {
                    chosenAction = 1;
                }
                break;

            case 2:
                if (_agentData.HasEnemyFlag)
                {
                    chosenAction = 2;
                }
                break;

            case 3:
                for (int i = 0; i < objectsInView.Count; i++)
                {
                    if (objectsInView[i].name == Names.HealthKit)
                    {
                        if (!_agentInventory.HasItem(Names.HealthKit))
                        {
                            chosenAction = 3;
                        }
                    }
                }
                break;

            case 4:
                for (int i = 0; i < objectsInView.Count; i++)
                {
                    if (objectsInView[i].name == Names.PowerUp)
                    {
                        if (!_agentInventory.HasItem(Names.PowerUp))
                        {
                            chosenAction = 4;
                        }
                    }
                }
                break;

            case 5:
                chosenAction = 5;
                break;

            case 6:
                for (int i = 0; i < objectsInView.Count; i++)
                {
                    if (objectsInView[i].name == Names.BlueFlag)
                    {
                        if (this.tag == Tags.BlueTeam)
                        {
                            chosenAction = 6;
                        }
                    }
                    else if (objectsInView[i].name == Names.RedFlag)
                    {
                        if (this.tag == Tags.RedTeam)
                        {
                            chosenAction = 6;
                        }
                    }
                }
                break;

            default:
                break;
            }
        } while (chosenAction == 0);
        return(chosenAction);
    }