Fixed physics item & wire flipping

This commit is contained in:
Regalis
2016-09-30 19:00:12 +03:00
parent f6b82eb095
commit 0da9f58325
+21 -16
View File
@@ -285,6 +285,8 @@ namespace Barotrauma
public static void Draw(SpriteBatch spriteBatch, bool editing = false) public static void Draw(SpriteBatch spriteBatch, bool editing = false)
{ {
if (PlayerInput.KeyHit(InputType.Crouch)) Submarine.MainSub.FlipX();
for (int i = 0; i < MapEntity.mapEntityList.Count; i++ ) for (int i = 0; i < MapEntity.mapEntityList.Count; i++ )
{ {
MapEntity.mapEntityList[i].Draw(spriteBatch, editing); MapEntity.mapEntityList[i].Draw(spriteBatch, editing);
@@ -494,19 +496,23 @@ namespace Barotrauma
Item.UpdateHulls(); Item.UpdateHulls();
List<Item> bodyItems = Item.ItemList.FindAll(it => it.Submarine == this && it.body != null); List<Item> bodyItems = Item.ItemList.FindAll(it => it.Submarine == this && it.body != null);
List<Vector2> bodyPos = new List<Vector2>(); bodyItems.ForEach(it => bodyPos.Add(Vector2.Zero));
List<Vector2> bodyPos = new List<Vector2>();
for (int i = 0; i < bodyItems.Count; i++) for (int i = 0; i < bodyItems.Count; i++)
{ {
bodyPos[i] = bodyItems[i].WorldPosition; Vector2 relative = bodyItems[i].WorldPosition - WorldPosition;
relative.Y = 0.0f;
bodyPos.Add(bodyItems[i].Position - relative*2.0f);
} }
foreach (MapEntity e in MapEntity.mapEntityList) foreach (MapEntity e in MapEntity.mapEntityList)
{ {
if (e.MoveWithLevel || e.Submarine != this || e is Item || e is WayPoint) continue; if (e.MoveWithLevel || e.Submarine != this || e is Item || e is WayPoint) continue;
Vector2 relative = e.WorldPosition - WorldPosition; Vector2 relative = e.WorldPosition - WorldPosition;
relative.X = -relative.X*2.0f;
relative.Y = 0.0f; relative.Y = 0.0f;
e.Move(relative); e.Move(-relative * 2.0f);
if (e is LinkedSubmarine) if (e is LinkedSubmarine)
{ {
Submarine sub = ((LinkedSubmarine)e).Sub; Submarine sub = ((LinkedSubmarine)e).Sub;
@@ -567,12 +573,7 @@ namespace Barotrauma
foreach (Item item in Item.ItemList) foreach (Item item in Item.ItemList)
{ {
if (item.Submarine != this || bodyItems.Contains(item)) continue; if (item.Submarine != this) continue;
Vector2 relative;
relative = item.WorldPosition - WorldPosition;
relative.X = -relative.X * 2.0f;
relative.Y = 0.0f;
Items.Components.Wire wire = item.GetComponent<Items.Components.Wire>(); Items.Components.Wire wire = item.GetComponent<Items.Components.Wire>();
@@ -584,14 +585,18 @@ namespace Barotrauma
} }
} }
item.Move(relative); if (item.Submarine != this || bodyItems.Contains(item)) continue;
Vector2 relative = item.WorldPosition - WorldPosition;
relative.Y = 0.0f;
item.Move(-relative * 2.0f);
} }
for (int i=0;i<bodyItems.Count;i++) for (int i = 0; i < bodyItems.Count; i++)
{ {
Vector2 relative = bodyPos[i] - bodyItems[i].WorldPosition; bodyItems[i].SetTransform(ConvertUnits.ToSimUnits(bodyPos[i]), bodyItems[i].body.Rotation);
bodyItems[i].Move(relative); bodyItems[i].Submarine = this;
if (bodyItems[i].Name.ToLower().Contains("suit")) DebugConsole.NewMessage(bodyItems[i].Name,Color.Red);
} }
Item.UpdateHulls(); Item.UpdateHulls();