예제 #1
0
    public static bool CheckSurroundingEntities(EntityAlive theEntity)
    {
        List <Entity> NearbyEntities = new List <Entity>();
        List <Entity> NearbyEnemies  = new List <Entity>();
        EntityAlive   leader         = EntityUtilities.GetLeaderOrOwner(theEntity.entityId) as EntityAlive;


        float originalView = theEntity.GetMaxViewAngle();

        theEntity.SetMaxViewAngle(250f);

        // Search in the bounds are to try to find the most appealing entity to follow.
        Bounds bb = new Bounds(theEntity.position, new Vector3(20f, 20f, 20f));

        theEntity.world.GetEntitiesInBounds(typeof(EntityAlive), bb, NearbyEntities);
        DisplayLog(" Nearby Entities: " + NearbyEntities.Count);
        for (int i = NearbyEntities.Count - 1; i >= 0; i--)
        {
            EntityAlive x = (EntityAlive)NearbyEntities[i];
            if (x is EntityVehicle)
            {
                continue;
            }

            if (x != theEntity && x.IsAlive())
            {
                if (leader != null && x == leader)
                {
                    continue;
                }

                if (x.CanSee(theEntity.position))
                {
                    DisplayLog(" I can be seen by an enemy.");
                    if (!theEntity.CanSee(x.position))
                    {
                        DisplayLog(" I know an entity is there, but I can't see it: " + x.EntityName);
                        continue;
                    }
                }
                DisplayLog("Nearby Entity: " + x.EntityName);
                if (SphereII_DMTEAIUtilities.CheckFactionForEnemy(theEntity, x))
                {
                    NearbyEnemies.Add(x);
                }
            }
        }

        theEntity.SetMaxViewAngle(originalView);
        return(NearestEnemy(theEntity, NearbyEnemies));
    }