Esempio n. 1
0
        void Awake()
        {
            goapEnemyAI = GetComponent <GoapEnemyAI>();
            if (goapEnemyAI == null)
            {
                Debug.Log("Must attach this to a valid GoapEnemyAI type");
            }

            opponentMe = GetComponent <OpponentComponent>();
        }
Esempio n. 2
0
 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();
 }
Esempio n. 3
0
        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);
        }