/// <summary> /// Returns the possible targets of a prediction input source. /// </summary> /// <param name="input"> /// <see cref="PredictionInput" /> input /// </param> /// <returns><see cref="PossibleTarget" /> list.</returns> internal static List <PossibleTarget> GetPossibleTargets(PredictionInput input) { var result = new List <PossibleTarget>(); foreach (var enemy in GameObjects.EnemyHeroes.Where( h => !h.Compare(input.Unit) && h.IsValidTarget(input.Range + 200 + input.RealRadius, true, input.RangeCheckFrom))) { var inputs = input.Clone() as PredictionInput; if (inputs == null) { continue; } inputs.Unit = enemy; var prediction = Movement.GetPrediction(inputs, false, true); if (prediction.Hitchance >= HitChance.High) { result.Add(new PossibleTarget { Position = prediction.UnitPosition.ToVector2(), Unit = enemy }); } } return(result); }
/// <summary> /// Returns the possible targets of a prediction input source. /// </summary> /// <param name="input"> /// <see cref="PredictionInput" /> input /// </param> /// <returns><see cref="PossibleTarget" /> list.</returns> internal static List<PossibleTarget> GetPossibleTargets(PredictionInput input) { var result = new List<PossibleTarget>(); foreach (var enemy in GameObjects.EnemyHeroes.Where( h => !h.Compare(input.Unit) && h.LSIsValidTarget(input.Range + 200 + input.RealRadius, true, input.RangeCheckFrom))) { var inputs = input.Clone() as PredictionInput; if (inputs == null) { continue; } inputs.Unit = enemy; var prediction = Movement.GetPrediction(inputs, false, true); if (prediction.Hitchance >= HitChance.High) { result.Add(new PossibleTarget { Position = prediction.UnitPosition.ToVector2(), Unit = enemy }); } } return result; }
private static bool IsHitCollision(Obj_AI_Base collision, PredictionInput input, Vector3 pos, float extraRadius) { var inputSub = input.Clone() as PredictionInput; if (inputSub == null) { return(false); } inputSub.Unit = collision; var predPos = Movement.GetPrediction(inputSub, false, false).UnitPosition.ToVector2(); return(predPos.Distance(input.From) < input.Radius + input.Unit.BoundingRadius / 2 || predPos.Distance(pos) < input.Radius + input.Unit.BoundingRadius / 2 || predPos.DistanceSquared(input.From.ToVector2(), pos.ToVector2(), true) <= Math.Pow(input.Radius + input.Unit.BoundingRadius + extraRadius, 2)); }