From 6876bdc48191b06029a9c8028a303b8d1ec07514 Mon Sep 17 00:00:00 2001 From: Regalis Date: Sat, 16 Apr 2016 15:33:28 +0300 Subject: [PATCH] Crates, some new chemicals, statuseffects that are triggered on impact, explosions can trigger "OnFire" statuseffects, applying impulses to items (and not just characters) when the submarine hits something --- Subsurface/Barotrauma.csproj | 12 ++- .../{Lockers => Containers}/cabinets.png | Bin .../Content/Items/Containers/containers.xml | 89 ++++++++++++++++++ .../Content/Items/Containers/crates.png | Bin 0 -> 14205 bytes .../Items/{Lockers => Containers}/locker.png | Bin Subsurface/Content/Items/Jobgear/misc.xml | 16 ++++ Subsurface/Content/Items/Lockers/lockers.xml | 40 -------- Subsurface/Content/Items/Medical/medical.xml | 21 ++++- .../Content/Items/Weapons/explosives.xml | 48 ++++++++++ Subsurface/Content/Items/Weapons/weapons.xml | 2 +- .../Data/ContentPackages/Vanilla 0.3.xml | 2 +- .../BackgroundSpriteManager.cs | 7 -- Subsurface/Source/Characters/StatusEffect.cs | 22 ++--- Subsurface/Source/Items/Item.cs | 39 +++++++- Subsurface/Source/Items/ItemPrefab.cs | 13 ++- Subsurface/Source/Map/Explosion.cs | 17 +++- Subsurface/Source/Map/FireSource.cs | 2 +- Subsurface/Source/Map/SubmarineBody.cs | 15 ++- 18 files changed, 271 insertions(+), 74 deletions(-) rename Subsurface/Content/Items/{Lockers => Containers}/cabinets.png (100%) create mode 100644 Subsurface/Content/Items/Containers/containers.xml create mode 100644 Subsurface/Content/Items/Containers/crates.png rename Subsurface/Content/Items/{Lockers => Containers}/locker.png (100%) delete mode 100644 Subsurface/Content/Items/Lockers/lockers.xml diff --git a/Subsurface/Barotrauma.csproj b/Subsurface/Barotrauma.csproj index 42058a519..02c92edaf 100644 --- a/Subsurface/Barotrauma.csproj +++ b/Subsurface/Barotrauma.csproj @@ -515,7 +515,10 @@ PreserveNewest - + + PreserveNewest + + PreserveNewest @@ -585,6 +588,7 @@ PreserveNewest + Designer PreserveNewest @@ -600,6 +604,7 @@ PreserveNewest + Designer PreserveNewest @@ -611,10 +616,10 @@ PreserveNewest Designer - + PreserveNewest - + PreserveNewest @@ -885,6 +890,7 @@ PreserveNewest + Designer PreserveNewest diff --git a/Subsurface/Content/Items/Lockers/cabinets.png b/Subsurface/Content/Items/Containers/cabinets.png similarity index 100% rename from Subsurface/Content/Items/Lockers/cabinets.png rename to Subsurface/Content/Items/Containers/cabinets.png diff --git a/Subsurface/Content/Items/Containers/containers.xml b/Subsurface/Content/Items/Containers/containers.xml new file mode 100644 index 000000000..53d8a3c4d --- /dev/null +++ b/Subsurface/Content/Items/Containers/containers.xml @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Subsurface/Content/Items/Containers/crates.png b/Subsurface/Content/Items/Containers/crates.png new file mode 100644 index 0000000000000000000000000000000000000000..7fbd7dc632dc0b6885e6ac30a307527a7b2720b1 GIT binary patch literal 14205 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 + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Subsurface/Content/Items/Medical/medical.xml b/Subsurface/Content/Items/Medical/medical.xml index e49e0e638..e9986d730 100644 --- a/Subsurface/Content/Items/Medical/medical.xml +++ b/Subsurface/Content/Items/Medical/medical.xml @@ -290,6 +290,7 @@ + @@ -349,7 +350,25 @@ - + + + + + + + + + + + + + + diff --git a/Subsurface/Content/Items/Weapons/explosives.xml b/Subsurface/Content/Items/Weapons/explosives.xml index 2118c8f4f..e555532c6 100644 --- a/Subsurface/Content/Items/Weapons/explosives.xml +++ b/Subsurface/Content/Items/Weapons/explosives.xml @@ -29,6 +29,26 @@ + + + + + + + + + + + + + + + + @@ -47,6 +67,7 @@ + @@ -81,4 +102,31 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Subsurface/Content/Items/Weapons/weapons.xml b/Subsurface/Content/Items/Weapons/weapons.xml index 02975be2a..a50d834ad 100644 --- a/Subsurface/Content/Items/Weapons/weapons.xml +++ b/Subsurface/Content/Items/Weapons/weapons.xml @@ -172,7 +172,7 @@ category="Equipment" pickdistance="200" price="500" - tags="weapon" + tags="weapon,smallitem" description="HONK"> diff --git a/Subsurface/Data/ContentPackages/Vanilla 0.3.xml b/Subsurface/Data/ContentPackages/Vanilla 0.3.xml index a2fcd44e4..01edf30c6 100644 --- a/Subsurface/Data/ContentPackages/Vanilla 0.3.xml +++ b/Subsurface/Data/ContentPackages/Vanilla 0.3.xml @@ -4,6 +4,7 @@ + @@ -19,7 +20,6 @@ - diff --git a/Subsurface/Source/Characters/BackgroundSprite/BackgroundSpriteManager.cs b/Subsurface/Source/Characters/BackgroundSprite/BackgroundSpriteManager.cs index 347453cfb..b0985f2e7 100644 --- a/Subsurface/Source/Characters/BackgroundSprite/BackgroundSpriteManager.cs +++ b/Subsurface/Source/Characters/BackgroundSprite/BackgroundSpriteManager.cs @@ -179,9 +179,6 @@ namespace Barotrauma public void DrawSprites(SpriteBatch spriteBatch, Camera cam) { - Stopwatch sw = new Stopwatch(); - sw.Start(); - Rectangle indices = Rectangle.Empty; indices.X = (int)Math.Floor(cam.WorldView.X / (float)GridSize) - 1; if (indices.X >= sprites.GetLength(0)) return; @@ -189,7 +186,6 @@ namespace Barotrauma indices.Y = (int)Math.Floor((cam.WorldView.Y - cam.WorldView.Height) / (float)GridSize) - 1; if (indices.Y >= sprites.GetLength(1)) return; - indices.Width = (int)Math.Ceiling(cam.WorldView.Right / (float)GridSize) + 1; if (indices.Width < 0) return; indices.Height = (int)Math.Ceiling(cam.WorldView.Y / (float)GridSize) + 1; @@ -212,9 +208,6 @@ namespace Barotrauma } } } - - sw.Stop(); - Debug.WriteLine(sw.ElapsedMilliseconds + " - "+sw.ElapsedTicks); } private BackgroundSpritePrefab GetRandomPrefab() diff --git a/Subsurface/Source/Characters/StatusEffect.cs b/Subsurface/Source/Characters/StatusEffect.cs index 0cc621309..3da1ab535 100644 --- a/Subsurface/Source/Characters/StatusEffect.cs +++ b/Subsurface/Source/Characters/StatusEffect.cs @@ -219,17 +219,7 @@ namespace Barotrauma } protected void Apply(float deltaTime, Entity entity, List targets) - { - - if (explosion != null) explosion.Explode(entity.WorldPosition); - - if (FireSize > 0.0f) - { - var fire = new FireSource(entity.WorldPosition); - - fire.Size = new Vector2(FireSize, fire.Size.Y); - } - + { if (sound != null) sound.Play(1.0f, 1000.0f, entity.WorldPosition); if (useItem) @@ -259,8 +249,16 @@ namespace Barotrauma ApplyToProperty(property, propertyEffects[i], deltaTime); } } - } + + if (explosion != null) explosion.Explode(entity.WorldPosition); + + if (FireSize > 0.0f) + { + var fire = new FireSource(entity.WorldPosition); + + fire.Size = new Vector2(FireSize, fire.Size.Y); + } } private IEnumerable ApplyToPropertyOverDuration(float duration, ObjectProperty property, object value) diff --git a/Subsurface/Source/Items/Item.cs b/Subsurface/Source/Items/Item.cs index 90f39e1f2..df8dc53dd 100644 --- a/Subsurface/Source/Items/Item.cs +++ b/Subsurface/Source/Items/Item.cs @@ -12,13 +12,18 @@ using Barotrauma.Items.Components; using System.ComponentModel; using System.Collections.ObjectModel; using FarseerPhysics.Dynamics; +using FarseerPhysics.Dynamics.Contacts; namespace Barotrauma { public enum ActionType { - Always, OnPicked, OnWearing, OnContaining, OnContained, OnActive, OnUse, OnFailure, OnBroken, OnFire, InWater + Always, OnPicked, OnUse, + OnWearing, OnContaining, OnContained, + OnActive, OnFailure, OnBroken, + OnFire, InWater, + OnImpact } class Item : MapEntity, IDamageable, IPropertyObject @@ -109,6 +114,11 @@ namespace Barotrauma get { return prefab.Description; } } + public float ImpactTolerance + { + get { return prefab.ImpactTolerance; } + } + public override Sprite Sprite { get { return prefab.sprite; } @@ -383,6 +393,12 @@ namespace Barotrauma } } + //containers need to handle collision events to notify items inside them about the impact + if (ImpactTolerance > 0.0f || GetComponent() != null) + { + if (body != null) body.FarseerBody.OnCollision += OnCollision; + } + InsertToList(); ItemList.Add(this); } @@ -729,6 +745,27 @@ namespace Barotrauma body.ApplyTorque(body.AngularVelocity * volume * -0.05f); } + private bool OnCollision(Fixture f1, Fixture f2, Contact contact) + { + Vector2 normal = contact.Manifold.LocalNormal; + + float impact = Vector2.Dot(f1.Body.LinearVelocity, -normal); + + if (ImpactTolerance > 0.0f && impact > ImpactTolerance) ApplyStatusEffects(ActionType.OnImpact, 1.0f); + + var containedItems = ContainedItems; + if (containedItems != null) + { + foreach (Item contained in containedItems) + { + if (contained.body == null) continue; + contained.OnCollision(f1, f2, contact); + } + } + + return true; + } + public override void Draw(SpriteBatch spriteBatch, bool editing, bool back = true) { Color color = (isSelected && editing) ? color = Color.Red : spriteColor; diff --git a/Subsurface/Source/Items/ItemPrefab.cs b/Subsurface/Source/Items/ItemPrefab.cs index f33ba443c..10342da36 100644 --- a/Subsurface/Source/Items/ItemPrefab.cs +++ b/Subsurface/Source/Items/ItemPrefab.cs @@ -45,6 +45,8 @@ namespace Barotrauma public readonly bool FireProof; + private float impactTolerance; + public string ConfigFile { get { return configFile; } @@ -87,6 +89,13 @@ namespace Barotrauma get { return offsetOnSelected; } } + + public float ImpactTolerance + { + get { return impactTolerance; } + set { impactTolerance = Math.Max(value, 0.0f); } + } + public bool CanUseOnSelf { get; @@ -213,7 +222,9 @@ namespace Barotrauma CanUseOnSelf = ToolBox.GetAttributeBool(element, "canuseonself", false); - FireProof = ToolBox.GetAttributeBool(element, "fireproof", false); + FireProof = ToolBox.GetAttributeBool(element, "fireproof", false); + + ImpactTolerance = ToolBox.GetAttributeFloat(element, "impacttolerance", 0.0f); string categoriesStr = ToolBox.GetAttributeString(element, "category", "Misc"); diff --git a/Subsurface/Source/Map/Explosion.cs b/Subsurface/Source/Map/Explosion.cs index 0bf66e201..9fb34e25c 100644 --- a/Subsurface/Source/Map/Explosion.cs +++ b/Subsurface/Source/Map/Explosion.cs @@ -39,8 +39,6 @@ namespace Barotrauma { GameMain.ParticleManager.CreateParticle("shockwave", worldPosition, Vector2.Zero, 0.0f, hull); - - } for (int i = 0; i < attack.Range * 0.1f; i++) @@ -79,6 +77,21 @@ namespace Barotrauma ApplyExplosionForces(worldPosition, attack.Range, force, attack.GetDamage(1.0f), attack.Stun); + if (flames) + { + foreach (Item item in Item.ItemList) + { + if (item.CurrentHull != hull || item.FireProof || item.Condition <= 0.0f) continue; + //if (item.ParentInventory != null) return; + + if (Vector2.Distance(item.WorldPosition, worldPosition) > attack.Range * 0.1f) continue; + + //item.Condition -= (float)Math.Sqrt(size.X) * deltaTime; + + item.ApplyStatusEffects(ActionType.OnFire, 1.0f); + } + } + } private IEnumerable DimLight() diff --git a/Subsurface/Source/Map/FireSource.cs b/Subsurface/Source/Map/FireSource.cs index 4b7e9f104..7545fa229 100644 --- a/Subsurface/Source/Map/FireSource.cs +++ b/Subsurface/Source/Map/FireSource.cs @@ -250,7 +250,7 @@ namespace Barotrauma foreach (Item item in Item.ItemList) { if (item.CurrentHull != hull || item.FireProof || item.Condition <= 0.0f) continue; - if (item.ParentInventory != null) return; + //if (item.ParentInventory != null) return; float range = (float)Math.Sqrt(size.X) * 10.0f; if (item.Position.X < position.X - range || item.Position.X > position.X + size.X + range) continue; diff --git a/Subsurface/Source/Map/SubmarineBody.cs b/Subsurface/Source/Map/SubmarineBody.cs index b2f0faad0..57e586dca 100644 --- a/Subsurface/Source/Map/SubmarineBody.cs +++ b/Subsurface/Source/Map/SubmarineBody.cs @@ -492,10 +492,10 @@ namespace Barotrauma SoundPlayer.PlayDamageSound(DamageSoundType.StructureBlunt, impact * 10.0f, ConvertUnits.ToDisplayUnits(lastContactPoint)); GameMain.GameScreen.Cam.Shake = impact * 2.0f; - Vector2 limbForce = direction * impact * 0.5f; + Vector2 impulse = direction * impact * 0.5f; - float length = limbForce.Length(); - if (length > 5.0f) limbForce = (limbForce / length) * 5.0f; + float length = impulse.Length(); + if (length > 5.0f) impulse = (impulse / length) * 5.0f; foreach (Character c in Character.CharacterList) { @@ -506,10 +506,17 @@ namespace Barotrauma foreach (Limb limb in c.AnimController.Limbs) { if (c.AnimController.LowestLimb == limb) continue; - limb.body.ApplyLinearImpulse(limb.Mass * limbForce); + limb.body.ApplyLinearImpulse(limb.Mass * impulse); } } + foreach (Item item in Item.ItemList) + { + if (item.Submarine != submarine || item.CurrentHull == null || item.body == null) continue; + + item.body.ApplyLinearImpulse(item.body.Mass * impulse); + } + Explosion.RangedStructureDamage(ConvertUnits.ToDisplayUnits(lastContactPoint), impact * 50.0f, impact * DamageMultiplier); }