コード例 #1
0
        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();
        }
コード例 #2
0
 private bool IsInsideHitbox(Vector2 pos)
 {
     return(pos.Distance(TravelObject.TargetPosition) < Data.Radius + LocalPlayer.Instance.MapCollision.MapCollisionRadius);
 }