public bool ShouldApply(IHasDataId ownerContext, IUtilityVariables utilityVariables) { var unitsCaughtInShape = GetMaxSurroundingUnits(ownerContext as Unit); _cachedMax = unitsCaughtInShape; return(_cachedMax > 1); }
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); }
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; } }
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)); }
public float ModifyValue(float currentValue, IHasDataId ownerContext, IUtilityVariables utilityVariables) { return(currentValue * _cachedMax); }
public float ModifyValue(float currentValue, IHasDataId ownerContext, IUtilityVariables utilityVariables) { return(currentValue + AdditiveValue); }
public bool ShouldApply(IHasDataId ownerContext, IUtilityVariables utilityVariables) => true;