Exemple #1
0
        protected MyCharacter FindCharacterInRadius(int radius, bool ignoreReachability = false)
        {
            Vector3D    translation = this.Bot.Navigation.PositionAndOrientation.Translation;
            MyCharacter character   = null;
            double      num         = 3.4028234663852886E+38;

            foreach (MyPlayer player in Sync.Players.GetOnlinePlayers())
            {
                if (player.Id.SerialId != 0)
                {
                    MyHumanoidBot bot = MyAIComponent.Static.Bots.TryGetBot <MyHumanoidBot>(player.Id.SerialId);
                    if (bot == null)
                    {
                        continue;
                    }
                    if (bot.BotDefinition.BehaviorType == "Barbarian")
                    {
                        continue;
                    }
                }
                if (((player.Character != null) && (ignoreReachability || this.AiTargetBase.IsEntityReachable(player.Character))) && !player.Character.IsDead)
                {
                    double num2 = Vector3D.DistanceSquared(player.Character.PositionComp.GetPosition(), translation);
                    if ((num2 < (radius * radius)) && (num2 < num))
                    {
                        character = player.Character;
                        num       = num2;
                    }
                }
            }
            return(character);
        }
Exemple #2
0
 public MyHumanoidBotActions(MyHumanoidBot humanoidBot) : base(humanoidBot)
 {
 }
 public MyHumanoidBotCommonActions(MyHumanoidBot humanoidBot, MyAiTargetBase targetBase)
     : base(humanoidBot, targetBase)
 {
 }
Exemple #4
0
        public static bool FindClosestTreeInPlaceArea(Vector3D fromPosition, long entityId, MyHumanoidBot bot, out ItemInfo result)
        {
            result = default(ItemInfo);
            MyPlaceArea area = MyPlaceArea.FromEntity(entityId);

            if (area == null)
            {
                return(false);
            }

            var areaBoundingBox = area.WorldAABB;
            var entities        = MyEntities.GetEntitiesInAABB(ref areaBoundingBox, true);

            double closestDistanceSq = double.MaxValue;

            foreach (MyEntity entity in entities)
            {
                MyTrees trees = entity as MyTrees;
                if (trees == null)
                {
                    continue;
                }

                m_tmpEnvItemList.Clear();
                trees.GetPhysicalItemsInRadius(areaBoundingBox.Center, (float)areaBoundingBox.HalfExtents.Length(), m_tmpEnvItemList);

                foreach (var tree in m_tmpEnvItemList)
                {
                    if (!area.TestPoint(tree.Transform.Position))
                    {
                        continue;
                    }

                    if (!bot.AgentLogic.AiTarget.IsTreeReachable(entity, tree.LocalId))
                    {
                        continue;
                    }

                    double distanceSq = Vector3D.DistanceSquared(fromPosition, tree.Transform.Position);
                    if (distanceSq < closestDistanceSq)
                    {
                        result.ItemsEntityId = entity.EntityId;
                        result.ItemId        = tree.LocalId;
                        result.Target        = tree.Transform.Position;
                        closestDistanceSq    = distanceSq;
                    }
                }
                m_tmpEnvItemList.Clear();
            }

            entities.Clear();

            return(closestDistanceSq != double.MaxValue);
        }
Exemple #5
0
        private static bool FindClosestFracturedTreeInternal(Vector3D fromPosition, Vector3D searchCenter, double searchRadius, MyPlaceArea area, MyHumanoidBot bot, out EntityInfo result)
        {
            result = default(EntityInfo);

            double           closestDistanceSq = double.MaxValue;
            MyFracturedPiece closestTarget     = null;
            Vector3D         closestPoint      = default(Vector3D);

            BoundingSphereD searchSphere = new BoundingSphereD(searchCenter, searchRadius);

            m_tmpFracturePieceList.Clear();
            MyFracturedPiecesManager.Static.GetFracturesInSphere(ref searchSphere, ref m_tmpFracturePieceList);
            for (int i = 0; i < m_tmpFracturePieceList.Count; ++i)
            {
                var fracture = m_tmpFracturePieceList[i];

                // Skip non-tree fractures
                if (!MyTrees.IsEntityFracturedTree(fracture))
                {
                    continue;
                }

                if (IsFracturedTreeStump(fracture))
                {
                    continue;
                }

                if (!bot.AgentLogic.AiTarget.IsEntityReachable(fracture))
                {
                    continue;
                }

                Vector3D positionInTrunkLocal = Vector3D.Transform(fromPosition, fracture.PositionComp.WorldMatrixNormalizedInv);
                Vector3D closestPointOnTrunk;

                if (!FindClosestPointOnFracturedTree(positionInTrunkLocal, fracture, out closestPointOnTrunk))
                {
                    continue;
                }

                if (area == null || area.TestPoint(closestPointOnTrunk))
                {
                    double distanceSq = Vector3D.DistanceSquared(closestPointOnTrunk, fromPosition);

                    if (distanceSq < closestDistanceSq)
                    {
                        closestDistanceSq = distanceSq;
                        closestTarget     = fracture;
                        closestPoint      = closestPointOnTrunk;
                    }
                }
            }
            m_tmpFracturePieceList.Clear();

            if (closestTarget == null)
            {
                return(false);
            }

            result.EntityId = closestTarget.EntityId;
            result.Target   = closestPoint;
            return(true);
        }
Exemple #6
0
        public static bool FindClosestFracturedTreeInArea(Vector3D fromPosition, long areaEntityId, MyHumanoidBot bot, out EntityInfo result)
        {
            result = default(EntityInfo);

            MyPlaceArea area = MyPlaceArea.FromEntity(areaEntityId);

            if (area == null)
            {
                return(false);
            }

            BoundingBoxD areaBB = area.WorldAABB;
            double       radius = (double)areaBB.HalfExtents.Length();


            return(FindClosestFracturedTreeInternal(fromPosition, areaBB.Center, radius, area, bot, out result));;
        }
Exemple #7
0
 public static bool FindClosestFracturedTreeInRadius(Vector3D fromPosition, double radius, MyHumanoidBot bot, out EntityInfo result)
 {
     return(FindClosestFracturedTreeInternal(fromPosition, fromPosition, radius, null, bot, out result));
 }
        public MyHumanoidBotActions(MyHumanoidBot humanoidBot)
            :
            base(humanoidBot)
        {

        }
        public MyHumanoidBotCommonActions(MyHumanoidBot humanoidBot, MyAiTargetBase targetBase)
            : base(humanoidBot, targetBase)
        {

        }