54 lines
1.7 KiB
C#
54 lines
1.7 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Xml.Linq;
|
|
using FarseerPhysics;
|
|
using FarseerPhysics.Collision.Shapes;
|
|
using FarseerPhysics.Common;
|
|
using FarseerPhysics.Dynamics;
|
|
using FarseerPhysics.Dynamics.Joints;
|
|
using FarseerPhysics.Factories;
|
|
using Microsoft.Xna.Framework;
|
|
using Microsoft.Xna.Framework.Graphics;
|
|
|
|
namespace Barotrauma.Items.Components
|
|
{
|
|
partial class Rope : ItemComponent, IDrawableComponent
|
|
{
|
|
public void Draw(SpriteBatch spriteBatch, bool editing = false)
|
|
{
|
|
if (!IsActive) return;
|
|
|
|
RevoluteJoint firstJoint = null;
|
|
|
|
for (int i = 0; i < ropeBodies.Length - 1; i++)
|
|
{
|
|
if (!ropeBodies[i].Enabled) continue;
|
|
|
|
if (firstJoint == null) firstJoint = ropeJoints[i];
|
|
|
|
DrawSection(spriteBatch, ropeJoints[i].WorldAnchorA, ropeJoints[i + 1].WorldAnchorA, i);
|
|
}
|
|
|
|
if (gunJoint == null || firstJoint == null) return;
|
|
|
|
DrawSection(spriteBatch, gunJoint.WorldAnchorA, firstJoint.WorldAnchorA, 0);
|
|
|
|
}
|
|
|
|
private void DrawSection(SpriteBatch spriteBatch, Vector2 start, Vector2 end, int i)
|
|
{
|
|
start.Y = -start.Y;
|
|
end.Y = -end.Y;
|
|
|
|
spriteBatch.Draw(sprite.Texture,
|
|
ConvertUnits.ToDisplayUnits(start), null, Color.White,
|
|
MathUtils.VectorToAngle(end - start),
|
|
new Vector2(0.0f, sprite.size.Y / 2.0f),
|
|
new Vector2((ConvertUnits.ToDisplayUnits(Vector2.Distance(start, end))) / sprite.Texture.Width, 1.0f),
|
|
SpriteEffects.None,
|
|
sprite.Depth + i * 0.00001f);
|
|
}
|
|
}
|
|
}
|