Example #1
0
        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);
            }
        }
Example #3
0
        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);
        }
Example #5
0
 public override bool CanExecuteBetweenCivs(ICivilization fromCiv, ICivilization toCiv)
 {
     return(WarCanon.AreAtWar(fromCiv, toCiv));
 }