Beispiel #1
0
            public static PredictionOutput GetPrediction(PredictionInput input)
            {
                PredictionOutput prediction = Prediction.GetPrediction(input, false, true);
                List <AoePrediction.PossibleTarget> list = new List <AoePrediction.PossibleTarget>
                {
                    new AoePrediction.PossibleTarget
                    {
                        Position = prediction.UnitPosition.ToVector2(),
                        Unit     = input.Unit
                    }
                };

                if (prediction.Hitchance >= HitChance.Medium)
                {
                    list.AddRange(AoePrediction.GetPossibleTargets(input));
                }
                while (list.Count > 1)
                {
                    var mec = MEC.GetMec((from h in list
                                          select h.Position).ToList <Vector2>());
                    if (mec.Radius <= input.RealRadius - 10f && Vector2.DistanceSquared(mec.Center, input.RangeCheckFrom.ToVector2()) < input.Range * input.Range)
                    {
                        PredictionOutput predictionOutput = new PredictionOutput();
                        predictionOutput.AoeTargetsHit = (from hero in list
                                                          select hero.Unit).ToList <AIBaseClient>();
                        predictionOutput.CastPosition        = mec.Center.ToVector3();
                        predictionOutput.UnitPosition        = prediction.UnitPosition;
                        predictionOutput.Hitchance           = prediction.Hitchance;
                        predictionOutput.Input               = input;
                        predictionOutput._aoeTargetsHitCount = list.Count;
                        return(predictionOutput);
                    }
                    float num   = -1f;
                    int   index = 1;
                    for (int i = 1; i < list.Count; i++)
                    {
                        float num2 = Vector2.DistanceSquared(list[i].Position, list[0].Position);
                        if (num2 > num || num.CompareTo(-1f) == 0)
                        {
                            index = i;
                            num   = num2;
                        }
                    }
                    list.RemoveAt(index);
                }
                return(prediction);
            }
Beispiel #2
0
            public static PredictionOutput GetPrediction(PredictionInput input)
            {
                PredictionOutput prediction = Prediction.GetPrediction(input, false, true);
                List <AoePrediction.PossibleTarget> list = new List <AoePrediction.PossibleTarget>
                {
                    new AoePrediction.PossibleTarget
                    {
                        Position = prediction.UnitPosition.ToVector2(),
                        Unit     = input.Unit
                    }
                };

                if (prediction.Hitchance >= HitChance.Medium)
                {
                    list.AddRange(AoePrediction.GetPossibleTargets(input));
                }
                if (list.Count > 1)
                {
                    List <Vector2> list2 = new List <Vector2>();
                    foreach (AoePrediction.PossibleTarget possibleTarget in list)
                    {
                        Vector2[] candidates = AoePrediction.Line.GetCandidates(input.From.ToVector2(), possibleTarget.Position, input.Radius, input.Range);
                        list2.AddRange(candidates);
                    }
                    var            num    = -1;
                    var            vector = default(Vector2);
                    List <Vector2> list3  = new List <Vector2>();
                    List <Vector2> list4  = (from t in list
                                             select t.Position).ToList <Vector2>();
                    foreach (Vector2 vector2 in list2)
                    {
                        if (AoePrediction.Line.GetHits(input.From.ToVector2(), vector2, (double)(input.Radius + input.Unit.BoundingRadius / 3f - 10f), new List <Vector2>
                        {
                            list[0].Position
                        }).Count <Vector2>() == 1)
                        {
                            List <Vector2> list5 = AoePrediction.Line.GetHits(input.From.ToVector2(), vector2, (double)input.Radius, list4).ToList <Vector2>();
                            int            count = list5.Count;
                            if (count >= num)
                            {
                                num    = count;
                                vector = vector2;
                                list3  = list5.ToList <Vector2>();
                            }
                        }
                    }
                    if (num > 1)
                    {
                        float   num2  = -1f;
                        Vector2 left  = default(Vector2);
                        Vector2 right = default(Vector2);
                        for (int i = 0; i < list3.Count; i++)
                        {
                            for (int j = 0; j < list3.Count; j++)
                            {
                                Vector2 segmentStart    = input.From.ToVector2();
                                Vector2 segmentEnd      = vector;
                                var     projectionInfo  = list4[i].ProjectOn(segmentStart, segmentEnd);
                                var     projectionInfo2 = list4[j].ProjectOn(segmentStart, segmentEnd);
                                float   num3            = Vector2.DistanceSquared(list3[i], projectionInfo.LinePoint) + Vector2.DistanceSquared(list3[j], projectionInfo2.LinePoint);
                                if (num3 >= num2 && (projectionInfo.LinePoint - list4[i]).AngleBetween(projectionInfo2.LinePoint - list4[j]) > 90f)
                                {
                                    num2  = num3;
                                    left  = list4[i];
                                    right = list4[j];
                                }
                            }
                        }
                        return(new PredictionOutput
                        {
                            Hitchance = prediction.Hitchance,
                            _aoeTargetsHitCount = num,
                            UnitPosition = prediction.UnitPosition,
                            CastPosition = ((left + right) * 0.5f).ToVector3(),
                            Input = input
                        });
                    }
                }
                return(prediction);
            }
Beispiel #3
0
            public static PredictionOutput GetPrediction(PredictionInput input)
            {
                PredictionOutput prediction = Prediction.GetPrediction(input, false, true);
                List <AoePrediction.PossibleTarget> list = new List <AoePrediction.PossibleTarget>
                {
                    new AoePrediction.PossibleTarget
                    {
                        Position = prediction.UnitPosition.ToVector2(),
                        Unit     = input.Unit
                    }
                };

                if (prediction.Hitchance >= HitChance.Medium)
                {
                    list.AddRange(AoePrediction.GetPossibleTargets(input));
                }
                if (list.Count > 1)
                {
                    List <Vector2> list2 = new List <Vector2>();
                    foreach (AoePrediction.PossibleTarget possibleTarget in list)
                    {
                        possibleTarget.Position -= input.From.ToVector2();
                    }
                    for (int i = 0; i < list.Count; i++)
                    {
                        for (int j = 0; j < list.Count; j++)
                        {
                            if (i != j)
                            {
                                Vector2 item = (list[i].Position + list[j].Position) * 0.5f;
                                if (!list2.Contains(item))
                                {
                                    list2.Add(item);
                                }
                            }
                        }
                    }
                    int            num    = -1;
                    Vector2        vector = default(Vector2);
                    List <Vector2> points = (from t in list
                                             select t.Position).ToList <Vector2>();
                    foreach (Vector2 vector2 in list2)
                    {
                        int hits = AoePrediction.Cone.GetHits(vector2, (double)input.Range, input.Radius, points);
                        if (hits > num)
                        {
                            vector = vector2;
                            num    = hits;
                        }
                    }
                    vector += input.From.ToVector2();
                    if (num > 1 && input.From.ToVector2().DistanceSquared(vector) > 2500f)
                    {
                        return(new PredictionOutput
                        {
                            Hitchance = prediction.Hitchance,
                            _aoeTargetsHitCount = num,
                            UnitPosition = prediction.UnitPosition,
                            CastPosition = vector.ToVector3(),
                            Input = input
                        });
                    }
                }
                return(prediction);
            }