private static void DrawingOnOnDraw(EventArgs args) { if (!Menu.Item("DrawSpell").IsActive()) { return; } var rectangle = new Geometry.Polygon.Rectangle(new Vector3(), new Vector3(), 0); foreach (var missile in ObjectManager.Get<Obj_SpellMissile>().Where(x => x.SpellCaster.IsMe /*&& CastedSpellsNames.Any(y => y == x.SData.Name)*/)) { var missilePosition = missile.Position.To2D(); var unitPosition = missile.StartPosition.To2D(); var endPos = missile.EndPosition.To2D(); //Calculate the real end Point: var direction = (endPos - unitPosition).Normalized(); if (unitPosition.Distance(endPos) > missile.SData.CastRange) { endPos = unitPosition + direction * missile.SData.CastRange; } rectangle.Start = unitPosition; rectangle.End = endPos; rectangle.Width = missile.SData.LineWidth; rectangle.UpdatePolygon(); rectangle.Draw(Color.LightYellow); // Draw Line var start = missilePosition + missile.SData.LineWidth * rectangle.Direction.Perpendicular(); var end = missilePosition - missile.SData.LineWidth * rectangle.Direction.Perpendicular(); Drawing.DrawLine(Drawing.WorldToScreen(start.To3D()), Drawing.WorldToScreen(end.To3D()), 3, Color.Chartreuse); } }