コード例 #1
0
        public bool ShouldApply(IHasDataId ownerContext, IUtilityVariables utilityVariables)
        {
            var unitsCaughtInShape = GetMaxSurroundingUnits(ownerContext as Unit);

            _cachedMax = unitsCaughtInShape;
            return(_cachedMax > 1);
        }
コード例 #2
0
        public Unit GetBestTarget(IHasDataId context, IUtilityVariables variables)
        {
            var targetUtility = variables
                                .GetRelatedUtilities(UtilityVariableTypes.PartyLowHealth)
                                .OrderByDescending(x => x.Value)
                                .FirstOrDefault();

            if (targetUtility.Key.UtilityId == 0)
            {
                return(null);
            }

            return(Level.GameUnits.Single(x => x.Unit.Id == targetUtility.Key.RelatedId).Unit);
        }
コード例 #3
0
        public AbilityWithTarget GetBestTarget(IHasDataId context, IUtilityVariables variables)
        {
            try
            {
                var unit         = (context as Unit);
                var abilityToUse = GetAbilityToUse(unit, variables);

                if (abilityToUse.Shape.Equals(ShapePresets.Empty))
                {
                    var nonShapedTargetId = GetBestTargetForNonShapedAttack(variables);
                    return(new AbilityWithTarget(nonShapedTargetId, abilityToUse.Id));
                }

                var shapedTargetId = GetBestTargetForShapedAttack(unit, abilityToUse, variables);
                return(new AbilityWithTarget(shapedTargetId, abilityToUse.Id));
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                throw;
            }
        }
コード例 #4
0
        public object GetBestLocation(IHasDataId context, IUtilityVariables variables)
        {
            var ownerUnit     = (context as Unit);
            var targetUtility = variables
                                .GetRelatedUtilities(UtilityVariableTypes.IsADanger)
                                .OrderByDescending(x => x.Value)
                                .FirstOrDefault();

            if (targetUtility.Key.UtilityId == 0)
            {
                return(MovementAdvisor.GetBestMovementAwayFromLocation(ownerUnit, ownerUnit.Position));
            }

            var targetUnit = Level.GameUnits.FirstOrDefault(x => x.Agent.OwnerContext.Id == targetUtility.Key.RelatedId);

            if (targetUnit == null)
            {
                return(MovementAdvisor.GetBestMovementAwayFromLocation(ownerUnit, ownerUnit.Position));
            }

            return(MovementAdvisor.GetBestMovementAwayFromTarget(ownerUnit, targetUnit.Unit));
        }
コード例 #5
0
 public float ModifyValue(float currentValue, IHasDataId ownerContext, IUtilityVariables utilityVariables)
 {
     return(currentValue * _cachedMax);
 }
コード例 #6
0
 public float ModifyValue(float currentValue, IHasDataId ownerContext, IUtilityVariables utilityVariables)
 {
     return(currentValue + AdditiveValue);
 }
コード例 #7
0
 public bool ShouldApply(IHasDataId ownerContext, IUtilityVariables utilityVariables) => true;