///<inheritdoc/>
        public override int GetHashCode()
        {
            int hash = 17;

            // Overflow is fine, just wrap
            unchecked
            {
                hash = (hash * 29) + PaintScheme.GetHashCode();
                hash = (hash * 29) + Mobility.GetHashCode();
                hash = (hash * 29) + Mission.GetHashCode();
                hash = (hash * 29) + Damage.GetHashCode();
                hash = (hash * 29) + Smoke.GetHashCode();
                hash = (hash * 29) + TrailingEffects.GetHashCode();
                hash = (hash * 29) + Lights.GetHashCode();
                hash = (hash * 29) + Flaming.GetHashCode();
                hash = (hash * 29) + Antenna.GetHashCode();
                hash = (hash * 29) + CamouflageType.GetHashCode();
                hash = (hash * 29) + Concealed.GetHashCode();
                hash = (hash * 29) + FrozenStatus.GetHashCode();
                hash = (hash * 29) + PowerPlantStatus.GetHashCode();
                hash = (hash * 29) + State.GetHashCode();
                hash = (hash * 29) + Tent.GetHashCode();
                hash = (hash * 29) + BlackoutLights.GetHashCode();
                hash = (hash * 29) + InteriorLights.GetHashCode();
            }

            return(hash);
        }
示例#2
0
        public void Apply_NotACharacter_Test()
        {
            var entity    = Mock.Of <IEntity>();
            var concealed = new Concealed();

            concealed.Apply(entity);
            Assert.IsTrue(true); // If we made it here without exception then the test passed
        }
示例#3
0
        public void Remove_NoConditions_Test()
        {
            var character = CreateMockCharacter();
            var concealed = new Concealed();

            concealed.Apply(character);
            concealed.Remove(character);
            Assert.AreEqual(0, character.Conditions.Count);
        }
示例#4
0
        public void Apply_Character_WithExistingConcealedCondition_Test()
        {
            var character = CreateMockCharacter();

            character.Conditions.Add(new Concealed());
            var concealed = new Concealed();

            concealed.Apply(character);
        }
示例#5
0
        public void Apply_Character_NoConditions_Test()
        {
            var character = CreateMockCharacter();
            var concealed = new Concealed();

            concealed.Apply(character);
            Assert.AreEqual(EntityIds.CONCEALED_CONDITION_ID, character.Conditions[0].Id);
            Assert.AreSame(concealed, character.Conditions[0]);
            Assert.AreEqual(ConditionGroup.Senses, character.Conditions[0].Group);
        }
示例#6
0
        protected void Observe()
        {
            if (!IsControlled)
            {
                return;
            }

            //Log.Trace("Observing", "Observe");

            var viewingSphere = new BoundingSphereD(Position, ViewDistance);

            //Log.Trace("Viewing shpere Center: " + viewingSphere.Center, "Observe");
            //Log.Trace("Viewing shpere Radius: " + viewingSphere.Radius, "Observe");

            List <ObservableEntity> viewableEntities = Sector.ObservableInSphere(viewingSphere);

            viewableEntities.AddRange(Concealed.EntitiesInSphere(viewingSphere));

            // don't mark self
            viewableEntities = viewableEntities.Where((e) => e.EntityId != EntityId).ToList();

            //Log.Trace("Viewable entity count: " + viewableEntities.Count, "Observe");

            if (viewableEntities.Count > 0)
            {
                Log.Trace("Entities observed: " +
                          String.Join(", ", viewableEntities.Select((e) => e.EntityId).ToList()), "observe");
            }
            else
            {
                Log.Trace(EntityId + " is not viewing any entities", "observe");
            }


            foreach (ObservableEntity e in viewableEntities)
            {
                MarkViewing(e);
            }

            // do other ranges, can use largest between detection and view,
            // but communication depends on broadcast radius of others so would have to check that too

            LastObservingTime     = DateTime.UtcNow;
            LastObservingPosition = Position;
        }
        private void UpdateRevealBlocked()
        {
            IsRevealBlocked = false;

            //Log.Trace("Begin UpdateRevealBlocked", "UpdateRevealBlocked");
            BoundingBoxD     boxCopy         = BoundingBox;
            List <IMyEntity> boundedEntities = MyAPIGateway.Entities.
                                               GetElementsInBox(ref boxCopy);

            if (boundedEntities.Count == 0)
            {
                Log.Trace("No nearby entities, reveal is not blocked", "UpdateRevealBlocked");
                return;
            }

            foreach (IMyEntity e in boundedEntities)
            {
                if (e.GetTopMostParent() != Entity)
                {
                    Log.Trace("Found an entity in bounding box that's not a child, reveal is blocked", "UpdateRevealBlocked");
                    IsRevealBlocked = true;
                    return;
                }
            }

            //Log.Trace("All entities in bounds are children.", "UpdateRevealBlocked");

            List <ConcealedEntity> concealedEntities = Concealed.EntitiesInBox(boxCopy);

            //Log.Trace("concealed boundedEntities count " + concealedEntities.Count, "UpdateRevealBlocked");

            if (concealedEntities.Count > 0)
            {
                Log.Trace("Found a concealed entity in bounding box, reveal is blocked", "UpdateRevealBlocked");
                IsRevealBlocked = true;
                return;
            }

            Log.Trace("All entities in concealed bounds are children.", "UpdateRevealBlocked");
        }
        ///<inheritdoc/>
        public override int GetHashCode()
        {
            int hash = 17;

            // Overflow is fine, just wrap
            unchecked
            {
                hash = (hash * 29) + PaintScheme.GetHashCode();
                hash = (hash * 29) + Mobility.GetHashCode();
                hash = (hash * 29) + FirePower.GetHashCode();
                hash = (hash * 29) + Damage.GetHashCode();
                hash = (hash * 29) + Smoke.GetHashCode();
                hash = (hash * 29) + TrailingEffects.GetHashCode();
                hash = (hash * 29) + Hatch.GetHashCode();
                hash = (hash * 29) + HeadLights.GetHashCode();
                hash = (hash * 29) + TailLights.GetHashCode();
                hash = (hash * 29) + BrakeLights.GetHashCode();
                hash = (hash * 29) + Flaming.GetHashCode();
                hash = (hash * 29) + Launcher.GetHashCode();
                hash = (hash * 29) + CamouflageType.GetHashCode();
                hash = (hash * 29) + Concealed.GetHashCode();
                hash = (hash * 29) + FrozenStatus.GetHashCode();
                hash = (hash * 29) + PowerPlantStatus.GetHashCode();
                hash = (hash * 29) + State.GetHashCode();
                hash = (hash * 29) + Tent.GetHashCode();
                hash = (hash * 29) + Ramp.GetHashCode();
                hash = (hash * 29) + BlackoutLights.GetHashCode();
                hash = (hash * 29) + BlackoutBrakeLights.GetHashCode();
                hash = (hash * 29) + SpotLights.GetHashCode();
                hash = (hash * 29) + InteriorLights.GetHashCode();
                hash = (hash * 29) + SurrenderState.GetHashCode();
                hash = (hash * 29) + MaskedCloaked.GetHashCode();
            }

            return(hash);
        }