Ejemplo n.º 1
0
        public override Interaction DecideInteraction(IEnumerable <UnitInfo> units)
        {
            var candidateUnits =
                units.Where(
                    (unit) =>
                    unit.Id != this.Id &&
                    this.UnitClassification ==
                    InfestationRequirements.RequiredClassificationToInfest(unit.UnitClassification));

            UnitInfo optimalInfestableUnit = new UnitInfo(null, Infestation.UnitClassification.Unknown, int.MaxValue, 0,
                                                          0);

            foreach (var unit in candidateUnits)
            {
                if (unit.Health < optimalInfestableUnit.Health)
                {
                    optimalInfestableUnit = unit;
                }
            }

            if (optimalInfestableUnit.Id != null)
            {
                return(new Interaction(new UnitInfo(this), optimalInfestableUnit, InteractionType.Infest));
            }

            return(Interaction.PassiveInteraction);
        }
        public void ReturnBiologicalUnitClassification_WhenRequiredClassificationToInfestIsCalledWithBiologicalUnit()
        {
            var human = new Human("Pesho");

            var classificationResult = InfestationRequirements.RequiredClassificationToInfest(human.UnitClassification);

            Assert.AreEqual(UnitClassification.Biological, classificationResult);
        }
        public void ReturnPsionicUnitClassification_WhenRequiredClassificationToInfestIsCalledWithPsionicUnit()
        {
            var queen = new Queen("Tereza");

            var classificationResult = InfestationRequirements.RequiredClassificationToInfest(queen.UnitClassification);

            Assert.AreEqual(UnitClassification.Psionic, classificationResult);
        }
        public void ReturnPrionicUnitClassification_WhenRequiredClassificationToInfestIsCalledWithMechanicalUnit()
        {
            var tank = new Tank("Panzer");

            var classificationResult = InfestationRequirements.RequiredClassificationToInfest(tank.UnitClassification);

            Assert.AreEqual(UnitClassification.Psionic, classificationResult);
        }
 public void ThrowInvalidOperationException_WhenRequiredClassificationToInfestIsCalledWithUnknownClassification()
 {
     Assert.Throws <InvalidOperationException>(() => InfestationRequirements.RequiredClassificationToInfest(UnitClassification.Unknown));
 }