diff --git a/Subsurface/Source/Items/Components/ItemComponent.cs b/Subsurface/Source/Items/Components/ItemComponent.cs index 8854bdf55..bd9c9af23 100644 --- a/Subsurface/Source/Items/Components/ItemComponent.cs +++ b/Subsurface/Source/Items/Components/ItemComponent.cs @@ -577,21 +577,7 @@ namespace Barotrauma.Items.Components return (average+100.0f)/2.0f; } - //public bool CheckFailure(Character Character) - //{ - // foreach (Skill skill in requiredSkills) - // { - // int characterLevel = Character.GetSkillLevel(skill.Name); - // if (characterLevel > skill.Level) continue; - - // item.ApplyStatusEffects(ActionType.OnFailure, 1.0f, Character); - // //Item.ApplyStatusEffects(); - // return true; - - // } - - // return false; - //} + public virtual void FlipX() { } public bool HasRequiredContainedItems(bool addMessage) { diff --git a/Subsurface/Source/Items/Components/Signal/Wire.cs b/Subsurface/Source/Items/Components/Signal/Wire.cs index 50d8b968c..fe71a3d5d 100644 --- a/Subsurface/Source/Items/Components/Signal/Wire.cs +++ b/Subsurface/Source/Items/Components/Signal/Wire.cs @@ -470,6 +470,14 @@ namespace Barotrauma.Items.Components wireSprite.Depth + ((item.ID % 100) * 0.00001f)); } + public override void FlipX() + { + for (int i = 0; i < Nodes.Count; i++) + { + Nodes[i] = new Vector2(-Nodes[i].X, Nodes[i].Y); + } + } + public override XElement Save(XElement parentElement) { XElement componentElement = base.Save(parentElement); diff --git a/Subsurface/Source/Items/Item.cs b/Subsurface/Source/Items/Item.cs index de112c3d8..f85b87ebc 100644 --- a/Subsurface/Source/Items/Item.cs +++ b/Subsurface/Source/Items/Item.cs @@ -798,6 +798,16 @@ namespace Barotrauma } return true; + } + + public override void FlipX() + { + base.FlipX(); + + foreach (ItemComponent component in components) + { + component.FlipX(); + } } public override void Draw(SpriteBatch spriteBatch, bool editing, bool back = true) diff --git a/Subsurface/Source/Map/LinkedSubmarine.cs b/Subsurface/Source/Map/LinkedSubmarine.cs index b70672f1d..aef2d6ccf 100644 --- a/Subsurface/Source/Map/LinkedSubmarine.cs +++ b/Subsurface/Source/Map/LinkedSubmarine.cs @@ -108,7 +108,7 @@ namespace Barotrauma { return Vector2.Distance(position, WorldPosition) < 50.0f; } - + public override void Draw(SpriteBatch spriteBatch, bool editing, bool back = true) { if (!editing || wallVertices == null) return; @@ -212,8 +212,7 @@ namespace Barotrauma } return editingHUD; } - - + private bool Reload(GUIButton button, object obj) { var pathBox = obj as GUITextBox; diff --git a/Subsurface/Source/Map/MapEntity.cs b/Subsurface/Source/Map/MapEntity.cs index 5265c0cf7..c608941e8 100644 --- a/Subsurface/Source/Map/MapEntity.cs +++ b/Subsurface/Source/Map/MapEntity.cs @@ -510,6 +510,20 @@ namespace Barotrauma entity.isSelected = true; selectedList.Add(entity); } + + public virtual void FlipX() + { + if (Submarine == null) + { + DebugConsole.ThrowError("Couldn't flip MapEntity \""+Name+"\", submarine==null"); + return; + } + + Vector2 relative = WorldPosition - Submarine.WorldPosition; + relative.Y = 0.0f; + + Move(-relative * 2.0f); + } public virtual void DrawEditing(SpriteBatch spriteBatch, Camera cam) {} diff --git a/Subsurface/Source/Map/Structure.cs b/Subsurface/Source/Map/Structure.cs index 8ea943bbe..1ae8facc9 100644 --- a/Subsurface/Source/Map/Structure.cs +++ b/Subsurface/Source/Map/Structure.cs @@ -70,7 +70,8 @@ namespace Barotrauma public Direction StairDirection { - get { return prefab.StairDirection; } + get; + private set; } public override string Name @@ -176,6 +177,8 @@ namespace Barotrauma prefab = sp; isHorizontal = (rect.Width>rect.Height); + + StairDirection = prefab.StairDirection; if (prefab.HasBody) { @@ -207,29 +210,9 @@ namespace Barotrauma sections = new WallSection[1]; sections[0] = new WallSection(rect); - if (StairDirection!=Direction.None) + if (StairDirection != Direction.None) { - bodies = new List
(); - - Body newBody = BodyFactory.CreateRectangle(GameMain.World, - ConvertUnits.ToSimUnits(rect.Width * Math.Sqrt(2.0) + Submarine.GridSize.X*3.0f), - ConvertUnits.ToSimUnits(10), - 1.5f); - - newBody.BodyType = BodyType.Static; - Vector2 stairPos = new Vector2(Position.X, rect.Y - rect.Height + rect.Width / 2.0f); - stairPos += new Vector2( - (StairDirection == Direction.Right) ? -Submarine.GridSize.X*1.5f : Submarine.GridSize.X*1.5f, - - Submarine.GridSize.Y*2.0f); - - newBody.Position = ConvertUnits.ToSimUnits(stairPos); - newBody.Rotation = (StairDirection == Direction.Right) ? MathHelper.PiOver4 : -MathHelper.PiOver4; - newBody.Friction = 0.8f; - - newBody.CollisionCategories = Physics.CollisionStairs; - - newBody.UserData = this; - bodies.Add(newBody); + CreateStairBodies(); } } @@ -242,6 +225,31 @@ namespace Barotrauma InsertToList(); } + private void CreateStairBodies() + { + bodies = new List(); + + Body newBody = BodyFactory.CreateRectangle(GameMain.World, + ConvertUnits.ToSimUnits(rect.Width * Math.Sqrt(2.0) + Submarine.GridSize.X * 3.0f), + ConvertUnits.ToSimUnits(10), + 1.5f); + + newBody.BodyType = BodyType.Static; + Vector2 stairPos = new Vector2(Position.X, rect.Y - rect.Height + rect.Width / 2.0f); + stairPos += new Vector2( + (StairDirection == Direction.Right) ? -Submarine.GridSize.X * 1.5f : Submarine.GridSize.X * 1.5f, + -Submarine.GridSize.Y * 2.0f); + + newBody.Position = ConvertUnits.ToSimUnits(stairPos); + newBody.Rotation = (StairDirection == Direction.Right) ? MathHelper.PiOver4 : -MathHelper.PiOver4; + newBody.Friction = 0.8f; + + newBody.CollisionCategories = Physics.CollisionStairs; + + newBody.UserData = this; + bodies.Add(newBody); + } + private void CreateSections() { int xsections = 1, ysections = 1; @@ -736,6 +744,20 @@ namespace Barotrauma return newBody; } + public override void FlipX() + { + base.FlipX(); + + if (StairDirection != Direction.None) + { + StairDirection = StairDirection == Direction.Left ? Direction.Right : Direction.Left; + bodies.ForEach(b => GameMain.World.RemoveBody(b)); + + CreateStairBodies(); + } + + //todo: flip sprites & wall sections + } public override XElement Save(XElement parentElement) { diff --git a/Subsurface/Source/Map/Submarine.cs b/Subsurface/Source/Map/Submarine.cs index 4acb41e1a..655cd494b 100644 --- a/Subsurface/Source/Map/Submarine.cs +++ b/Subsurface/Source/Map/Submarine.cs @@ -494,19 +494,11 @@ namespace Barotrauma Item.UpdateHulls(); List