public static void DrawLaser(SpriteBatch sb, Texture2D tex, Vector2 start, Vector2 end, Vector2 scale, Utils.LaserLineFraming framing) { Vector2 vector2_1 = start; Vector2 vector2_2 = Vector2.Normalize(end - start); float distanceLeft1 = (end - start).Length(); float rotation = Utils.ToRotation(vector2_2) - 1.570796f; if (Utils.HasNaNs(vector2_2)) { return; } float distanceCovered; Rectangle frame; Vector2 origin; Color color; framing(0, vector2_1, distanceLeft1, new Rectangle(), out distanceCovered, out frame, out origin, out color); sb.Draw(tex, vector2_1, new Rectangle?(frame), color, rotation, Utils.Size(frame) / 2f, scale, SpriteEffects.None, 0.0f); float distanceLeft2 = distanceLeft1 - distanceCovered * scale.Y; Vector2 vector2_3 = vector2_1 + vector2_2 * ((float)frame.Height - origin.Y) * scale.Y; if ((double)distanceLeft2 > 0.0) { float num = 0.0f; while ((double)num + 1.0 < (double)distanceLeft2) { framing(1, vector2_3, distanceLeft2 - num, frame, out distanceCovered, out frame, out origin, out color); if ((double)distanceLeft2 - (double)num < (double)frame.Height) { distanceCovered *= (distanceLeft2 - num) / (float)frame.Height; frame.Height = (int)((double)distanceLeft2 - (double)num); } sb.Draw(tex, vector2_3, new Rectangle?(frame), color, rotation, origin, scale, SpriteEffects.None, 0.0f); num += distanceCovered * scale.Y; vector2_3 += vector2_2 * distanceCovered * scale.Y; } } framing(2, vector2_3, distanceLeft2, new Rectangle(), out distanceCovered, out frame, out origin, out color); sb.Draw(tex, vector2_3, new Rectangle?(frame), color, rotation, origin, scale, SpriteEffects.None, 0.0f); }