From a477dad1b2e956c413d4dc901f1b16c5c233641f Mon Sep 17 00:00:00 2001 From: Regalis Date: Thu, 19 May 2016 19:47:26 +0300 Subject: [PATCH] Renamed the CollisionMisc collision category to CollisionItem, teleporting items inside/outside the sub if their physicsbody leaves/enters a hull, powercontainer charge can be changed in editor (i.e. batteries can be set to fully loaded) --- .../Source/Characters/Animation/FishAnimController.cs | 2 +- Subsurface/Source/Characters/Limb.cs | 2 +- .../Source/Items/Components/Holdable/MeleeWeapon.cs | 2 +- .../Source/Items/Components/Power/PowerContainer.cs | 2 +- Subsurface/Source/Items/Components/Projectile.cs | 6 +++--- Subsurface/Source/Items/Components/Rope.cs | 2 +- .../Source/Items/Components/Signal/LightComponent.cs | 2 +- Subsurface/Source/Items/Item.cs | 11 +++++++++++ Subsurface/Source/Map/Submarine.cs | 2 +- Subsurface/Source/Map/SubmarineBody.cs | 4 ++-- Subsurface/Source/Physics/Physics.cs | 2 +- Subsurface/Source/Physics/PhysicsBody.cs | 2 +- 12 files changed, 25 insertions(+), 14 deletions(-) diff --git a/Subsurface/Source/Characters/Animation/FishAnimController.cs b/Subsurface/Source/Characters/Animation/FishAnimController.cs index 8e9731489..4848c309b 100644 --- a/Subsurface/Source/Characters/Animation/FishAnimController.cs +++ b/Subsurface/Source/Characters/Animation/FishAnimController.cs @@ -284,7 +284,7 @@ namespace Barotrauma if (fixture == null || fixture.CollisionCategories == Physics.CollisionCharacter || fixture.CollisionCategories == Physics.CollisionNone || - fixture.CollisionCategories == Physics.CollisionMisc) return -1; + fixture.CollisionCategories == Physics.CollisionItem) return -1; Structure structure = fixture.Body.UserData as Structure; if (structure != null) diff --git a/Subsurface/Source/Characters/Limb.cs b/Subsurface/Source/Characters/Limb.cs index cc59ba827..a1e7d6a76 100644 --- a/Subsurface/Source/Characters/Limb.cs +++ b/Subsurface/Source/Characters/Limb.cs @@ -212,7 +212,7 @@ namespace Barotrauma { //limbs don't collide with each other body.CollisionCategories = Physics.CollisionCharacter; - body.CollidesWith = Physics.CollisionAll & ~Physics.CollisionCharacter & ~Physics.CollisionMisc; + body.CollidesWith = Physics.CollisionAll & ~Physics.CollisionCharacter & ~Physics.CollisionItem; } impactTolerance = ToolBox.GetAttributeFloat(element, "impacttolerance", 10.0f); diff --git a/Subsurface/Source/Items/Components/Holdable/MeleeWeapon.cs b/Subsurface/Source/Items/Components/Holdable/MeleeWeapon.cs index bc56a8bb3..663561d5b 100644 --- a/Subsurface/Source/Items/Components/Holdable/MeleeWeapon.cs +++ b/Subsurface/Source/Items/Components/Holdable/MeleeWeapon.cs @@ -200,7 +200,7 @@ namespace Barotrauma.Items.Components { item.body.FarseerBody.OnCollision -= OnCollision; - item.body.CollisionCategories = Physics.CollisionMisc; + item.body.CollisionCategories = Physics.CollisionItem; item.body.CollidesWith = Physics.CollisionWall; //foreach (Limb l in picker.AnimController.Limbs) diff --git a/Subsurface/Source/Items/Components/Power/PowerContainer.cs b/Subsurface/Source/Items/Components/Power/PowerContainer.cs index 23ab0e9e9..5ecaa21bd 100644 --- a/Subsurface/Source/Items/Components/Power/PowerContainer.cs +++ b/Subsurface/Source/Items/Components/Power/PowerContainer.cs @@ -36,7 +36,7 @@ namespace Barotrauma.Items.Components get { return maxOutput; } } - [HasDefaultValue(0.0f, true)] + [Editable, HasDefaultValue(0.0f, true)] public float Charge { get { return charge; } diff --git a/Subsurface/Source/Items/Components/Projectile.cs b/Subsurface/Source/Items/Components/Projectile.cs index c36601c20..688ab20da 100644 --- a/Subsurface/Source/Items/Components/Projectile.cs +++ b/Subsurface/Source/Items/Components/Projectile.cs @@ -155,8 +155,8 @@ namespace Barotrauma.Items.Components item.Move(-submarine.Position); item.Submarine = submarine; item.body.Submarine = submarine; - item.FindHull(); - return false; + //item.FindHull(); + return true; } Limb limb; @@ -177,7 +177,7 @@ namespace Barotrauma.Items.Components item.body.FarseerBody.OnCollision -= OnProjectileCollision; item.body.FarseerBody.IsBullet = false; - item.body.CollisionCategories = Physics.CollisionMisc; + item.body.CollisionCategories = Physics.CollisionItem; item.body.CollidesWith = Physics.CollisionWall | Physics.CollisionLevel; IgnoredBodies.Clear(); diff --git a/Subsurface/Source/Items/Components/Rope.cs b/Subsurface/Source/Items/Components/Rope.cs index baaf352b5..846ed5eea 100644 --- a/Subsurface/Source/Items/Components/Rope.cs +++ b/Subsurface/Source/Items/Components/Rope.cs @@ -98,7 +98,7 @@ namespace Barotrauma.Items.Components ropeList[i].Mass = 0.01f; ropeList[i].Enabled = false; //only collide with the map - ropeList[i].CollisionCategories = Physics.CollisionMisc; + ropeList[i].CollisionCategories = Physics.CollisionItem; ropeList[i].CollidesWith = Physics.CollisionWall; ropeBodies[i] = new PhysicsBody(ropeList[i]); diff --git a/Subsurface/Source/Items/Components/Signal/LightComponent.cs b/Subsurface/Source/Items/Components/Signal/LightComponent.cs index d30ec168e..987bc9172 100644 --- a/Subsurface/Source/Items/Components/Signal/LightComponent.cs +++ b/Subsurface/Source/Items/Components/Signal/LightComponent.cs @@ -121,7 +121,7 @@ namespace Barotrauma.Items.Components { base.Update(deltaTime, cam); - light.Submarine = (item.CurrentHull == null) ? null : item.CurrentHull.Submarine; + light.Submarine = item.Submarine; if (item.Container != null) { diff --git a/Subsurface/Source/Items/Item.cs b/Subsurface/Source/Items/Item.cs index 48dc671ac..501b408f4 100644 --- a/Subsurface/Source/Items/Item.cs +++ b/Subsurface/Source/Items/Item.cs @@ -707,7 +707,18 @@ namespace Barotrauma if (Math.Abs(body.LinearVelocity.X) > 0.01f || Math.Abs(body.LinearVelocity.Y) > 0.01f) { + Submarine prevSub = Submarine; + FindHull(); + + if (Submarine == null && prevSub != null) + { + body.SetTransform(body.SimPosition + prevSub.SimPosition, body.Rotation); + } + else if (Submarine != null && prevSub == null) + { + body.SetTransform(body.SimPosition - Submarine.SimPosition, body.Rotation); + } Vector2 moveAmount = body.SimPosition - body.LastSentPosition; if (parentInventory == null && moveAmount != Vector2.Zero && moveAmount.Length() > NetConfig.ItemPosUpdateDistance) diff --git a/Subsurface/Source/Map/Submarine.cs b/Subsurface/Source/Map/Submarine.cs index ad5c22bfb..74cf538d3 100644 --- a/Subsurface/Source/Map/Submarine.cs +++ b/Subsurface/Source/Map/Submarine.cs @@ -323,7 +323,7 @@ namespace Barotrauma { if (fixture == null || fixture.CollisionCategories == Category.None || - fixture.CollisionCategories == Physics.CollisionMisc) return -1; + fixture.CollisionCategories == Physics.CollisionItem) return -1; if (collisionCategory != null && !fixture.CollisionCategories.HasFlag((Category)collisionCategory)) return -1; diff --git a/Subsurface/Source/Map/SubmarineBody.cs b/Subsurface/Source/Map/SubmarineBody.cs index 880d54422..43678d85f 100644 --- a/Subsurface/Source/Map/SubmarineBody.cs +++ b/Subsurface/Source/Map/SubmarineBody.cs @@ -152,8 +152,8 @@ namespace Barotrauma body.BodyType = BodyType.Dynamic; - body.CollisionCategories = Physics.CollisionMisc | Physics.CollisionWall; - body.CollidesWith = Physics.CollisionLevel | Physics.CollisionCharacter | Physics.CollisionProjectile; + body.CollisionCategories = Physics.CollisionWall; + body.CollidesWith = Physics.CollisionItem | Physics.CollisionLevel | Physics.CollisionCharacter | Physics.CollisionProjectile; body.Restitution = Restitution; body.Friction = Friction; body.FixedRotation = true; diff --git a/Subsurface/Source/Physics/Physics.cs b/Subsurface/Source/Physics/Physics.cs index 41dfe29b3..0ef6d42db 100644 --- a/Subsurface/Source/Physics/Physics.cs +++ b/Subsurface/Source/Physics/Physics.cs @@ -14,7 +14,7 @@ namespace Barotrauma public const Category CollisionCharacter = Category.Cat2; public const Category CollisionPlatform = Category.Cat3; public const Category CollisionStairs = Category.Cat4; - public const Category CollisionMisc = Category.Cat5; + public const Category CollisionItem = Category.Cat5; public const Category CollisionProjectile = Category.Cat6; public const Category CollisionLevel = Category.Cat7; diff --git a/Subsurface/Source/Physics/PhysicsBody.cs b/Subsurface/Source/Physics/PhysicsBody.cs index 65b03900c..2af44a175 100644 --- a/Subsurface/Source/Physics/PhysicsBody.cs +++ b/Subsurface/Source/Physics/PhysicsBody.cs @@ -239,7 +239,7 @@ namespace Barotrauma dir = 1.0f; - body.CollisionCategories = Physics.CollisionMisc; + body.CollisionCategories = Physics.CollisionItem; body.CollidesWith = Physics.CollisionWall | Physics.CollisionLevel; body.Friction = ToolBox.GetAttributeFloat(element, "friction", 0.3f);