本文整理汇总了C#中LeagueSharp.Common.Geometry.Polygon.Circle.IsInside方法的典型用法代码示例。如果您正苦于以下问题:C# Geometry.Polygon.Circle.IsInside方法的具体用法?C# Geometry.Polygon.Circle.IsInside怎么用?C# Geometry.Polygon.Circle.IsInside使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类LeagueSharp.Common.Geometry.Polygon.Circle
的用法示例。
在下文中一共展示了Geometry.Polygon.Circle.IsInside方法的12个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: GetWHits
private int GetWHits(Obj_AI_Base target, List<Obj_AI_Base> targets = null, CardColor color = CardColor.Gold)
{
try
{
if (targets != null && color == CardColor.Red)
{
targets = targets.Where(t => t.IsValidTarget((W.Range + W.Width) * 1.5f)).ToList();
var pred = W.GetPrediction(target);
if (pred.Hitchance >= HitChance.Medium)
{
var circle = new Geometry.Polygon.Circle(pred.UnitPosition, target.BoundingRadius + WRedRadius);
return 1 + (from t in targets.Where(x => x.NetworkId != target.NetworkId)
let pred2 = W.GetPrediction(t)
where pred2.Hitchance >= HitChance.Medium
select new Geometry.Polygon.Circle(pred2.UnitPosition, t.BoundingRadius * 0.9f)).Count(
circle2 => circle2.Points.Any(p => circle.IsInside(p)));
}
}
if (W.IsInRange(target))
{
return 1;
}
}
catch (Exception ex)
{
Global.Logger.AddItem(new LogItem(ex));
}
return 0;
}
示例2: GetHits
private Tuple<int, List<Obj_AI_Hero>> GetHits(Spell spell, float overrideWidth = -1f)
{
try
{
var width = overrideWidth > 0 ? overrideWidth : spell.Width;
var hits = new List<Obj_AI_Hero>();
var positions = (from t in GameObjects.EnemyHeroes
where t.IsValidTarget(width * 4, true, spell.RangeCheckFrom)
let prediction = spell.GetPrediction(t)
where prediction.Hitchance >= HitChance.High
where
Utils.IsImmobile(t) || Utils.IsSlowed(t) || t.Distance(Ball.Position) < spell.Width * 0.75 ||
t.Distance(Ball.Position) < spell.Width && t.IsFacing(Ball.Position, 120f)
select new CPrediction.Position(t, prediction.UnitPosition)).ToList();
if (positions.Any())
{
var circle = new Geometry.Polygon.Circle(Ball.Position, width);
hits.AddRange(
from position in positions
where
!position.Hero.IsDashing() ||
(position.Hero.Distance(Ball.Position) >= 100f &&
position.Hero.Position.Distance(Ball.Position) >
position.Hero.GetDashInfo().EndPos.Distance(Ball.Position) - 50f)
where circle.IsInside(position.UnitPosition)
select position.Hero);
return new Tuple<int, List<Obj_AI_Hero>>(hits.Count, hits);
}
}
catch (Exception ex)
{
Global.Logger.AddItem(new LogItem(ex));
}
return new Tuple<int, List<Obj_AI_Hero>>(0, null);
}
示例3: BestRFollowLocation
private Vector3 BestRFollowLocation(Vector3 position)
{
try
{
var center = Vector2.Zero;
float radius = -1;
var count = 0;
var moveDistance = -1f;
var maxRelocation = IsSpellUpgraded(R) ? R.Width * 1.2f : R.Width * 0.8f;
var targets = GameObjects.EnemyHeroes.Where(t => t.IsValidTarget(1500f)).ToList();
var circle = new Geometry.Polygon.Circle(position, R.Width);
if (targets.Any())
{
var minDistance = targets.Any(t => circle.IsInside(t)) ? targets.Min(t => t.BoundingRadius) * 2 : 0;
var possibilities =
ListExtensions.ProduceEnumeration(targets.Select(t => t.Position.To2D()).ToList())
.Where(p => p.Count > 1)
.ToList();
if (possibilities.Any())
{
foreach (var possibility in possibilities)
{
var mec = MEC.GetMec(possibility);
var distance = position.Distance(mec.Center.To3D());
if (mec.Radius < R.Width && distance < maxRelocation && distance > minDistance)
{
if (possibility.Count > count ||
possibility.Count == count && (mec.Radius < radius || distance < moveDistance))
{
moveDistance = position.Distance(mec.Center.To3D());
center = mec.Center;
radius = mec.Radius;
count = possibility.Count;
}
}
}
if (!center.Equals(Vector2.Zero))
{
return center.To3D();
}
}
var dTarget = targets.OrderBy(t => t.Distance(position)).FirstOrDefault();
if (dTarget != null && position.Distance(dTarget.Position) > minDistance)
{
return dTarget.Position;
}
}
}
catch (Exception ex)
{
Global.Logger.AddItem(new LogItem(ex));
}
return Vector3.Zero;
}
示例4: Circle
public static Result Circle(Spell spell, Obj_AI_Hero target, HitChance hitChance, bool boundingRadius = true)
{
try
{
if (spell == null || target == null)
{
return new Result(Vector3.Zero, new List<Obj_AI_Hero>());
}
var hits = new List<Obj_AI_Hero>();
var center = Vector3.Zero;
var radius = float.MaxValue;
var range = spell.Range + spell.Width +
(boundingRadius ? target.BoundingRadius * BoundingRadiusMultiplicator : 0);
var positions = (from t in GameObjects.EnemyHeroes
where t.IsValidTarget(range, true, spell.RangeCheckFrom)
let prediction = spell.GetPrediction(t)
where prediction.Hitchance >= hitChance
select new Position(t, prediction.UnitPosition)).ToList();
var spellWidth = spell.Width;
//+ (boundingRadius ? positions.Select(p => p.Hero).Min(p => p.BoundingRadius) : 0);
if (positions.Any())
{
var mainTarget = positions.FirstOrDefault(p => p.Hero.NetworkId == target.NetworkId);
var possibilities =
ListExtensions.ProduceEnumeration(
positions.Where(
p => p.UnitPosition.Distance(mainTarget.UnitPosition) <= spell.Width * 0.85f).ToList())
.Where(p => p.Count > 0 && p.Any(t => t.Hero.NetworkId == mainTarget.Hero.NetworkId))
.ToList();
foreach (var possibility in possibilities)
{
var mec = MEC.GetMec(possibility.Select(p => p.UnitPosition.To2D()).ToList());
var distance = spell.From.Distance(mec.Center.To3D());
if (mec.Radius < spellWidth && distance < range)
{
var lHits = new List<Obj_AI_Hero>();
var circle =
new Geometry.Polygon.Circle(
spell.From.Extend(
mec.Center.To3D(), spell.Range > distance ? distance : spell.Range), spell.Width);
if (boundingRadius)
{
lHits.AddRange(
(from position in positions
where
new Geometry.Polygon.Circle(
position.UnitPosition,
(position.Hero.BoundingRadius * BoundingRadiusMultiplicator)).Points.Any
(p => circle.IsInside(p))
select position.Hero));
}
else
{
lHits.AddRange(
from position in positions
where circle.IsInside(position.UnitPosition)
select position.Hero);
}
if ((lHits.Count > hits.Count || lHits.Count == hits.Count && mec.Radius < radius ||
lHits.Count == hits.Count &&
spell.From.Distance(circle.Center.To3D()) < spell.From.Distance(center)) &&
lHits.Any(p => p.NetworkId == target.NetworkId))
{
center = circle.Center.To3D2();
radius = mec.Radius;
hits.Clear();
hits.AddRange(lHits);
}
}
}
if (!center.Equals(Vector3.Zero))
{
return new Result(center, hits);
}
}
}
catch (Exception ex)
{
Global.Logger.AddItem(new LogItem(ex));
}
return new Result(Vector3.Zero, new List<Obj_AI_Hero>());
}
示例5: GetBestQLocation
private Tuple<int, Vector3> GetBestQLocation(Obj_AI_Hero target, HitChance hitChance)
{
try
{
if (target == null)
{
return new Tuple<int, Vector3>(0, Vector3.Zero);
}
var hits = new List<Obj_AI_Hero>();
var center = Vector3.Zero;
var radius = float.MaxValue;
var range = Q.Range + Q.Width + target.BoundingRadius * 0.85f;
var positions = (from t in GameObjects.EnemyHeroes
where t.IsValidTarget(range, true, Q.RangeCheckFrom)
let prediction = Q.GetPrediction(t)
where prediction.Hitchance >= (hitChance - 1)
select new CPrediction.Position(t, prediction.UnitPosition)).ToList();
if (positions.Any())
{
var mainTarget = positions.FirstOrDefault(p => p.Hero.NetworkId == target.NetworkId);
var possibilities =
ListExtensions.ProduceEnumeration(
positions.Where(p => p.UnitPosition.Distance(mainTarget.UnitPosition) <= Q.Width * 0.85f)
.ToList())
.Where(p => p.Count > 0 && p.Any(t => t.Hero.NetworkId == mainTarget.Hero.NetworkId))
.ToList();
var rReady = R.IsReady();
var wReady = W.IsReady();
foreach (var possibility in possibilities)
{
var mec = MEC.GetMec(possibility.Select(p => p.UnitPosition.To2D()).ToList());
var distance = Q.From.Distance(mec.Center.To3D());
if (distance < range)
{
if (mec.Radius < R.Width * 0.85f && possibility.Count >= 3 && rReady ||
mec.Radius < W.Width * 0.9f && possibility.Count >= 2 && wReady ||
mec.Radius < Q.Width * 0.9f && possibility.Count >= 1)
{
var lHits = new List<Obj_AI_Hero>();
var circle =
new Geometry.Polygon.Circle(
Q.From.Extend(mec.Center.To3D(), Q.Range > distance ? distance : Q.Range),
Q.Width);
lHits.AddRange(
(from position in positions
where
new Geometry.Polygon.Circle(
position.UnitPosition, (position.Hero.BoundingRadius * 0.85f)).Points
.Any(p => circle.IsInside(p))
select position.Hero));
if ((lHits.Count > hits.Count || lHits.Count == hits.Count && mec.Radius < radius ||
lHits.Count == hits.Count &&
Q.From.Distance(circle.Center.To3D()) < Q.From.Distance(center)) &&
lHits.Any(p => p.NetworkId == target.NetworkId))
{
center = circle.Center.To3D2();
radius = mec.Radius;
hits.Clear();
hits.AddRange(lHits);
}
}
}
}
if (!center.Equals(Vector3.Zero))
{
return new Tuple<int, Vector3>(hits.Count, center);
}
}
}
catch (Exception ex)
{
Global.Logger.AddItem(new LogItem(ex));
}
return new Tuple<int, Vector3>(0, Vector3.Zero);
}
示例6: Laneclearrange
private static void Laneclearrange()
{
if (GetValue("minmana") > Player.ManaPercent) return;
var min =
ObjectManager.Get<Obj_AI_Minion>()
.Where(x => x.Distance(Player) < Q.Range -200 && !x.IsDead && x.IsEnemy && x.IsTargetable);
var objAiMinions = min as IList<Obj_AI_Minion> ?? min.ToList();
foreach (var minions in objAiMinions)
{
minionscircle = new Geometry.Polygon.Circle(minions.Position, 250);
}
var count =objAiMinions.Where(x => minionscircle.IsInside(x));
if (count.Count() < GetValue("minhitwq")) return;
if (!Ismelee() && Q.IsReady() && GetBool("useqlr", typeof(bool)))
Q.Cast(minionscircle.Center);
}
示例7: GetHits
private Tuple<int, List<Obj_AI_Hero>> GetHits(Spell spell,
float overrideWidth = -1f,
Vector3 fromCheck = default(Vector3))
{
try
{
if (fromCheck.Equals(default(Vector3)))
{
fromCheck = Ball.Position;
}
var input = new PredictionInput
{
Collision = true,
CollisionObjects = new[] { CollisionableObjects.YasuoWall },
From = fromCheck,
RangeCheckFrom = fromCheck,
Type = spell.Type,
Radius = spell.Width,
Delay = spell.Delay,
Speed = spell.Speed,
Range = spell.Range,
Aoe = true
};
var width = overrideWidth > 0 ? overrideWidth : spell.Width;
var hits = new List<Obj_AI_Hero>();
var positions = new List<CPrediction.Position>();
foreach (var t in GameObjects.EnemyHeroes)
{
if (t.IsValidTarget(width * 4, true, fromCheck))
{
input.Unit = t;
var prediction = Prediction.GetPrediction(input);
if (prediction.Hitchance >= HitChance.High)
{
if (Utils.IsImmobile(t) || Utils.IsSlowed(t) || t.Distance(fromCheck) < spell.Width * 0.75 ||
t.Distance(fromCheck) < spell.Width &&
(fromCheck.Distance(Ball.Position) > 100 || t.IsFacing(fromCheck, 120f)))
{
positions.Add(new CPrediction.Position(t, prediction.UnitPosition));
}
}
}
}
if (positions.Any())
{
var circle = new Geometry.Polygon.Circle(fromCheck, width);
hits.AddRange(
from position in positions
where
!position.Hero.IsDashing() ||
(position.Hero.Distance(fromCheck) >= 100f &&
position.Hero.Position.Distance(fromCheck) >
position.Hero.GetDashInfo().EndPos.Distance(fromCheck) - 50f)
where circle.IsInside(position.UnitPosition)
select position.Hero);
return new Tuple<int, List<Obj_AI_Hero>>(hits.Count, hits);
}
}
catch (Exception ex)
{
Global.Logger.AddItem(new LogItem(ex));
}
return new Tuple<int, List<Obj_AI_Hero>>(0, new List<Obj_AI_Hero>());
}
示例8: Laneclearmelee
private static void Laneclearmelee()
{
if (GetValue("minmana") > Player.ManaPercent) return;
if (!Ismelee()) return;
var min =
ObjectManager.Get<Obj_AI_Minion>()
.Where(x => x.Distance(Player) < 300 && !x.IsDead && x.IsEnemy).ToList();
if (min.FirstOrDefault() == null)
{
minionscirclemelee = null;
return;
}
foreach (var minions in min)
{
minionscirclemelee = new Geometry.Polygon.Circle(minions.Position, 300);
if (E.IsReady() && GetBool("useelm", typeof(bool)))
{
if (minions.Health < EMeleeDamage(minions))
{
Em.Cast(minions);
}
}
}
var count = min.Where(x => minionscirclemelee.IsInside(x));
var objAiMinions = count as IList<Obj_AI_Minion> ?? count.ToList();
if (objAiMinions.Count() >= GetValue("minhitwq"))
{
if (W.IsReady() && GetBool("usewlm", typeof(bool)))
W.Cast();
if (Q.IsReady() && GetBool("useqlm", typeof(bool)))
Qm.Cast(objAiMinions.FirstOrDefault());
}
}
示例9: GetHits
private Tuple<int, List<Obj_AI_Hero>> GetHits(Spell spell)
{
try
{
var hits = new List<Obj_AI_Hero>();
var positions = (from t in GameObjects.EnemyHeroes
where t.IsValidTarget(spell.Width * 4, true, spell.RangeCheckFrom)
let prediction = spell.GetPrediction(t)
where prediction.Hitchance >= HitChance.High
select new CPrediction.Position(t, prediction.UnitPosition)).ToList();
if (positions.Any())
{
var circle = new Geometry.Polygon.Circle(Ball.Position, spell.Width);
hits.AddRange(
from position in positions
where
!position.Hero.IsDashing() ||
(position.Hero.Distance(Ball.Position) >= 100f &&
position.Hero.Position.Distance(Ball.Position) >
position.Hero.GetDashInfo().EndPos.Distance(Ball.Position) - 50f)
where
new Geometry.Polygon.Circle(
position.UnitPosition,
(position.Hero.BoundingRadius * CPrediction.BoundingRadiusMultiplicator)).Points.Any(
p => circle.IsInside(p))
select position.Hero);
return new Tuple<int, List<Obj_AI_Hero>>(hits.Count, hits);
}
}
catch (Exception ex)
{
Global.Logger.AddItem(new LogItem(ex));
}
return new Tuple<int, List<Obj_AI_Hero>>(0, null);
}
示例10: CastMec
private static void CastMec(Spell spell, int minHit)
{
if (!spell.IsReady() || ObjectManager.Player.HealthPercent <= 10)
return;
foreach (var target in HeroManager.Enemies.Where(x => x.IsValidTarget(spell.Range)))
{
var pred = spell.GetPrediction(target, true);
var nearByEnemies = 1;
if (spell.Type == SkillshotType.SkillshotLine && spell.Collision)
{
var poly = new Geometry.Polygon.Circle(pred.UnitPosition, spell.Width);
nearByEnemies +=
HeroManager.Enemies.Where(x => x.NetworkId != target.NetworkId)
.Count(enemy => poly.IsInside(enemy.ServerPosition));
}
else
{
nearByEnemies = pred.AoeTargetsHitCount;
}
if (nearByEnemies >= minHit)
{
spell.Cast(target);
return;
}
}
}
示例11: CastComboMec
private static void CastComboMec(Spell spell, int minHit)
{
if (!spell.IsReady() || !E.IsReady() || ObjectManager.Player.HealthPercent <= 10)
return;
const int gateDis = 200;
foreach (var target in ObjectManager.Get<Obj_AI_Hero>().Where(x => x.IsValidTarget(spell.Range)))
{
var tarPred = spell.GetPrediction(target, true);
Vector3 gateVector = ObjectManager.Player.Position + Vector3.Normalize(target.ServerPosition - ObjectManager.Player.Position)*gateDis;
var nearByEnemies = 1;
var poly = new Geometry.Polygon.Circle(tarPred.UnitPosition, spell.Width);
nearByEnemies += HeroManager.Enemies.Where(x => x.NetworkId != target.NetworkId).Count(enemy => poly.IsInside(enemy.ServerPosition));
if (ObjectManager.Player.Distance(tarPred.CastPosition) < spell.Range + 100 && nearByEnemies >= minHit)
{
if (Jayce.HammerTime && R.IsReady() && Jayce.CanQcd == 0 && Jayce.CanEcd == 0)
R.Cast();
else if(Jayce.HammerTime)
return;
Console.WriteLine("Hit Combo: " + nearByEnemies);
E.Cast(gateVector);
spell.Cast(tarPred.CastPosition);
return;
}
}
}
示例12: GetUltimateExplosionHits
/// <summary>
/// Get the ultimate explosion hit count with best location
/// </summary>
/// <param name="target"></param>
/// <returns></returns>
private Tuple<int, List<Obj_AI_Hero>, Vector3> GetUltimateExplosionHits(Obj_AI_Hero target)
{
var hits = new List<Obj_AI_Hero>();
var castPosition = Vector3.Zero;
try
{
var prediction = R.GetPrediction(target);
if (prediction.Hitchance >= R.GetHitChance("combo"))
{
castPosition = prediction.CastPosition;
hits.Add(target);
var explosion = new PredictionInput
{
Range = UltimateExplosion.Range,
Delay = Player.Position.Distance(castPosition) / R.Speed + 0.1f,
From = castPosition,
RangeCheckFrom = castPosition,
Radius = UltimateExplosion.Width,
Type = SkillshotType.SkillshotCircle,
Speed = UltimateExplosion.Speed
};
var explosionCircle = new Geometry.Polygon.Circle(castPosition, UltimateExplosion.Width);
foreach (var enemy in GameObjects.EnemyHeroes.Where(e => e.IsValidTarget() && e.NetworkId != target.NetworkId))
{
explosion.Unit = enemy;
var explosionPrediction = Prediction.GetPrediction(explosion);
if (!explosionPrediction.UnitPosition.Equals(Vector3.Zero))
{
var enemyPosition = new Geometry.Polygon.Circle(enemy.Position, enemy.BoundingRadius);
if (enemyPosition.Points.Any(p => explosionCircle.IsInside(p)))
{
hits.Add(enemy);
}
}
}
}
}
catch (Exception ex)
{
Global.Logger.AddItem(new LogItem(ex));
}
return new Tuple<int, List<Obj_AI_Hero>, Vector3>(hits.Count, hits, castPosition);
}