public TrackedCurveProjectile(CurveProjectileObject curveProjectile, AbilityInfo data) { StartPosition = curveProjectile.Position; EndPosition = curveProjectile.TargetPosition; Projectile = curveProjectile; Data = data; Path = new List <Vector2>(); if (Math.Abs(Projectile.CurveWidth) > 0.1) { var middleLength = StartPosition.Distance(EndPosition) / 2; var middleOfLine = StartPosition.Extend(EndPosition, middleLength); var perpendicular = (EndPosition - StartPosition).Normalized.Perpendicular(); var offset = -perpendicular *Math.Sign(Projectile.CurveWidth) * data.Radius; var middleOfArc = middleOfLine + -perpendicular * Projectile.CurveWidth; Path.AddRange(GeometryLib.MakeSmoothCurve(new[] { StartPosition, middleOfArc + offset, EndPosition }, 3)); Path.AddRange(GeometryLib.MakeSmoothCurve(new[] { EndPosition + offset, middleOfArc + offset * 2, StartPosition + offset }, 3)); Path.Add(StartPosition); } Update(); }
private bool IsInsideHitbox(Vector2 pos) { return(pos.Distance(TravelObject.TargetPosition) < Data.Radius + LocalPlayer.Instance.MapCollision.MapCollisionRadius); }