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); }
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); }