public void ApplyToMaps(InfluenceMaps maps, ICivilization targetCiv) { foreach (var unit in UnitFactory.AllUnits) { var unitOwner = UnitPossessionCanon.GetOwnerOfPossession(unit); var unitLocation = UnitPositionCanon.GetOwnerOfPossession(unit); float unitStrength = UnitStrengthEstimator.EstimateUnitStrength(unit); if (unitOwner == targetCiv) { InfluenceMapApplier.ApplyInfluenceToMap( unitStrength, maps.AllyPresence, unitLocation, AIConfig.UnitMaxInfluenceRadius, InfluenceMapApplier.PowerOfTwoRolloff, InfluenceMapApplier.ApplySum ); } else if (WarCanon.AreAtWar(unitOwner, targetCiv)) { InfluenceMapApplier.ApplyInfluenceToMap( unitStrength, maps.EnemyPresence, unitLocation, AIConfig.UnitMaxInfluenceRadius, InfluenceMapApplier.PowerOfTwoRolloff, InfluenceMapApplier.ApplySum ); } } }
public bool CanHandleCommandOnUnit(AbilityCommandRequest command, IUnit unit) { if (command.Type != AbilityCommandType.Pillage) { return(false); } var unitLocation = UnitPositionCanon.GetOwnerOfPossession(unit); var unitOwner = UnitPossessionCanon.GetOwnerOfPossession(unit); bool hasImprovement = ImprovementLocationCanon.GetPossessionsOfOwner(unitLocation).Any( improvement => !improvement.IsPillaged ); if (hasImprovement || unitLocation.HasRoads) { var cellOwner = CivTerritoryLogic.GetCivClaimingCell(unitLocation); return(cellOwner == null || WarCanon.AreAtWar(unitOwner, cellOwner)); } else { return(false); } }
public void PerformDamageOnUnitFromImprovements(IUnit unit) { var unitOwner = UnitPossessionCanon.GetOwnerOfPossession(unit); var unitLocation = UnitPositionCanon.GetOwnerOfPossession(unit); float highestDamage = 0f; foreach (var nearbyCell in Grid.GetCellsInRadius(unitLocation, 1)) { var ownerOfCell = CivTerritoryLogic.GetCivClaimingCell(nearbyCell); if (ownerOfCell == null || !WarCanon.AreAtWar(unitOwner, ownerOfCell)) { continue; } foreach (var improvement in ImprovementLocationCanon.GetPossessionsOfOwner(nearbyCell)) { highestDamage = Mathf.Max(highestDamage, improvement.Template.AdjacentEnemyDamagePercentage); } } if (highestDamage > 0f) { unit.CurrentHitpoints -= Mathf.RoundToInt(unit.MaxHitpoints * highestDamage); } }
public bool DoesAttackMeetCommonConditions(IUnit attacker, IUnit defender) { if (attacker == null) { throw new ArgumentNullException("attacker"); } if (defender == null) { throw new ArgumentNullException("defender"); } if (attacker == defender) { return(false); } var attackerOwner = UnitPossessionCanon.GetOwnerOfPossession(attacker); var defenderOwner = UnitPossessionCanon.GetOwnerOfPossession(defender); if (attackerOwner == defenderOwner) { return(false); } if (!WarCanon.AreAtWar(attackerOwner, defenderOwner)) { return(false); } if (!attacker.CanAttack) { return(false); } return(true); }
public override bool CanExecuteBetweenCivs(ICivilization fromCiv, ICivilization toCiv) { return(WarCanon.AreAtWar(fromCiv, toCiv)); }