Merged branch combat-mission into combat-mission

This commit is contained in:
juanjp600
2016-09-30 15:45:55 -03:00
7 changed files with 93 additions and 93 deletions
@@ -577,21 +577,7 @@ namespace Barotrauma.Items.Components
return (average+100.0f)/2.0f; return (average+100.0f)/2.0f;
} }
//public bool CheckFailure(Character Character) public virtual void FlipX() { }
//{
// 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 bool HasRequiredContainedItems(bool addMessage) public bool HasRequiredContainedItems(bool addMessage)
{ {
@@ -470,6 +470,14 @@ namespace Barotrauma.Items.Components
wireSprite.Depth + ((item.ID % 100) * 0.00001f)); 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) public override XElement Save(XElement parentElement)
{ {
XElement componentElement = base.Save(parentElement); XElement componentElement = base.Save(parentElement);
+10
View File
@@ -798,6 +798,16 @@ namespace Barotrauma
} }
return true; 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) public override void Draw(SpriteBatch spriteBatch, bool editing, bool back = true)
+2 -3
View File
@@ -108,7 +108,7 @@ namespace Barotrauma
{ {
return Vector2.Distance(position, WorldPosition) < 50.0f; return Vector2.Distance(position, WorldPosition) < 50.0f;
} }
public override void Draw(SpriteBatch spriteBatch, bool editing, bool back = true) public override void Draw(SpriteBatch spriteBatch, bool editing, bool back = true)
{ {
if (!editing || wallVertices == null) return; if (!editing || wallVertices == null) return;
@@ -212,8 +212,7 @@ namespace Barotrauma
} }
return editingHUD; return editingHUD;
} }
private bool Reload(GUIButton button, object obj) private bool Reload(GUIButton button, object obj)
{ {
var pathBox = obj as GUITextBox; var pathBox = obj as GUITextBox;
+14
View File
@@ -510,6 +510,20 @@ namespace Barotrauma
entity.isSelected = true; entity.isSelected = true;
selectedList.Add(entity); 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) {} public virtual void DrawEditing(SpriteBatch spriteBatch, Camera cam) {}
+45 -23
View File
@@ -70,7 +70,8 @@ namespace Barotrauma
public Direction StairDirection public Direction StairDirection
{ {
get { return prefab.StairDirection; } get;
private set;
} }
public override string Name public override string Name
@@ -176,6 +177,8 @@ namespace Barotrauma
prefab = sp; prefab = sp;
isHorizontal = (rect.Width>rect.Height); isHorizontal = (rect.Width>rect.Height);
StairDirection = prefab.StairDirection;
if (prefab.HasBody) if (prefab.HasBody)
{ {
@@ -207,29 +210,9 @@ namespace Barotrauma
sections = new WallSection[1]; sections = new WallSection[1];
sections[0] = new WallSection(rect); sections[0] = new WallSection(rect);
if (StairDirection!=Direction.None) if (StairDirection != Direction.None)
{ {
bodies = new List<Body>(); CreateStairBodies();
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);
} }
} }
@@ -242,6 +225,31 @@ namespace Barotrauma
InsertToList(); InsertToList();
} }
private void CreateStairBodies()
{
bodies = new List<Body>();
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() private void CreateSections()
{ {
int xsections = 1, ysections = 1; int xsections = 1, ysections = 1;
@@ -736,6 +744,20 @@ namespace Barotrauma
return newBody; 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) public override XElement Save(XElement parentElement)
{ {
+13 -52
View File
@@ -494,19 +494,11 @@ 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));
for (int i = 0; i < bodyItems.Count; i++)
{
bodyPos[i] = bodyItems[i].WorldPosition;
}
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) continue;
Vector2 relative = e.WorldPosition - WorldPosition;
relative.X = -relative.X*2.0f;
relative.Y = 0.0f;
e.Move(relative);
if (e is LinkedSubmarine) if (e is LinkedSubmarine)
{ {
Submarine sub = ((LinkedSubmarine)e).Sub; Submarine sub = ((LinkedSubmarine)e).Sub;
@@ -518,26 +510,10 @@ namespace Barotrauma
sub.FlipX(parents); sub.FlipX(parents);
} }
} }
} else
/*foreach (Submarine sub in loaded)
{
if (sub != this && sub.Submarine == this && !parents.Contains(sub))
{ {
Vector2 relative = sub.SubBody.Position - SubBody.Position; e.FlipX();
relative.X = -relative.X;
sub.SetPosition(relative + SubBody.Position);
sub.FlipX(parents);
} }
}*/
List<WayPoint> subWayPoints = WayPoint.WayPointList.FindAll(wp => wp.Submarine == this);
foreach (WayPoint wp in subWayPoints)
{
Vector2 relative = wp.WorldPosition - WorldPosition;
relative.X = -relative.X * 2.0f;
relative.Y = 0.0f;
wp.Move(relative);
} }
for (int i = 0; i < MapEntity.mapEntityList.Count; i++) for (int i = 0; i < MapEntity.mapEntityList.Count; i++)
@@ -567,31 +543,17 @@ namespace Barotrauma
foreach (Item item in Item.ItemList) foreach (Item item in Item.ItemList)
{ {
if (item.Submarine != this || bodyItems.Contains(item)) continue; if (bodyItems.Contains(item))
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>();
if (wire != null)
{ {
for (int i = 0; i < wire.Nodes.Count; i++) item.Submarine = this;
{ if (Position == Vector2.Zero) item.Move(-HiddenSubPosition);
wire.Nodes[i] = new Vector2(-wire.Nodes[i].X, wire.Nodes[i].Y); }
} else if (item.Submarine != this)
{
continue;
} }
item.Move(relative); item.FlipX();
}
for (int i=0;i<bodyItems.Count;i++)
{
Vector2 relative = bodyPos[i] - bodyItems[i].WorldPosition;
bodyItems[i].Move(relative);
if (bodyItems[i].Name.ToLower().Contains("suit")) DebugConsole.NewMessage(bodyItems[i].Name,Color.Red);
} }
Item.UpdateHulls(); Item.UpdateHulls();
@@ -600,8 +562,7 @@ namespace Barotrauma
public void Update(float deltaTime) public void Update(float deltaTime)
{ {
if (PlayerInput.KeyHit(InputType.Crouch) && (this == MainSub)) FlipX();
if (PlayerInput.KeyHit(InputType.Crouch)) FlipX();
if (Level.Loaded == null) return; if (Level.Loaded == null) return;