void Awake() { goapEnemyAI = GetComponent <GoapEnemyAI>(); if (goapEnemyAI == null) { Debug.Log("Must attach this to a valid GoapEnemyAI type"); } opponentMe = GetComponent <OpponentComponent>(); }
void Start() { gameObject.AddComponent <GoapAgent>(); anim = GetComponent <Animator>(); navAgent = GetComponent <NavMeshAgent>(); backpack = GetComponent <BackpackComponent>(); // Don’t update position automatically path = new NavMeshPath(); navAgent.updatePosition = false; opponentMe = GetComponent <OpponentComponent>(); FindOpponents(); }
public override bool checkProceduralPrecondition(GameObject agent) { opponentTarget = null; // find the nearest OpponentComponent that is still standing OpponentComponent[] allOpponents = (OpponentComponent[]) GameObject.FindObjectsOfType(typeof(OpponentComponent)); OpponentComponent closest = null; float closestDist = 0; float dist = 0f; foreach (OpponentComponent _opponentComponent in allOpponents) { if (agent.name == _opponentComponent.gameObject.name) { continue; // dont attack self } // if (_opponentComponent.IamUnderFire != null && _opponentComponent.IamUnderFire != agent) continue; // dont attack if already engaed if (_opponentComponent.Health <= 0) { continue; // dont attack dead guy } bool pathFound = NavMeshHelper.NavMeshTools.GetPath(goapEnemyAI.path, agent.transform.position, _opponentComponent.gameObject.transform.position, NavMesh.AllAreas); if (!pathFound) { continue; // no path to it! } dist = NavMeshHelper.NavMeshTools.GetPathLength(goapEnemyAI.path); if (dist > 20f) { continue; // too far away to attack } if (closest == null) { // first one, so choose it for now closest = _opponentComponent; closestDist = dist; } else { // is this one closer than the last? if (dist < closestDist) { // we found a closer one, use it closest = _opponentComponent; closestDist = dist; } } } if (closest == null) { // Debug.Log("<color=red>NO TARGET:</color> " + agent.gameObject.name); return(false); } //startTime = 0; opponentTarget = closest; opponentTarget.IamUnderFire = agent; target = closest.gameObject; targetPosition = target.transform.position; return(true); }