public TerrainConditionFactory() { TarrainConditions = new List<TerrainCondition>(); Uri dataUri = new Uri(Constants.TerrainConditionDataPath, UriKind.Relative); XElement applicationXml; StreamResourceInfo xmlStream = Application.GetResourceStream(dataUri); applicationXml = XElement.Load(xmlStream.Stream); var data = from wz in applicationXml.Descendants("TerrainCondition") select wz; TerrainCondition terrainCondition = null; foreach (var d in data) { terrainCondition = new TerrainCondition(); terrainCondition.TerrainConditionId = (Int32)d.Element("TerrainConditionId"); terrainCondition.TerrainConditionDescription = (String)d.Element("TerrainConditionDescription"); TarrainConditions.Add(terrainCondition); } }
private int DetermineDefenseGradeOverrides(IUnit attackingUnit, IUnit defendingUnit, TerrainCondition terrainCondition, int defenderDefenseGrade) { if (attackingUnit is LandCombatUnit && defendingUnit is ISeaUnit) { defenderDefenseGrade += 8; } if (attackingUnit.EquipmentClassEnum == EquipmentClassEnum.Artillery && terrainCondition.TerrainConditionEnum != TerrainConditionEnum.Dry) { defenderDefenseGrade += 3; } if (defendingUnit.EquipmentClassEnum == EquipmentClassEnum.Artillery) { defenderDefenseGrade += 3; } if (attackingUnit.EquipmentClassEnum == EquipmentClassEnum.Infantry && defendingUnit.EquipmentSubClassEnum == EquipmentSubClassEnum.TowedLightAntiTank) { defenderDefenseGrade += 2; } if (attackingUnit.EquipmentClassEnum == EquipmentClassEnum.Infantry && defendingUnit.EquipmentSubClassEnum == EquipmentSubClassEnum.TowedHeavyAntiTank) { defenderDefenseGrade += 2; } return defenderDefenseGrade; }
private Volley CalculateVolley(IUnit attackingUnit, IUnit defendingUnit, Tile attackingTile, Tile defendingTile, TerrainCondition terrainCondition) { Volley volley = new Volley(); volley.AttackerUnit = attackingUnit; volley.AttackerTile = attackingTile; volley.DefenderUnit = defendingUnit; volley.DefenderTile = defendingTile; int attackerAttackGrade = 0; int defenderDefenseGrade = 0; int netAttackGrade = 0; int attackingUnitStartingStrength = attackingUnit.CurrentStrength; int defendingUnitStartingStrength = defendingUnit.CurrentStrength; attackerAttackGrade = CalculateAttackGrade(attackingUnit, defendingUnit, defendingTile); defenderDefenseGrade = CalculateDefenseGrade(attackingUnit, defendingUnit, attackingTile, defendingTile, terrainCondition); netAttackGrade = attackerAttackGrade - defenderDefenseGrade; SetVolleyResults(attackingUnit, defendingUnit, netAttackGrade); int attackingUnitStrengthLoss = attackingUnitStartingStrength - attackingUnit.CurrentStrength; int defendingUnitStrengthLoss = defendingUnitStartingStrength - defendingUnit.CurrentStrength; if (attackingUnit is ICombatUnit) { ICombatUnit combatUnit = (ICombatUnit)attackingUnit; combatUnit.CurrentAmmo += -1; } if (defendingUnit is ICombatUnit) { ICombatUnit combatUnit = (ICombatUnit)defendingUnit; combatUnit.CurrentAmmo += -1; } if (attackingUnitStrengthLoss > 0 && defendingUnitStrengthLoss > 0) { volley.VollyOutcomeEnum= VolleyOutcomeEnum.AttackerHurt_DefenderHurt; } else if (attackingUnitStrengthLoss > 0 && defendingUnitStrengthLoss == 0) { volley.VollyOutcomeEnum = VolleyOutcomeEnum.AttackerHurt_DefenderUnhurt; } else if (attackingUnitStrengthLoss == 0 && defendingUnitStrengthLoss > 0) { volley.VollyOutcomeEnum = VolleyOutcomeEnum.AttackerUnhurt_DefenderHurt; } else { volley.VollyOutcomeEnum = VolleyOutcomeEnum.AttackerUnhurt_DefenderUnhurt; } return volley; }
private Int32 CalculateDefenseGrade(IUnit attackingUnit, IUnit defendingUnit, Tile attackingTile, Tile defendingTile, TerrainCondition terrainCondition) { int defenderDefenseGrade = 0; if (attackingUnit is IAirUnit) { defenderDefenseGrade = defendingUnit.Equipment.AirDefense; } else { defenderDefenseGrade = defendingUnit.Equipment.GroundDefense; } defenderDefenseGrade += defendingUnit.CurrentNumberOfStars; if (attackingTile.Terrain.RiverInd == true) { defenderDefenseGrade += 4; } if (CalculateRuggedDefense(attackingUnit, defendingUnit)) { defenderDefenseGrade += 4; } defenderDefenseGrade = DetermineDefenseGradeEntrenchment(attackingUnit, defendingUnit, defenderDefenseGrade); defenderDefenseGrade = DetermineDefenseGradeOverrides(attackingUnit, defendingUnit, terrainCondition, defenderDefenseGrade); return defenderDefenseGrade; }