Example #1
0
        //If a target is noticed, it is prioritized
        void NoticeATarget(ParagonAI.Target newTarget)
        {
            int IDToAdd = newTarget.uniqueIdentifier;

            //Make sure we haven't seen this target already
            for (int i = 0; i < targetIDs.Count; i++)
            {
                if (targetIDs[i] == IDToAdd)
                {
                    return;
                }
            }

            lastKnownTargetPositions.Add(newTarget.transform.position);
            listOfCurrentlyNoticedTargets.Add(newTarget);
            targetIDs.Add(IDToAdd);

            ChooseTarget();

            //If we aren't already engaging in combat, start engaging.
            if (!engaging)
            {
                myAIBaseScript.StartEngage();
                engaging = true;
            }
        }
Example #2
0
 //Add a TargetScript to the game
 //Without this, agents wouldn't be able to find a target
 public int AddTarget(int id, Transform transformToAdd, ParagonAI.TargetScript script)
 {
     currentID++;
     ParagonAI.Target agentToAdd = new ParagonAI.Target(currentID, id, transformToAdd, script);
     currentTargets.Add(agentToAdd);
     UpdateAllEnemiesEnemyLists();
     return(currentID);
 }
Example #3
0
 //Add a TargetScript to the game
 //Without this, agents wouldn't be able to find a target
 public int AddTarget(int id, Transform transformToAdd, ParagonAI.TargetScript script)
 {
     currentID++;
     ParagonAI.Target agentToAdd = new ParagonAI.Target(currentID, id, transformToAdd, script);
     currentTargets.Add(agentToAdd);
     UpdateAllEnemiesEnemyLists();
     return currentID;
 }
Example #4
0
        void ChooseTarget()
        {
            if (eyeTransform)
            {
                float     currentEnemyScore         = 0;
                float     enemyScoreCheckingNow     = 0;
                Transform enemyTransformCheckingNow = eyeTransform;
                currentEnemyTarget = null;
                bool foundTargetWithLoS = false;
                int  i = 0;

                CheckIfWeStillHaveAwareness();

                for (i = 0; i < listOfCurrentlyNoticedTargets.Count; i++)
                {
                    if (listOfCurrentlyNoticedTargets[i].transform)
                    {
                        enemyTransformCheckingNow = listOfCurrentlyNoticedTargets[i].transform;

                        //Only add points if we have LoS
                        if (!Physics.Linecast(eyeTransform.position, enemyTransformCheckingNow.position, layerMask))
                        {
                            //Get initial score based on distance
                            enemyScoreCheckingNow = Vector3.SqrMagnitude(enemyTransformCheckingNow.position - targetObjectTransform.position);
                            //enemyScoreCheckingNow = Vector3.Distance(enemyTransformCheckingNow.position, targetObjectTransform.position);

                            //Divide by priority
                            enemyScoreCheckingNow = enemyScoreCheckingNow / (listOfCurrentlyNoticedTargets[i].targetScript.GetComponent <ParagonAI.TargetScript>().targetPriority);

                            //See if this score is low enough to warrent changing target
                            if (enemyScoreCheckingNow < currentEnemyScore || currentEnemyScore == 0 || !foundTargetWithLoS)
                            {
                                currentEnemyTarget = listOfCurrentlyNoticedTargets[i];
                                currentEnemyScore  = enemyScoreCheckingNow;
                                foundTargetWithLoS = true;
                            }
                        }
                        //Settle for targets we can't see, if we have to.
                        else if (!foundTargetWithLoS)
                        {
                            enemyScoreCheckingNow = Vector3.SqrMagnitude(enemyTransformCheckingNow.position - targetObjectTransform.position);
                            if (enemyScoreCheckingNow < currentEnemyScore || currentEnemyScore < 0 || !foundTargetWithLoS)
                            {
                                currentEnemyTarget = listOfCurrentlyNoticedTargets[i];
                                currentEnemyScore  = enemyScoreCheckingNow;
                            }
                        }
                    }
                }

                if (currentEnemyTarget != null)
                {
                    AlertAlliesOfEnemy_Shout();
                }

                //If all of the above fails, pick a random target- even if it's one we haven't seen
                if (currentEnemyTarget == null && enemyTargets.Length > 0)
                {
                    currentEnemyTarget = enemyTargets[Random.Range(0, enemyTargets.Length - 1)];
                }

                if (currentEnemyTarget != null)
                {
                    myAIBaseScript.SetMyTarget(currentEnemyTarget.transform, currentEnemyTarget.targetScript.myLOSTarget);
                }
                if (currentEnemyTarget == null)

                {
                    myAIBaseScript.RemoveMyTarget();
                }
            }
        }
Example #5
0
        void ChooseTarget()
        {
            if (eyeTransform)
            {
                float currentEnemyScore = 0;
                float enemyScoreCheckingNow = 0;
                Transform enemyTransformCheckingNow = eyeTransform;
                currentEnemyTarget = null;
                bool foundTargetWithLoS = false;
                int i = 0;

                CheckIfWeStillHaveAwareness();

                for (i = 0; i < listOfCurrentlyNoticedTargets.Count; i++)
                {
                    if (listOfCurrentlyNoticedTargets[i].transform)
                    {
                        enemyTransformCheckingNow = listOfCurrentlyNoticedTargets[i].transform;

                        //Only add points if we have LoS
                        if (!Physics.Linecast(eyeTransform.position, enemyTransformCheckingNow.position, layerMask))
                        {
                            //Get initial score based on distance
                            enemyScoreCheckingNow = Vector3.SqrMagnitude(enemyTransformCheckingNow.position - targetObjectTransform.position);
                            //enemyScoreCheckingNow = Vector3.Distance(enemyTransformCheckingNow.position, targetObjectTransform.position);

                            //Divide by priority
                            enemyScoreCheckingNow = enemyScoreCheckingNow / (listOfCurrentlyNoticedTargets[i].targetScript.GetComponent<ParagonAI.TargetScript>().targetPriority);

                            //See if this score is low enough to warrent changing target
                            if (enemyScoreCheckingNow < currentEnemyScore || currentEnemyScore == 0 || !foundTargetWithLoS)
                            {
                                currentEnemyTarget = listOfCurrentlyNoticedTargets[i];
                                currentEnemyScore = enemyScoreCheckingNow;
                                foundTargetWithLoS = true;
                            }
                        }
                        //Settle for targets we can't see, if we have to.
                        else if (!foundTargetWithLoS)
                        {
                            enemyScoreCheckingNow = Vector3.SqrMagnitude(enemyTransformCheckingNow.position - targetObjectTransform.position);
                            if (enemyScoreCheckingNow < currentEnemyScore || currentEnemyScore < 0 || !foundTargetWithLoS)
                            {
                                currentEnemyTarget = listOfCurrentlyNoticedTargets[i];
                                currentEnemyScore = enemyScoreCheckingNow;
                            }
                        }
                    }
                }
                //If all of the above fails, pick a random target- even if it's one we haven't seen
                if (currentEnemyTarget == null && enemyTargets.Length > 0)
                {
                    currentEnemyTarget = enemyTargets[Random.Range(0, enemyTargets.Length - 1)];
                }

                if (currentEnemyTarget != null)
                {
                    AlertAlliesOfEnemy_Shout();
                    myAIBaseScript.SetMyTarget(currentEnemyTarget.transform, currentEnemyTarget.targetScript.myLOSTarget);
                }
                else
                {
                    myAIBaseScript.RemoveMyTarget();
                }
            }
        }