public override bool IsInvalid(MySmallShipBot bot) { return(m_invalidated || m_entityRemoved || Target == null || Target.IsDead() || bot.IsSpoiledHologram(Target) || !Target.Activated); }
public void DoWork() { // Search for target to attack ClosestEnemy = null; ClosestVisual = null; float distanceSqr = m_seeDistance * m_seeDistance; float closestEnemyDistanceSqr = float.PositiveInfinity; float closestVisualDistanceSqr = float.PositiveInfinity; using (var rbFounded = PoolList <MyRBElement> .Get()) { try { MyEntities.EntityCloseLock.AcquireShared(); MyDynamicAABBTree prunningStructure = MyPhysics.physicsSystem.GetRigidBodyModule().GetPruningStructure(); BoundingBox rbInputElementGetWorldSpaceAABB = new BoundingBox( m_botWorldMatrix.Translation - new Vector3(m_seeDistance), m_botWorldMatrix.Translation + new Vector3(m_seeDistance)); prunningStructure.OverlapAllBoundingBox(ref rbInputElementGetWorldSpaceAABB, rbFounded, (uint)MyElementFlag.EF_RB_ELEMENT); //now try find spot foreach (MyRBElement rb in rbFounded) { if (m_bot == null) { return; } var rigidBody = rb.GetRigidBody(); if (rigidBody == null) { continue; } MyEntity entity = ((MyPhysicsBody)rigidBody.m_UserData).Entity; if (entity == m_bot || entity == null || entity.AIPriority == -1) { continue; } entity = entity.GetBaseEntity(); // Large weapons // Ignore spoiled holograms if (m_bot.IsSpoiledHologram(entity)) { continue; } // Don't attack disabled weapons MyPrefabLargeWeapon largeWeapon = entity as MyPrefabLargeWeapon; MySmallShip smallShip = entity as MySmallShip; MyPrefabLargeShip largeShip = entity as MyPrefabLargeShip; if (largeWeapon != null && !largeWeapon.IsWorking()) { continue; } // Test smallships and largeweapons if (smallShip != null || largeWeapon != null || largeShip != null) { // Is enemy? if (MyFactions.GetFactionsRelation(m_bot, entity) == MyFactionRelationEnum.Enemy && CanSeeTarget(m_bot, entity)) { var entityDistanceSqr = Vector3.DistanceSquared(entity.GetPosition(), m_position); if (entityDistanceSqr < distanceSqr && (ClosestEnemy == null || entity.AIPriority >= ClosestEnemy.AIPriority) && (entityDistanceSqr < closestEnemyDistanceSqr || entity.AIPriority > ClosestEnemy.AIPriority)) { MyLine line = new MyLine(m_position, entity.GetPosition(), true); var result = MyEntities.GetIntersectionWithLine(ref line, m_bot, entity, true, ignoreChilds: true); if (!result.HasValue) { // Visual Detection - ignore visualy detected targets if they are further than any normaly detected target if (IsVisualyDetected(smallShip)) { if (entityDistanceSqr < closestVisualDistanceSqr) { ClosestVisual = entity; closestVisualDistanceSqr = entityDistanceSqr; } } else { closestEnemyDistanceSqr = entityDistanceSqr; ClosestEnemy = entity; } } } } } } } finally { MyEntities.EntityCloseLock.ReleaseShared(); } } }
public override bool IsInvalid(MySmallShipBot bot) { return(base.IsInvalid(bot) || Entity == null || bot.IsLeaderLost() || bot.IsSpoiledHologram(Entity)); }
public override bool IsInvalid(MySmallShipBot bot) { return(invalid || DamageSource.IsDead() || bot.IsLeaderLost() || bot.IsSpoiledHologram(DamageSource) || MyFactions.GetFactionsRelation(bot, DamageSource) != MyFactionRelationEnum.Enemy || !DamageSource.Activated); }
public override bool IsInvalid(MySmallShipBot bot) { return(base.IsInvalid(bot) || invalid || Enemy.IsDead() || bot.IsLeaderLost() || bot.IsSpoiledHologram(Enemy) || MyFactions.GetFactionsRelation(bot, Enemy) != MyFactionRelationEnum.Enemy || !Enemy.Activated || Enemy.AIPriority == -1); }
public override bool IsInvalid(MySmallShipBot bot) { return invalid || DamageSource.IsDead() || bot.IsLeaderLost() || bot.IsSpoiledHologram(DamageSource) || MyFactions.GetFactionsRelation(bot, DamageSource) != MyFactionRelationEnum.Enemy || !DamageSource.Activated; }
public override bool IsInvalid(MySmallShipBot bot) { return m_invalidated || m_entityRemoved || Target == null || Target.IsDead() || bot.IsSpoiledHologram(Target) || !Target.Activated; }
public override bool IsInvalid(MySmallShipBot bot) { return base.IsInvalid(bot) || Entity == null || bot.IsLeaderLost() || bot.IsSpoiledHologram(Entity); }