コード例 #1
0
 public static void DrawLaser(Vector2 start, Vector2 end, Vector2 scale, Utils.LaserLineFraming framing)
 {
 }
コード例 #2
0
ファイル: Utils.cs プロジェクト: saniainf/EDTerraria
        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);
        }