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)); }